Sha256: 2a70aa68d7daf2a852d6936f41f142a36e35beb743cef3cad530d19984832d5b

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

require 'jschematic/composite'

module Jschematic
  module Attributes
    class Properties
      include Jschematic::Composite

      def initialize(properties)
        properties.each_pair do |name, raw_schema|
          schema = Schema.with_name(raw_schema, name)
          add_child(schema)
        end
      end

      def accepts?(instance)
        children.all? do |child|
          match = find_instance_for(instance, child.name)

          if match
            value = match.last
          else
            value = nil
          end

          if value.nil? and child.default
            value = child.default
          end

          if value.nil? and child.required?
            fail_validation!("#{child.name} is required", nil)
          elsif !value
            true
          else
            child.accepts?(value) || fail_validation!(child.name, value)
          end
        end
      end

      def id
        @parent.id
      end

      private

      def find_instance_for(instance, wanted_name)
        instance.find do |property_name, _|
          property_name == wanted_name
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jschematic-0.1.0 lib/jschematic/attributes/properties.rb