Class: Desiru::GraphQL::ModuleLoader

Inherits:
GraphQL::Dataloader::Source
  • Object
show all
Defined in:
lib/desiru/graphql/batch_loader.rb

Overview

Module loader that provides batch loading for Desiru modules

Instance Method Summary collapse

Constructor Details

#initialize(operation_name, modules) ⇒ ModuleLoader

Returns a new instance of ModuleLoader.



28
29
30
31
32
# File 'lib/desiru/graphql/batch_loader.rb', line 28

def initialize(operation_name, modules)
  super()
  @operation_name = operation_name
  @modules = modules
end

Instance Method Details

#fetch(args_array) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/desiru/graphql/batch_loader.rb', line 34

def fetch(args_array)
  module_instance = @modules[@operation_name.to_s] || @modules[@operation_name.to_sym]

  raise "Module not found for operation: #{@operation_name}" unless module_instance

  # Transform GraphQL arguments to snake_case
  transformed_args = args_array.map { |args| transform_graphql_args(args) }

  results = if module_instance.respond_to?(:batch_forward)
              # Batch process all requests
              module_instance.batch_forward(transformed_args)
            else
              # Fall back to individual processing
              transformed_args.map { |args| module_instance.call(args) }
            end

  # Transform results back to camelCase
  results.map { |result| transform_module_result(result) }
end