module GraphQL::Groups::Utils
Public Class Methods
duplicate(keys, values)
click to toggle source
This is used by the resul transformer when the user executed a query where some groupings are repeated, so depth of the query doesn't match the length of the query result keys. We need to modify the result keys so everything matches again.
# File lib/graphql/groups/utils.rb, line 20 def duplicate(keys, values) return if keys.length == values.length duplicates = duplicates(keys) return if duplicates.empty? duplicates.each do |_, indices| first_occurrence, *rest = indices value_to_duplicate = values[first_occurrence] rest.each { |index| values.insert(index, value_to_duplicate) } end end
wrap(object)
click to toggle source
# File lib/graphql/groups/utils.rb, line 7 def wrap(object) if object.nil? [] elsif object.respond_to?(:to_ary) object.to_ary || [object] else [object] end end
Private Class Methods
duplicates(array)
click to toggle source
# File lib/graphql/groups/utils.rb, line 35 def duplicates(array) map = {} duplicates = {} array.each_with_index do |v, i| map[v] = (map[v] || 0) + 1 duplicates[v] ||= [] duplicates[v] << i end duplicates.select { |_, v| v.length > 1 } end