Sha256: d8d4a61452d74d4a547fa9280441d86aa8b4e1fe2aabd45e6b4a92cf80ee4d93

Contents?: true

Size: 1.43 KB

Versions: 1

Compression:

Stored size: 1.43 KB

Contents

module Inspector
  module Metadata
    class Walker
      def initialize(violation_list_class, validator_map)
        @violation_list_class = violation_list_class
        @validator_map        = validator_map
      end

      def walk_object(metadata, object)
        violations = @violation_list_class.new

        metadata.constraints.each do |constraint|
          not_found = "validator #{constraint.validator} cannot be found"
          validator = @validator_map.fetch(constraint.validator) { raise not_found }

          validator.validate(object, constraint, violations)
        end

        # walk object attributes, properties and children if object constraints passed
        if violations.empty?
          metadata.attribute_metadatas.each do |metadata|
            path  = metadata.attribute_name
            value = metadata.attribute_value(object)

            violations[path] = walk_object(metadata, value)
          end

          metadata.property_metadatas.each do |metadata|
            path  = "[#{metadata.property_name}]"
            value = metadata.property_value(object)

            violations[path] = walk_object(metadata, value)
          end

          metadata.children_metadata.children(object) do |child, index|
            path = "[#{index}]"

            violations[path] = walk_object(metadata.children_metadata, child)
          end unless metadata.children_metadata.nil?
        end

        violations
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
object-inspector-0.1.0 lib/inspector/metadata/walker.rb