module ObjectTraverser
Public Instance Methods
extract_value(keys, value)
click to toggle source
# File lib/inspec/utils/object_traversal.rb, line 2 def extract_value(keys, value) return nil if value.nil? key = keys.shift return nil if key.nil? # if the current value is not a Hash or Array, it is undefined # behavior so value will be assigned nil by default. value = if value.is_a?(Array) extract_from_array(key, value) elsif value.is_a?(Hash) extract_from_hash(key, value) end # if there are no more keys, just return the value return value if keys.first.nil? # if there are more keys, extract more extract_value(keys.clone, value) end
Private Instance Methods
extract_from_array(key, value)
click to toggle source
If the values to return from is an Array, allow returning by index. Otherwise, support methods on the Array itself.
# File lib/inspec/utils/object_traversal.rb, line 27 def extract_from_array(key, value) if key.is_a?(Integer) value[key] elsif value.respond_to?(key.to_sym) value.send(key.to_sym) end end
extract_from_hash(key, value)
click to toggle source
for Hashes, try to return the value by the key. We first try to find by the raw key before we stringify if the keys themselves are symbols, for example.
This will return nil default if we can't find the key.
# File lib/inspec/utils/object_traversal.rb, line 40 def extract_from_hash(key, value) if value.key?(key) value[key] elsif value.key?(key.to_s) value[key.to_s] end end