Class: Activecube::Graphql::ResponseBuilder
- Inherits:
-
Object
- Object
- Activecube::Graphql::ResponseBuilder
- Defined in:
- lib/activecube/graphql/response_builder.rb
Defined Under Namespace
Classes: Response
Instance Attribute Summary collapse
-
#response ⇒ Object
readonly
Returns the value of attribute response.
-
#response_class ⇒ Object
readonly
Returns the value of attribute response_class.
Instance Method Summary collapse
- #build_response_class(from_element) ⇒ Object
-
#initialize(tree, response) ⇒ ResponseBuilder
constructor
A new instance of ResponseBuilder.
- #map(&block) ⇒ Object
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
#response ⇒ Object (readonly)
Returns the value of attribute response.
28 29 30 |
# File 'lib/activecube/graphql/response_builder.rb', line 28 def response @response end |
#response_class ⇒ Object (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
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 |