Class: GQL::Call

Inherits:
Object
  • Object
show all
Defined in:
lib/gql/call.rb

Defined Under Namespace

Classes: Method

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(caller, ast_node, target, variables, context) ⇒ Call

Returns a new instance of Call.



44
45
46
47
# File 'lib/gql/call.rb', line 44

def initialize(caller, ast_node, target, variables, context)
  @caller, @ast_node, @target = caller, ast_node, target
  @variables, @context = variables, context
end

Instance Attribute Details

#ast_nodeObject (readonly)

Returns the value of attribute ast_node.



42
43
44
# File 'lib/gql/call.rb', line 42

def ast_node
  @ast_node
end

#callerObject (readonly)

Returns the value of attribute caller.



42
43
44
# File 'lib/gql/call.rb', line 42

def caller
  @caller
end

#contextObject (readonly)

Returns the value of attribute context.



42
43
44
# File 'lib/gql/call.rb', line 42

def context
  @context
end

#targetObject (readonly)

Returns the value of attribute target.



42
43
44
# File 'lib/gql/call.rb', line 42

def target
  @target
end

#variablesObject (readonly)

Returns the value of attribute variables.



42
43
44
# File 'lib/gql/call.rb', line 42

def variables
  @variables
end

Class Method Details

.build_class(result_class, method) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/gql/call.rb', line 18

def build_class(result_class, method)
  if result_class.is_a? Array
    result_class.unshift Connection if result_class.size == 1
    result_class.unshift Fields::Connection if result_class.size == 2

    field_type_class, connection_class, node_class = result_class

    unless field_type_class <= Fields::Connection
      raise Errors::InvalidNodeClass.new(field_type_class, Fields::Connection)
    end

    options = { connection_class: connection_class, node_class: node_class }
    result_class = field_type_class.build_class(nil, options)
  elsif result_class && !(result_class <= Node)
    raise Errors::InvalidNodeClass.new(result_class, Node)
  end

  Class.new(self).tap do |call_class|
    call_class.method = method
    call_class.result_class = result_class
  end
end

Instance Method Details

#executeObject



49
50
51
52
53
54
55
56
57
58
# File 'lib/gql/call.rb', line 49

def execute
  args = substitute_variables(ast_node.arguments)

  method = Method.new(target, context)
  target = method.execute(self.class.method, args)
  result_class = self.class.result_class || caller.class

  result = result_class.new(ast_node, target, variables, context)
  result.value
end