class JSON::SchemaGenerator::BruteForceRequiredSearch

Public Class Methods

new(data) click to toggle source
# File lib/json/schema_generator/brute_force_required_search.rb, line 6
def initialize(data)
  @data = data.dup
  @json_path = data.is_a?(Array) ? ['$[*]'] : ['$']
end

Public Instance Methods

child_keys() click to toggle source
# File lib/json/schema_generator/brute_force_required_search.rb, line 37
def child_keys
  JsonPath.new(current_path).on(@data).map(&:keys).flatten.uniq
end
current_path() click to toggle source
# File lib/json/schema_generator/brute_force_required_search.rb, line 19
def current_path
  @json_path.join '.'
end
find_required() click to toggle source
# File lib/json/schema_generator/brute_force_required_search.rb, line 41
def find_required
  child_keys.select {|k| required? k}
end
pop() click to toggle source
# File lib/json/schema_generator/brute_force_required_search.rb, line 15
def pop
  @json_path.pop
end
push(key, value) click to toggle source
# File lib/json/schema_generator/brute_force_required_search.rb, line 11
def push(key, value)
  @json_path.push value.is_a?(Array) ? "#{key}[*]" : key
end
required?(child_key) click to toggle source
# File lib/json/schema_generator/brute_force_required_search.rb, line 27
def required? child_key
  begin
    JsonPath.new(search_path(child_key)).on(@data).count == JsonPath.new(current_path).on(@data).count
  rescue SyntaxError
    # There are some special characters that can't be handled by JsonPath.
    # e.g. if child key is OS-DCF:diskConfig
    false
  end
end
search_path(search_key) click to toggle source
# File lib/json/schema_generator/brute_force_required_search.rb, line 23
def search_path search_key
  current_path.gsub(/\[\*\]$/, "[?(@.#{search_key})]")
end