class Fitting::Cover::JSONSchema

Public Class Methods

new(json_schema) click to toggle source
# File lib/fitting/cover/json_schema.rb, line 4
def initialize(json_schema)
  @json_schema = json_schema
  @combinations = []
end

Public Instance Methods

combi() click to toggle source
# File lib/fitting/cover/json_schema.rb, line 9
def combi
  inception(@json_schema, @combinations).each do |combination|
    combination[0] = @json_schema.merge(combination[0])
    combination[1] = ['required', combination[1]]
  end
end
inception(json_schema, combinations) click to toggle source
# File lib/fitting/cover/json_schema.rb, line 16
def inception(json_schema, combinations)
  json_schema.each do |key, value|
    if key == 'properties' and json_schema['required'] != value.keys
      schema = json_schema.dup
      one_of = schema.delete('required') || []
      schema['properties'].each_key do |property|
        next if one_of.include?(property)
        combinations.push([schema.merge('required' => one_of + [property]), "required.#{property}"])
      end
    elsif value.is_a?(Hash)
      com = inception(value, [])
      com.each do |combination|
        combination[0] = { key => value.merge(combination[0])}
        combination[1] = "#{key}.#{combination[1]}"
      end
      combinations += com
    end
  end

  combinations
end