nxt_schema 0.1.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.ruby-version +1 -0
- data/Gemfile +0 -1
- data/Gemfile.lock +40 -42
- data/README.md +267 -121
- data/lib/nxt_schema.rb +60 -51
- data/lib/nxt_schema/callable.rb +21 -55
- data/lib/nxt_schema/dsl.rb +41 -31
- data/lib/nxt_schema/error.rb +4 -0
- data/lib/nxt_schema/errors/{error.rb → coercion_error.rb} +1 -2
- data/lib/nxt_schema/errors/invalid.rb +16 -0
- data/lib/nxt_schema/errors/invalid_options.rb +6 -0
- data/lib/nxt_schema/node/any_of.rb +39 -0
- data/lib/nxt_schema/node/base.rb +66 -267
- data/lib/nxt_schema/node/collection.rb +40 -56
- data/lib/nxt_schema/node/error_store.rb +41 -0
- data/lib/nxt_schema/node/errors/schema_error.rb +15 -0
- data/lib/nxt_schema/node/errors/validation_error.rb +15 -0
- data/lib/nxt_schema/node/leaf.rb +8 -36
- data/lib/nxt_schema/node/schema.rb +70 -103
- data/lib/nxt_schema/registry.rb +12 -74
- data/lib/nxt_schema/registry/proxy.rb +21 -0
- data/lib/nxt_schema/template/any_of.rb +50 -0
- data/lib/nxt_schema/template/base.rb +220 -0
- data/lib/nxt_schema/template/collection.rb +23 -0
- data/lib/nxt_schema/template/has_sub_nodes.rb +87 -0
- data/lib/nxt_schema/template/leaf.rb +13 -0
- data/lib/nxt_schema/template/maybe_evaluator.rb +28 -0
- data/lib/nxt_schema/template/on_evaluator.rb +25 -0
- data/lib/nxt_schema/template/schema.rb +22 -0
- data/lib/nxt_schema/template/sub_nodes.rb +22 -0
- data/lib/nxt_schema/template/type_resolver.rb +39 -0
- data/lib/nxt_schema/template/type_system_resolver.rb +22 -0
- data/lib/nxt_schema/types.rb +7 -4
- data/lib/nxt_schema/undefined.rb +4 -2
- data/lib/nxt_schema/validators/{equality.rb → equal_to.rb} +2 -2
- data/lib/nxt_schema/validators/error_messages.rb +42 -0
- data/lib/nxt_schema/{error_messages → validators/error_messages}/en.yaml +6 -5
- data/lib/nxt_schema/validators/{excluded.rb → excluded_in.rb} +1 -1
- data/lib/nxt_schema/validators/{included.rb → included_in.rb} +1 -1
- data/lib/nxt_schema/validators/includes.rb +1 -1
- data/lib/nxt_schema/validators/optional_node.rb +11 -6
- data/lib/nxt_schema/validators/registry.rb +1 -7
- data/lib/nxt_schema/{node → validators}/validate_with_proxy.rb +3 -3
- data/lib/nxt_schema/validators/validator.rb +2 -2
- data/lib/nxt_schema/version.rb +1 -1
- data/nxt_schema.gemspec +1 -0
- metadata +44 -21
- data/lib/nxt_schema/callable_or_value.rb +0 -72
- data/lib/nxt_schema/error_messages.rb +0 -40
- data/lib/nxt_schema/errors.rb +0 -4
- data/lib/nxt_schema/errors/invalid_options_error.rb +0 -5
- data/lib/nxt_schema/errors/schema_not_applied_error.rb +0 -5
- data/lib/nxt_schema/node/constructor.rb +0 -9
- data/lib/nxt_schema/node/default_value_evaluator.rb +0 -20
- data/lib/nxt_schema/node/error.rb +0 -13
- data/lib/nxt_schema/node/has_subnodes.rb +0 -97
- data/lib/nxt_schema/node/maybe_evaluator.rb +0 -23
- data/lib/nxt_schema/node/template_store.rb +0 -15
- data/lib/nxt_schema/node/type_resolver.rb +0 -24
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            module NxtSchema
         | 
| 2 | 
            +
              module Template
         | 
| 3 | 
            +
                class MaybeEvaluator
         | 
| 4 | 
            +
                  def initialize(value:)
         | 
| 5 | 
            +
                    @value = value
         | 
| 6 | 
            +
                  end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def call(target = nil, *args)
         | 
| 9 | 
            +
                    evaluator = evaluator(target, *args)
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    if evaluator.value?
         | 
| 12 | 
            +
                      # When a value was given we check if this equals to the input
         | 
| 13 | 
            +
                      evaluator.call == target
         | 
| 14 | 
            +
                    else
         | 
| 15 | 
            +
                      evaluator.call
         | 
| 16 | 
            +
                    end
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  private
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  def evaluator(target, *args)
         | 
| 22 | 
            +
                    Callable.new(value, target, *args)
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  attr_reader :value
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            module NxtSchema
         | 
| 2 | 
            +
              module Template
         | 
| 3 | 
            +
                class OnEvaluator
         | 
| 4 | 
            +
                  def initialize(condition:, value:)
         | 
| 5 | 
            +
                    @condition = condition
         | 
| 6 | 
            +
                    @value = value
         | 
| 7 | 
            +
                  end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  def call(target = nil, *args, &block)
         | 
| 10 | 
            +
                    return unless condition_applies?(target, *args)
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                    result = Callable.new(value, target, *args).call
         | 
| 13 | 
            +
                    block.yield(result)
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  private
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  def condition_applies?(target, *args)
         | 
| 19 | 
            +
                    Callable.new(condition, target, *args).call
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  attr_reader :condition, :value
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            module NxtSchema
         | 
| 2 | 
            +
              module Template
         | 
| 3 | 
            +
                class Schema < Template::Base
         | 
| 4 | 
            +
                  include HasSubNodes
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                  DEFAULT_TYPE = NxtSchema::Types::Strict::Hash
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def initialize(name:, type: DEFAULT_TYPE, parent_node:, **options, &block)
         | 
| 9 | 
            +
                    super
         | 
| 10 | 
            +
                    ensure_sub_nodes_present
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  def optional(name, node_or_type_of_node, **options, &block)
         | 
| 14 | 
            +
                    node(name, node_or_type_of_node, **options.merge(optional: true), &block)
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  def omnipresent(name, node_or_type_of_node, **options, &block)
         | 
| 18 | 
            +
                    node(name, node_or_type_of_node, **options.merge(omnipresent: true), &block)
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            module NxtSchema
         | 
| 2 | 
            +
              module Template
         | 
| 3 | 
            +
                class SubNodes < ::Hash
         | 
| 4 | 
            +
                  def initialize
         | 
| 5 | 
            +
                    super
         | 
| 6 | 
            +
                    transform_keys { |k| k.to_sym }
         | 
| 7 | 
            +
                  end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  def add(node)
         | 
| 10 | 
            +
                    node_name = node.name
         | 
| 11 | 
            +
                    ensure_node_name_free(node_name)
         | 
| 12 | 
            +
                    self[node_name] = node
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  def ensure_node_name_free(name)
         | 
| 16 | 
            +
                    return unless key?(name)
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                    raise KeyError, "Node with name '#{name}' already exists! Node names must be unique!"
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
| @@ -0,0 +1,39 @@ | |
| 1 | 
            +
            module NxtSchema
         | 
| 2 | 
            +
              module Template
         | 
| 3 | 
            +
                class TypeResolver
         | 
| 4 | 
            +
                  def resolve(type_system, type)
         | 
| 5 | 
            +
                    @resolve ||= {}
         | 
| 6 | 
            +
                    @resolve[type] ||= begin
         | 
| 7 | 
            +
                      if type.is_a?(Symbol)
         | 
| 8 | 
            +
                        resolve_type_from_symbol(type, type_system)
         | 
| 9 | 
            +
                      elsif type.respond_to?(:call)
         | 
| 10 | 
            +
                        type
         | 
| 11 | 
            +
                      else
         | 
| 12 | 
            +
                        raise_type_not_resolvable_error(type)
         | 
| 13 | 
            +
                      end
         | 
| 14 | 
            +
                    rescue NxtRegistry::Errors::KeyNotRegisteredError => error
         | 
| 15 | 
            +
                      raise_type_not_resolvable_error(type)
         | 
| 16 | 
            +
                    end
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  private
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  def resolve_type_from_symbol(type, type_system)
         | 
| 22 | 
            +
                    classified_type = type.to_s.classify
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                    return type_system.const_get(classified_type) if type_defined_in_type_system?(type, type_system)
         | 
| 25 | 
            +
                    return NxtSchema::Types::Nominal.const_get(classified_type) if type_defined_in_type_system?(type, NxtSchema::Types::Nominal)
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                    NxtSchema::Types.registry(:types).resolve!(type)
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  def type_defined_in_type_system?(type, type_system)
         | 
| 31 | 
            +
                    type_system.constants.include?(type)
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  def raise_type_not_resolvable_error(type)
         | 
| 35 | 
            +
                    raise ArgumentError, "Can't resolve type: #{type}"
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
            end
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            module NxtSchema
         | 
| 2 | 
            +
              module Template
         | 
| 3 | 
            +
                class TypeSystemResolver
         | 
| 4 | 
            +
                  include NxtInit
         | 
| 5 | 
            +
                  attr_init :node
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  delegate_missing_to :node
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  def call
         | 
| 10 | 
            +
                    type_system = options.fetch(:type_system) { parent_node&.type_system }
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                    if type_system.is_a?(Module)
         | 
| 13 | 
            +
                      type_system
         | 
| 14 | 
            +
                    elsif type_system.is_a?(Symbol) || type_system.is_a?(String)
         | 
| 15 | 
            +
                      "NxtSchema::Types::#{type_system.to_s.classify}".constantize
         | 
| 16 | 
            +
                    else
         | 
| 17 | 
            +
                      NxtSchema::Types
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
    
        data/lib/nxt_schema/types.rb
    CHANGED
    
    | @@ -1,10 +1,13 @@ | |
| 1 1 | 
             
            module NxtSchema
         | 
| 2 2 | 
             
              module Types
         | 
| 3 3 | 
             
                include Dry.Types()
         | 
| 4 | 
            +
                extend NxtRegistry
         | 
| 4 5 |  | 
| 5 | 
            -
                 | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 6 | 
            +
                registry(:types, call: false) do
         | 
| 7 | 
            +
                  register(:StrippedString, Strict::String.constructor(->(string) { string&.strip }))
         | 
| 8 | 
            +
                  register(:LengthyStrippedString, resolve!(:StrippedString).constrained(min_size: 1))
         | 
| 9 | 
            +
                  register(:Enum, -> (*values) { Strict::String.enum(*values) })
         | 
| 10 | 
            +
                  register(:SymbolizedEnum, -> (*values) { Coercible::Symbol.enum(*values) })
         | 
| 11 | 
            +
                end
         | 
| 9 12 | 
             
              end
         | 
| 10 13 | 
             
            end
         | 
    
        data/lib/nxt_schema/undefined.rb
    CHANGED
    
    
| @@ -5,7 +5,7 @@ module NxtSchema | |
| 5 5 | 
             
                    @expectation = expectation
         | 
| 6 6 | 
             
                  end
         | 
| 7 7 |  | 
| 8 | 
            -
                  register_as : | 
| 8 | 
            +
                  register_as :equal_to, :eql
         | 
| 9 9 | 
             
                  attr_reader :expectation
         | 
| 10 10 |  | 
| 11 11 | 
             
                  # Query for equality validator(:equality, 3)
         | 
| @@ -13,7 +13,7 @@ module NxtSchema | |
| 13 13 |  | 
| 14 14 | 
             
                  def build
         | 
| 15 15 | 
             
                    lambda do |node, value|
         | 
| 16 | 
            -
                      expected_value =  | 
| 16 | 
            +
                      expected_value = Callable.new(expectation, nil, value).call
         | 
| 17 17 |  | 
| 18 18 | 
             
                      if value == expected_value
         | 
| 19 19 | 
             
                        true
         | 
| @@ -0,0 +1,42 @@ | |
| 1 | 
            +
            module NxtSchema
         | 
| 2 | 
            +
              module Validators
         | 
| 3 | 
            +
                class ErrorMessages
         | 
| 4 | 
            +
                  class << self
         | 
| 5 | 
            +
                    def values
         | 
| 6 | 
            +
                      @values ||= {}
         | 
| 7 | 
            +
                    end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                    def values=(value)
         | 
| 10 | 
            +
                      @values = value
         | 
| 11 | 
            +
                    end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    def load(paths = files)
         | 
| 14 | 
            +
                      Array(paths).each do |path|
         | 
| 15 | 
            +
                        new_values = YAML.load(ERB.new(File.read(path)).result).with_indifferent_access
         | 
| 16 | 
            +
                        self.values = values.deep_merge!(new_values)
         | 
| 17 | 
            +
                      end
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                    def resolve(locale, key, **options)
         | 
| 21 | 
            +
                      message = begin
         | 
| 22 | 
            +
                        values.fetch(locale).fetch(key)
         | 
| 23 | 
            +
                      rescue KeyError
         | 
| 24 | 
            +
                        raise "Could not resolve error message for #{locale}->#{key}"
         | 
| 25 | 
            +
                      end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                      message % options
         | 
| 28 | 
            +
                    end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                    def files
         | 
| 31 | 
            +
                      @files ||= begin
         | 
| 32 | 
            +
                        files = Dir.entries(File.expand_path('../error_messages/', __FILE__)).map do |filename|
         | 
| 33 | 
            +
                          File.expand_path("../error_messages/#{filename}", __FILE__)
         | 
| 34 | 
            +
                        end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                        files.select { |f| !File.directory? f }
         | 
| 37 | 
            +
                      end
         | 
| 38 | 
            +
                    end
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
            end
         | 
| @@ -1,15 +1,16 @@ | |
| 1 1 | 
             
            en:
         | 
| 2 | 
            -
              required_key_missing: "Required key :%{key} is missing | 
| 3 | 
            -
              additional_keys_detected: "Additional keys %{keys} not allowed | 
| 2 | 
            +
              required_key_missing: "Required key :%{key} is missing"
         | 
| 3 | 
            +
              additional_keys_detected: "Additional keys %{keys} not allowed"
         | 
| 4 4 | 
             
              attribute: "%{attribute} has invalid %{attribute_name} attribute of %{value}"
         | 
| 5 | 
            -
               | 
| 5 | 
            +
              equal_to: "%{actual} does not equal %{expected}"
         | 
| 6 6 | 
             
              excludes: "%{value} cannot contain %{target}"
         | 
| 7 7 | 
             
              includes: "%{value} must include %{target}"
         | 
| 8 | 
            -
               | 
| 9 | 
            -
               | 
| 8 | 
            +
              excluded_in: "%{value} must be excluded in %{target}"
         | 
| 9 | 
            +
              included_in: "%{value} must be included in %{target}"
         | 
| 10 10 | 
             
              greater_than: "%{value} must be greater than %{threshold}"
         | 
| 11 11 | 
             
              greater_than_or_equal: "%{value} must be greater than or equal to %{threshold}"
         | 
| 12 12 | 
             
              less_than: "%{value} must be less than %{threshold}"
         | 
| 13 13 | 
             
              less_than_or_equal: "%{value} must be less than or equal to %{threshold}"
         | 
| 14 14 | 
             
              pattern: "%{value} must match pattern %{pattern}"
         | 
| 15 15 | 
             
              query: "%{value}.%{query} was %{actual} and must be true"
         | 
| 16 | 
            +
              emptiness: "%{value} cannot not be empty"
         | 
| @@ -13,12 +13,17 @@ module NxtSchema | |
| 13 13 | 
             
                    lambda do |node, value|
         | 
| 14 14 | 
             
                      args = [node, value]
         | 
| 15 15 |  | 
| 16 | 
            -
                      if conditional.call(*args.take(conditional.arity))
         | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
                        node. | 
| 21 | 
            -
             | 
| 16 | 
            +
                      return if conditional.call(*args.take(conditional.arity))
         | 
| 17 | 
            +
                      return if node.send(:keys).include?(missing_key.to_sym)
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                      message = ErrorMessages.resolve(
         | 
| 20 | 
            +
                        node.locale,
         | 
| 21 | 
            +
                        :required_key_missing,
         | 
| 22 | 
            +
                        key: missing_key,
         | 
| 23 | 
            +
                        target: node.input
         | 
| 24 | 
            +
                      )
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                      node.add_error(message)
         | 
| 22 27 | 
             
                    end
         | 
| 23 28 | 
             
                  end
         | 
| 24 29 | 
             
                end
         | 
| @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            module NxtSchema
         | 
| 2 | 
            -
              module  | 
| 2 | 
            +
              module Validator
         | 
| 3 3 | 
             
                class ValidateWithProxy
         | 
| 4 4 | 
             
                  def initialize(node)
         | 
| 5 5 | 
             
                    @node = node
         | 
| @@ -33,8 +33,8 @@ module NxtSchema | |
| 33 33 | 
             
                  attr_reader :aggregated_errors
         | 
| 34 34 |  | 
| 35 35 | 
             
                  def validator(key, *args)
         | 
| 36 | 
            -
                    validator = node.validator | 
| 37 | 
            -
                    validator.call(self, node. | 
| 36 | 
            +
                    validator = node.node.send(:validator, key, *args)
         | 
| 37 | 
            +
                    validator.call(self, node.input)
         | 
| 38 38 | 
             
                  end
         | 
| 39 39 | 
             
                end
         | 
| 40 40 | 
             
              end
         | 
| @@ -3,14 +3,14 @@ module NxtSchema | |
| 3 3 | 
             
                class Validator
         | 
| 4 4 | 
             
                  def self.register_as(*keys)
         | 
| 5 5 | 
             
                    keys.each do |key|
         | 
| 6 | 
            -
                      NxtSchema::Validators:: | 
| 6 | 
            +
                      NxtSchema::Validators::REGISTRY.register(key, self)
         | 
| 7 7 | 
             
                    end
         | 
| 8 8 |  | 
| 9 9 | 
             
                    define_method('key') { @key ||= keys.first }
         | 
| 10 10 | 
             
                  end
         | 
| 11 11 |  | 
| 12 12 | 
             
                  def translate_error(locale, **options)
         | 
| 13 | 
            -
                    NxtSchema::ErrorMessages.resolve(locale, key, **options)
         | 
| 13 | 
            +
                    NxtSchema::Validators::ErrorMessages.resolve(locale, key, **options)
         | 
| 14 14 | 
             
                  end
         | 
| 15 15 | 
             
                end
         | 
| 16 16 | 
             
              end
         | 
    
        data/lib/nxt_schema/version.rb
    CHANGED
    
    
    
        data/nxt_schema.gemspec
    CHANGED
    
    | @@ -38,6 +38,7 @@ Gem::Specification.new do |spec| | |
| 38 38 | 
             
              spec.add_dependency "activesupport"
         | 
| 39 39 | 
             
              spec.add_dependency "dry-types"
         | 
| 40 40 | 
             
              spec.add_dependency "nxt_registry"
         | 
| 41 | 
            +
              spec.add_dependency "nxt_init"
         | 
| 41 42 | 
             
              spec.add_development_dependency "bundler", "~> 1.17"
         | 
| 42 43 | 
             
              spec.add_development_dependency "rake", "~> 12.3.3"
         | 
| 43 44 | 
             
              spec.add_development_dependency "rspec", "~> 3.0"
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: nxt_schema
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version:  | 
| 4 | 
            +
              version: 1.0.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Andreas Robecke
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2021-03-20 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         | 
| @@ -52,6 +52,20 @@ dependencies: | |
| 52 52 | 
             
                - - ">="
         | 
| 53 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 54 | 
             
                    version: '0'
         | 
| 55 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            +
              name: nxt_init
         | 
| 57 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - ">="
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: '0'
         | 
| 62 | 
            +
              type: :runtime
         | 
| 63 | 
            +
              prerelease: false
         | 
| 64 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                requirements:
         | 
| 66 | 
            +
                - - ">="
         | 
| 67 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                    version: '0'
         | 
| 55 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 56 70 | 
             
              name: bundler
         | 
| 57 71 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -131,6 +145,7 @@ extra_rdoc_files: [] | |
| 131 145 | 
             
            files:
         | 
| 132 146 | 
             
            - ".gitignore"
         | 
| 133 147 | 
             
            - ".rspec"
         | 
| 148 | 
            +
            - ".ruby-version"
         | 
| 134 149 | 
             
            - ".travis.yml"
         | 
| 135 150 | 
             
            - Gemfile
         | 
| 136 151 | 
             
            - Gemfile.lock
         | 
| @@ -141,37 +156,44 @@ files: | |
| 141 156 | 
             
            - bin/setup
         | 
| 142 157 | 
             
            - lib/nxt_schema.rb
         | 
| 143 158 | 
             
            - lib/nxt_schema/callable.rb
         | 
| 144 | 
            -
            - lib/nxt_schema/callable_or_value.rb
         | 
| 145 159 | 
             
            - lib/nxt_schema/dsl.rb
         | 
| 146 | 
            -
            - lib/nxt_schema/ | 
| 147 | 
            -
            - lib/nxt_schema/ | 
| 148 | 
            -
            - lib/nxt_schema/errors.rb
         | 
| 149 | 
            -
            - lib/nxt_schema/errors/ | 
| 150 | 
            -
            - lib/nxt_schema/errors/invalid_options_error.rb
         | 
| 151 | 
            -
            - lib/nxt_schema/errors/schema_not_applied_error.rb
         | 
| 160 | 
            +
            - lib/nxt_schema/error.rb
         | 
| 161 | 
            +
            - lib/nxt_schema/errors/coercion_error.rb
         | 
| 162 | 
            +
            - lib/nxt_schema/errors/invalid.rb
         | 
| 163 | 
            +
            - lib/nxt_schema/errors/invalid_options.rb
         | 
| 152 164 | 
             
            - lib/nxt_schema/node.rb
         | 
| 165 | 
            +
            - lib/nxt_schema/node/any_of.rb
         | 
| 153 166 | 
             
            - lib/nxt_schema/node/base.rb
         | 
| 154 167 | 
             
            - lib/nxt_schema/node/collection.rb
         | 
| 155 | 
            -
            - lib/nxt_schema/node/ | 
| 156 | 
            -
            - lib/nxt_schema/node/ | 
| 157 | 
            -
            - lib/nxt_schema/node/ | 
| 158 | 
            -
            - lib/nxt_schema/node/has_subnodes.rb
         | 
| 168 | 
            +
            - lib/nxt_schema/node/error_store.rb
         | 
| 169 | 
            +
            - lib/nxt_schema/node/errors/schema_error.rb
         | 
| 170 | 
            +
            - lib/nxt_schema/node/errors/validation_error.rb
         | 
| 159 171 | 
             
            - lib/nxt_schema/node/leaf.rb
         | 
| 160 | 
            -
            - lib/nxt_schema/node/maybe_evaluator.rb
         | 
| 161 172 | 
             
            - lib/nxt_schema/node/schema.rb
         | 
| 162 | 
            -
            - lib/nxt_schema/node/template_store.rb
         | 
| 163 | 
            -
            - lib/nxt_schema/node/type_resolver.rb
         | 
| 164 | 
            -
            - lib/nxt_schema/node/validate_with_proxy.rb
         | 
| 165 173 | 
             
            - lib/nxt_schema/registry.rb
         | 
| 174 | 
            +
            - lib/nxt_schema/registry/proxy.rb
         | 
| 175 | 
            +
            - lib/nxt_schema/template/any_of.rb
         | 
| 176 | 
            +
            - lib/nxt_schema/template/base.rb
         | 
| 177 | 
            +
            - lib/nxt_schema/template/collection.rb
         | 
| 178 | 
            +
            - lib/nxt_schema/template/has_sub_nodes.rb
         | 
| 179 | 
            +
            - lib/nxt_schema/template/leaf.rb
         | 
| 180 | 
            +
            - lib/nxt_schema/template/maybe_evaluator.rb
         | 
| 181 | 
            +
            - lib/nxt_schema/template/on_evaluator.rb
         | 
| 182 | 
            +
            - lib/nxt_schema/template/schema.rb
         | 
| 183 | 
            +
            - lib/nxt_schema/template/sub_nodes.rb
         | 
| 184 | 
            +
            - lib/nxt_schema/template/type_resolver.rb
         | 
| 185 | 
            +
            - lib/nxt_schema/template/type_system_resolver.rb
         | 
| 166 186 | 
             
            - lib/nxt_schema/types.rb
         | 
| 167 187 | 
             
            - lib/nxt_schema/undefined.rb
         | 
| 168 188 | 
             
            - lib/nxt_schema/validators/attribute.rb
         | 
| 169 | 
            -
            - lib/nxt_schema/validators/ | 
| 170 | 
            -
            - lib/nxt_schema/validators/ | 
| 189 | 
            +
            - lib/nxt_schema/validators/equal_to.rb
         | 
| 190 | 
            +
            - lib/nxt_schema/validators/error_messages.rb
         | 
| 191 | 
            +
            - lib/nxt_schema/validators/error_messages/en.yaml
         | 
| 192 | 
            +
            - lib/nxt_schema/validators/excluded_in.rb
         | 
| 171 193 | 
             
            - lib/nxt_schema/validators/excludes.rb
         | 
| 172 194 | 
             
            - lib/nxt_schema/validators/greater_than.rb
         | 
| 173 195 | 
             
            - lib/nxt_schema/validators/greater_than_or_equal.rb
         | 
| 174 | 
            -
            - lib/nxt_schema/validators/ | 
| 196 | 
            +
            - lib/nxt_schema/validators/included_in.rb
         | 
| 175 197 | 
             
            - lib/nxt_schema/validators/includes.rb
         | 
| 176 198 | 
             
            - lib/nxt_schema/validators/less_than.rb
         | 
| 177 199 | 
             
            - lib/nxt_schema/validators/less_than_or_equal.rb
         | 
| @@ -179,6 +201,7 @@ files: | |
| 179 201 | 
             
            - lib/nxt_schema/validators/pattern.rb
         | 
| 180 202 | 
             
            - lib/nxt_schema/validators/query.rb
         | 
| 181 203 | 
             
            - lib/nxt_schema/validators/registry.rb
         | 
| 204 | 
            +
            - lib/nxt_schema/validators/validate_with_proxy.rb
         | 
| 182 205 | 
             
            - lib/nxt_schema/validators/validator.rb
         | 
| 183 206 | 
             
            - lib/nxt_schema/version.rb
         | 
| 184 207 | 
             
            - nxt_schema.gemspec
         | 
| @@ -204,7 +227,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 204 227 | 
             
                - !ruby/object:Gem::Version
         | 
| 205 228 | 
             
                  version: '0'
         | 
| 206 229 | 
             
            requirements: []
         | 
| 207 | 
            -
            rubygems_version: 3. | 
| 230 | 
            +
            rubygems_version: 3.1.2
         | 
| 208 231 | 
             
            signing_key: 
         | 
| 209 232 | 
             
            specification_version: 4
         | 
| 210 233 | 
             
            summary: Write a short summary, because RubyGems requires one.
         |