Class: JSON::SchemaGenerator::BruteForceRequiredSearch

Inherits:
Object
  • Object
show all
Defined in:
lib/json/schema_generator/brute_force_required_search.rb

Instance Method Summary collapse

Constructor Details

#initialize(data) ⇒ BruteForceRequiredSearch

Returns a new instance of BruteForceRequiredSearch.



6
7
8
9
10
11
12
13
# File 'lib/json/schema_generator/brute_force_required_search.rb', line 6

def initialize(data)
  @data = data.dup
  if data.is_a? Array
    @json_path = ['$[*]']
  else
    @json_path = ['$']
  end
end

Instance Method Details

#child_keysObject



45
46
47
# File 'lib/json/schema_generator/brute_force_required_search.rb', line 45

def child_keys 
  JsonPath.new(current_path).on(@data).map(&:keys).flatten.uniq
end

#current_pathObject



27
28
29
# File 'lib/json/schema_generator/brute_force_required_search.rb', line 27

def current_path
  @json_path.join '.'
end

#find_requiredObject



49
50
51
52
53
54
55
# File 'lib/json/schema_generator/brute_force_required_search.rb', line 49

def find_required
  required = []
  child_keys.each do |child_key|
    required << child_key if required? child_key
  end
  required
end

#popObject



23
24
25
# File 'lib/json/schema_generator/brute_force_required_search.rb', line 23

def pop
  @json_path.pop
end

#push(key, value) ⇒ Object



15
16
17
18
19
20
21
# File 'lib/json/schema_generator/brute_force_required_search.rb', line 15

def push(key, value)
  if value.is_a? Array
    @json_path.push "#{key}[*]"
  else
    @json_path.push key
  end
end

#required?(child_key) ⇒ Boolean

Returns:



35
36
37
38
39
40
41
42
43
# File 'lib/json/schema_generator/brute_force_required_search.rb', line 35

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) ⇒ Object



31
32
33
# File 'lib/json/schema_generator/brute_force_required_search.rb', line 31

def search_path search_key
  current_path.gsub(/\[\*\]$/, "[?(@.#{search_key})]")
end