class RSpec::GraphQLResponse::DigDug
Attributes
dig_pattern[R]
Public Class Methods
new(*dig_pattern)
click to toggle source
# File lib/rspec/graphql_response/dig_dug/dig_dug.rb, line 6 def initialize(*dig_pattern) @dig_pattern = parse_dig_pattern(*dig_pattern) end
Public Instance Methods
dig(data)
click to toggle source
# File lib/rspec/graphql_response/dig_dug/dig_dug.rb, line 10 def dig(data) dig_data(data, dig_pattern) end
Private Instance Methods
dig_data(data, patterns)
click to toggle source
# File lib/rspec/graphql_response/dig_dug/dig_dug.rb, line 16 def dig_data(data, patterns) return data if patterns.nil? return data if patterns.empty? node = patterns[0] node_key = node[:key] node_key = node_key.to_s if node_key.is_a? Symbol node_value = node[:value] if node[:type] == :symbol result = dig_symbol(data, node_key) elsif node[:type] == :array if data.is_a? Hash child_data = data[node_key] result = dig_symbol(child_data, node_value) elsif data.is_a? Array result = data.map { |value| child_data = value[node_key] dig_symbol(child_data, node_value) }.compact else result = data end end dig_data(result, patterns.drop(1)) end
dig_symbol(data, key)
click to toggle source
# File lib/rspec/graphql_response/dig_dug/dig_dug.rb, line 65 def dig_symbol(data, key) key = key.to_s if key.is_a? Symbol return data[key] if data.is_a? Hash if data.is_a? Array if key.is_a? Numeric mapped_data = data[key] else mapped_data = data.map { |value| value[key] }.flatten end return mapped_data end return data end
parse_dig_pattern(*pattern)
click to toggle source
# File lib/rspec/graphql_response/dig_dug/dig_dug.rb, line 44 def parse_dig_pattern(*pattern) pattern_config = pattern.map do |pattern_item| if pattern_item.is_a? Symbol { type: :symbol, key: pattern_item } elsif pattern_item.is_a? Hash pattern_item.map do |key, value| { type: :array, key: key, value: value[0] } end end end pattern_config.flatten end