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