Sha256: e7aef712d731d26ca54822463ad7fd3e33aeb177f74f5bde922d08bcc6a2bf4f

Contents?: true

Size: 1.32 KB

Versions: 8

Compression:

Stored size: 1.32 KB

Contents

module Fitting
  class Cover
    class JSONSchema
      attr_reader :json_schema, :combinations

      def initialize(json_schema)
        @json_schema = json_schema
        @combinations = []
      end

      def combi
        inception(json_schema, combinations).each do |combination|
          combination[0] = json_schema.merge(combination[0])
          combination[1] = ['required', combination[1]]
        end
      end

      def inception(json_schema, combinations)
        json_schema.each do |key, value|
          if (key == 'properties') && value && (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)
              next if property == 'type' || property == 'properties'
              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
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
fitting-4.2.1 lib/fitting/cover/json_schema.rb
fitting-4.2.0 lib/fitting/cover/json_schema.rb
fitting-4.1.0 lib/fitting/cover/json_schema.rb
fitting-4.0.4 lib/fitting/cover/json_schema.rb
fitting-4.0.3 lib/fitting/cover/json_schema.rb
fitting-4.0.2 lib/fitting/cover/json_schema.rb
fitting-4.0.1 lib/fitting/cover/json_schema.rb
fitting-4.0.0 lib/fitting/cover/json_schema.rb