Class: Activecube::Graphql::CubeField

Inherits:
GraphQL::Schema::Field
  • Object
show all
Defined in:
lib/activecube/graphql/cube_field.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args, cube: nil, **kwargs, &block) ⇒ CubeField

Override #initialize to take a new argument cube:



18
19
20
21
22
23
# File 'lib/activecube/graphql/cube_field.rb', line 18

def initialize(*args, cube: nil, **kwargs, &block)
  @cube = cube
  # Pass on the default args:
  super(*args, **kwargs, &block)
  append_extra :irep_node
end

Instance Attribute Details

#cubeObject (readonly)

Returns the value of attribute cube.



16
17
18
# File 'lib/activecube/graphql/cube_field.rb', line 16

def cube
  @cube
end

Instance Method Details

#resolve_field_method(obj, ruby_kwargs, ctx) ⇒ Object



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

def resolve_field_method(obj, ruby_kwargs, ctx)

  return super unless cube

  irep_node = ruby_kwargs[:irep_node]
  tree = ParseTree.new cube, irep_node

  object = obj.object
  database = (object.kind_of?(Hash) && object[:database]) ||
    (object.respond_to?(:database) && object.database)

  response = database ? cube.connected_to(database: database) do
    execute_query(tree, ctx, object)
  end : execute_query(tree, ctx, object)

  ResponseBuilder.new tree, response

rescue Activecube::InputArgumentError => ex
   raise GraphQL::ExecutionError, "Error executing #{cube.name}: #{ex.message}"
end