Sha256: 679d9f5d86387ac07f8b093fe5dcfd703818407bd1b3d618174802f2cc1d61d2

Contents?: true

Size: 1.11 KB

Versions: 4

Compression:

Stored size: 1.11 KB

Contents

module Jimmy
  class SchemaTypes::Object < SchemaType
    register!

    trait :require do |*required_keys|
      if required_keys == [0]
        attrs[:required] = SymbolArray.new
      else
        attrs[:required] ||= SymbolArray.new
        attrs[:required] |= required_keys.flatten.map(&:to_s).uniq
      end
    end

    trait :all do
      SymbolArray.new(attrs[:properties].keys.select { |x| x.is_a? Symbol })
    end

    trait(:none) { 0 }

    trait(:allow_additional) { attrs[:additional_properties] = true }

    nested do |schema, property_name|
      (attrs[:properties] ||= {})[property_name] = schema
    end

    compile do |hash|
      (attrs[:properties] || {}).each do |key, value|
        collection, key =
            if key.is_a? Regexp
              ['patternProperties', key.inspect.gsub(%r`^/|/[a-z]*$`, '')]
            else
              ['properties', key.to_s]
            end
        hash[collection] ||= {}
        hash[collection][key] = value.compile
      end
      hash['required'] = (attrs[:required] || []).to_a
      hash['additionalProperties'] = !!attrs[:additional_properties]
    end

  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
jimmy-0.3.3 lib/jimmy/schema_types/object.rb
jimmy-0.3.2 lib/jimmy/schema_types/object.rb
jimmy-0.3.1 lib/jimmy/schema_types/object.rb
jimmy-0.3 lib/jimmy/schema_types/object.rb