class Jimmy::SchemerFactory
Factory class for making JSONSchemer::Schema::Base
instances
Public Class Methods
available?()
click to toggle source
Returns true if the json_schemer
gem is loaded. @return [true, false]
# File lib/jimmy/schemer_factory.rb, line 8 def self.available? defined? ::JSONSchemer end
new(schema, *resolvers, cache_resolvers: true, **opts)
click to toggle source
@param [Schema, as_json] schema @param [Array<#resolve, 'net/http'>] resolvers @param [true, false] cache_resolvers @param [Hash] opts Options to be passed to JSONSchemer
# File lib/jimmy/schemer_factory.rb, line 16 def initialize(schema, *resolvers, cache_resolvers: true, **opts) unless self.class.available? raise LoadError, 'Please add the json_schemer gem to your Gemfile' end @schema = schema @resolvers = resolvers.map(&method(:cast_resolver)) @options = opts.dup return if @resolvers.empty? res = method(:resolve) res = JSONSchemer::CachedRefResolver.new(&res) if cache_resolvers @options[:ref_resolver] = res end
Public Instance Methods
resolve(uri)
click to toggle source
@param [String, URI, Json::URI] uri @return [Hash{String => Object}, nil]
# File lib/jimmy/schemer_factory.rb, line 41 def resolve(uri) @resolvers.each do |resolver| return resolver.call(uri) unless resolver.respond_to? :resolve schema = resolver.resolve(uri) return schema.as_json if schema end nil end
schemer()
click to toggle source
Get an instance of JSONSchemer::Schema::Base
that can be used to validate JSON documents against the given {Schema}. @return [JSONSchemer::Schema::Base]
# File lib/jimmy/schemer_factory.rb, line 35 def schemer @schemer ||= JSONSchemer.schema(@schema.as_json, **@options) end
Private Instance Methods
cast_resolver(resolver)
click to toggle source
# File lib/jimmy/schemer_factory.rb, line 53 def cast_resolver(resolver) if resolver == 'net/http' return JSONSchemer::Schema::Base::NET_HTTP_REF_RESOLVER end unless resolver.respond_to? :resolve raise Error::BadArgument, 'Expected an object responding to :resolve' end resolver end