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