Sha256: b5f3fa76dae5e0f6cda197f5552701a4c64b23c0968949dbb26a9cabd8d31eeb

Contents?: true

Size: 881 Bytes

Versions: 4

Compression:

Stored size: 881 Bytes

Contents

module NxtSchema
  module Validators
    class Attribute < Validator
      def initialize(method, expectation)
        @method = method
        @expectation = expectation
      end

      register_as :attribute, :attr
      attr_reader :method, :expectation

      # Query any attribute on a value with validator(:attribute, :size, ->(s) { s < 7 })

      def build
        lambda do |node, value|
          raise ArgumentError, "#{value} does not respond to query: #{method}" unless value.respond_to?(method)

          if expectation.call(value.send(method))
            true
          else
            node.add_error(
              translate_error(
                node.locale,
                attribute: value,
                attribute_name: method,
                value: value.send(method)
              )
            )
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
nxt_schema-1.0.2 lib/nxt_schema/validators/attribute.rb
nxt_schema-0.1.2 lib/nxt_schema/validators/attribute.rb
nxt_schema-0.1.1 lib/nxt_schema/validators/attribute.rb
nxt_schema-0.1.0 lib/nxt_schema/validators/attribute.rb