class Activecube::Graphql::CubeField

Attributes

cube[R]

Public Class Methods

new(*args, cube: nil, **kwargs, &block) click to toggle source

Override initialize to take a new argument cube:

Calls superclass method
# 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

Public Instance Methods

resolve_field_method(obj, ruby_kwargs, ctx) click to toggle source
Calls superclass method
# 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

  database = obj.object.kind_of?(Hash) && obj.object[:database]
  response = database ? cube.connected_to(database: database) do
    execute_query(tree, ctx)
  end : execute_query(tree, ctx)

  if ctx[:stat_io].respond_to?(:puts) && response.respond_to?(:statistics)
    ctx[:stat_io].puts(response.statistics)
  end

  ResponseBuilder.new tree, response

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

Private Instance Methods

append_extra(extra) click to toggle source
# File lib/activecube/graphql/cube_field.rb, line 55
def append_extra extra
  unless @extras.include? extra
    @extras << extra
  end
end
execute_query(tree, ctx) click to toggle source
# File lib/activecube/graphql/cube_field.rb, line 49
def execute_query tree, ctx
  cube_query = tree.build_query
  ctx[:sql_io].puts(cube_query.to_sql) if ctx[:sql_io].respond_to?(:puts)
  cube_query.query
end