Class: Activecube::Graphql::ResponseBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/activecube/graphql/response_builder.rb

Defined Under Namespace

Classes: Response

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(tree, response) ⇒ ResponseBuilder

Returns a new instance of ResponseBuilder.



29
30
31
32
33
# File 'lib/activecube/graphql/response_builder.rb', line 29

def initialize tree, response
  @response = response
  @key_map = Hash[response.columns.map.with_index{|key,index| [key, index]}]
  @response_class = build_response_class tree.root
end

Instance Attribute Details

#responseObject (readonly)

Returns the value of attribute response.



28
29
30
# File 'lib/activecube/graphql/response_builder.rb', line 28

def response
  @response
end

#response_classObject (readonly)

Returns the value of attribute response_class.



28
29
30
# File 'lib/activecube/graphql/response_builder.rb', line 28

def response_class
  @response_class
end

Instance Method Details

#build_response_class(from_element) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/activecube/graphql/response_builder.rb', line 42

def build_response_class from_element

  response_class = Class.new Response

  from_element.children.group_by(&:definition).each{|definition, elements|

    if elements.count==1
      element = elements.first
      if element.children.empty?
        simple_value response_class, definition, element
      elsif element.metric
        array_value response_class, definition, element
      else
        sub_element response_class, definition, element
      end
    else
      match_elements response_class, definition, elements
    end

  }

  response_class

end

#map(&block) ⇒ Object

Raises:

  • (Activecube::InputArgumentError)


35
36
37
38
39
40
# File 'lib/activecube/graphql/response_builder.rb', line 35

def map &block
  raise Activecube::InputArgumentError, "Block expected on map of root response" unless block_given?
  response.rows.map do |row|
    block.call response_class.new row
  end
end