Class: GraphqlMigrateExecution::DataloaderShorthand

Inherits:
Strategy
  • Object
show all
Defined in:
lib/graphql_migrate_execution/dataloader_shorthand.rb

Overview

These fields can use a ‘dataload: …` configuration. They use a single, simple dataloader call:

  • ‘dataload_assocation(…)`

  • ‘dataload_record(…)`

  • ‘dataload(…)` or `dataloader.with(…).load(…)`

and they don’t make calls on ‘self` inside those expressions (except for `object` and `context`).

Constant Summary

Constants inherited from Strategy

Strategy::METHODS_TO_RENAME

Instance Method Summary collapse

Methods inherited from Strategy

#initialize, prefix_if_necessary, #run, strategy_name

Constructor Details

This class inherits a constructor from GraphqlMigrateExecution::Strategy

Instance Method Details

#cleanup(field_definition) ⇒ Object



34
35
36
# File 'lib/graphql_migrate_execution/dataloader_shorthand.rb', line 34

def cleanup(field_definition)
  remove_resolver_method(field_definition)
end

#migrate(field_definition) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/graphql_migrate_execution/dataloader_shorthand.rb', line 13

def migrate(field_definition)
  rm = field_definition.resolver_method
  if (da = rm.dataload_association)
    dataload_config = "{ association: #{da.inspect} }"
  elsif (dr = rm.dataload_record)
    dataload_config = "{ model: #{dr}".dup
    if (dr_using = rm.dataload_record_using)
      dataload_config << ", using: #{dr_using.inspect}"
    end
    if (fb = rm.dataload_record_find_by)
      dataload_config << ", find_by: #{fb.inspect}"
    end
    dataload_config << " }"
  elsif rm.source_arg_nodes.empty?
    dataload_config = rm.source_class_node.full_name
  else
    dataload_config = "{ with: #{rm.source_class_node.full_name}, by: [#{rm.source_arg_nodes.map { |n| Visitor.source_for_constant_node(n) }.join(", ")}] }"
  end
  inject_field_keyword(field_definition, :dataload, dataload_config)
end