Sha256: 53c1d01b303bab191f86340644a7660cce1d81c97474df7ff8b8f2d0c3199297

Contents?: true

Size: 1.16 KB

Versions: 10

Compression:

Stored size: 1.16 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
      required = attrs[:required]
      hash['required'] = required.to_a if required && !required.empty?
      hash['additionalProperties'] = !!attrs[:additional_properties]
    end

  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
jimmy-0.4.8 lib/jimmy/schema_types/object.rb
jimmy-0.4.7 lib/jimmy/schema_types/object.rb
jimmy-0.4.6 lib/jimmy/schema_types/object.rb
jimmy-0.4.5 lib/jimmy/schema_types/object.rb
jimmy-0.4.4 lib/jimmy/schema_types/object.rb
jimmy-0.4.3 lib/jimmy/schema_types/object.rb
jimmy-0.4.2 lib/jimmy/schema_types/object.rb
jimmy-0.4.1 lib/jimmy/schema_types/object.rb
jimmy-0.4 lib/jimmy/schema_types/object.rb
jimmy-0.3.4 lib/jimmy/schema_types/object.rb