module GraphQL::QueryResolver
Constants
- VERSION
Public Class Methods
has_reflection_with_name?(class_name, selection_name)
click to toggle source
# File lib/graphql/query_resolver.rb, line 39 def self.has_reflection_with_name?(class_name, selection_name) class_name.reflections.with_indifferent_access[selection_name].present? end
map_dependencies(class_name, ast_node, dependencies={})
click to toggle source
# File lib/graphql/query_resolver.rb, line 43 def self.map_dependencies(class_name, ast_node, dependencies={}) ast_node.selections.each do |selection| name = selection.name if using_relay_pagination?(selection) map_relay_pagination_depencies(class_name, selection, dependencies) next end if has_reflection_with_name?(class_name, name) begin current_class_name = selection.name.singularize.classify.constantize dependencies[name] = map_dependencies(current_class_name, selection) rescue NameError selection_name = class_name.reflections.with_indifferent_access[selection.name].options[:class_name] current_class_name = selection_name.singularize.classify.constantize dependencies[selection.name.to_sym] = map_dependencies(current_class_name, selection) next end end end dependencies end
map_relay_pagination_depencies(class_name, selection, dependencies)
click to toggle source
# File lib/graphql/query_resolver.rb, line 29 def self.map_relay_pagination_depencies(class_name, selection, dependencies) node_selection = selection.selections.find { |sel| sel.name == 'node' } if node_selection.present? map_dependencies(class_name, node_selection, dependencies) else dependencies end end
run(model_class, context, return_type) { || ... }
click to toggle source
# File lib/graphql/query_resolver.rb, line 7 def self.run(model_class, context, return_type) to_load = yield dependencies = {} reflection_dependencies = map_dependencies(model_class, context.ast_node) dependencies = reflection_dependencies.merge(dependencies) if dependencies.any? && to_load.present? if ActiveRecord::VERSION::MAJOR < 4 ActiveRecord::Associations::Preloader.new(to_load, dependencies).run else ActiveRecord::Associations::Preloader.new.preload(to_load, dependencies) end end to_load end
using_relay_pagination?(selection)
click to toggle source
# File lib/graphql/query_resolver.rb, line 25 def self.using_relay_pagination?(selection) selection.name == 'edges' end