Module: GraphQL::QueryResolver

Defined in:
lib/graphql/query_resolver.rb,
lib/graphql/query_resolver/version.rb

Constant Summary collapse

VERSION =
"0.1.2"

Class Method Summary collapse

Class Method Details

.map_dependencies(class_name, ast_node) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/graphql/query_resolver.rb', line 25

def self.map_dependencies(class_name, ast_node)
  dependencies = {}
  ast_node.selections.each do |selection|
    name = selection.name

    if class_name.reflections.with_indifferent_access[selection.name].present?
      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

.run(model_class, context, return_type) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 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