/usr/lib/ruby/vendor_ruby/chef_zero/solr/solr_doc.rb is in chef-zero 4.5.0-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | module ChefZero
module Solr
# This does what expander does, flattening the json doc into keys and values
# so that solr can search them.
class SolrDoc
def initialize(json, id)
@json = json
@id = id
end
def [](key)
matching_values { |match_key| match_key == key }
end
def matching_values(&block)
result = []
key_values(nil, @json) do |key, value|
if block.call(key)
result << value.to_s
end
end
# Handle manufactured value(s)
if block.call('X_CHEF_id_CHEF_X')
result << @id.to_s
end
result.uniq
end
private
def key_values(key_so_far, value, &block)
if value.is_a?(Hash)
value.each_pair do |child_key, child_value|
block.call(child_key, child_value.to_s)
if key_so_far
new_key = "#{key_so_far}_#{child_key}"
key_values(new_key, child_value, &block)
else
key_values(child_key, child_value, &block) if child_value.is_a?(Hash) || child_value.is_a?(Array)
end
end
elsif value.is_a?(Array)
value.each do |child_value|
key_values(key_so_far, child_value, &block)
end
else
block.call(key_so_far || 'text', value.to_s)
end
end
end
end
end
|