Sha256: 5aebc5d4e2c93db0cfa86e51f10179157d1ceb850bf10c476c8eb303ef3b8728

Contents?: true

Size: 1.08 KB

Versions: 9

Compression:

Stored size: 1.08 KB

Contents

module Lurker
  module Json
    module Concerns
      module Validatable
        def validate(data)
          Lurker::Validator.new(to_validation_schema, data,
            record_errors: true).validate.map { |error| "- #{error}" }
        end

        def to_validation_schema
          set_additional_properties_false_on(to_hash).tap do |schema|
            schema[Json::ID] = "file://#{uri}"
          end
        end

        private

        def set_additional_properties_false_on(object)
          case object
          when Hash
            copy = object.dup

            if object[Json::TYPE] == Json::OBJECT || object.key?(Json::PROPERTIES)
              copy[Json::ADDITIONAL_PROPERTIES] ||= false
            end

            object.each do |key, value|
              next if key == Json::ADDITIONAL_PROPERTIES
              copy[key] = set_additional_properties_false_on(value)
            end

            copy
          when Array
            copy = object.map { |value| set_additional_properties_false_on(value) }
          else object
          end
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
lurker-0.6.12 lib/lurker/json/concerns/validatable.rb
lurker-0.6.11 lib/lurker/json/concerns/validatable.rb
lurker-0.6.10 lib/lurker/json/concerns/validatable.rb
lurker-0.6.9 lib/lurker/json/concerns/validatable.rb
lurker-0.6.8 lib/lurker/json/concerns/validatable.rb
lurker-0.6.7 lib/lurker/json/concerns/validatable.rb
lurker-0.6.6 lib/lurker/json/concerns/validatable.rb
lurker-0.6.5 lib/lurker/json/concerns/validatable.rb
lurker-0.6.4 lib/lurker/json/concerns/validatable.rb