Class: Activecube::Processor::Table
- Inherits:
-
Object
- Object
- Activecube::Processor::Table
- Defined in:
- lib/activecube/processor/table.rb
Instance Attribute Summary collapse
-
#model ⇒ Object
readonly
Returns the value of attribute model.
Instance Method Summary collapse
-
#initialize(model) ⇒ Table
constructor
A new instance of Table.
- #join(cube_query, left_query, right_query) ⇒ Object
- #matches?(query, measures = query.measures) ⇒ Boolean
- #measures?(measure) ⇒ Boolean
- #name ⇒ Object
- #query(cube_query, measures = cube_query.measures) ⇒ Object
Constructor Details
#initialize(model) ⇒ Table
Returns a new instance of Table.
6 7 8 |
# File 'lib/activecube/processor/table.rb', line 6 def initialize model @model = model end |
Instance Attribute Details
#model ⇒ Object (readonly)
Returns the value of attribute model.
4 5 6 |
# File 'lib/activecube/processor/table.rb', line 4 def model @model end |
Instance Method Details
#join(cube_query, left_query, right_query) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/activecube/processor/table.rb', line 35 def join cube_query, left_query, right_query outer_table = model.arel_table.class.new('').project(Arel.star) dimension_names = (cube_query.join_fields + cube_query.slices.map{|s| s.key} ).uniq query = outer_table.from(left_query). join(right_query, ::Arel::Nodes::FullOuterJoin). using(*dimension_names) cube_query..each do |option| query = option.append_query model, cube_query, outer_table, query end query end |
#matches?(query, measures = query.measures) ⇒ Boolean
14 15 16 17 |
# File 'lib/activecube/processor/table.rb', line 14 def matches? query, measures = query.measures (query.column_names(measures)-model.attribute_types.keys).empty? && !model.activecube_indexes.detect{|index| !index.matches?(query, measures) } end |
#measures?(measure) ⇒ Boolean
19 20 21 |
# File 'lib/activecube/processor/table.rb', line 19 def measures? measure (measure.required_column_names - model.attribute_types.keys).empty? end |
#name ⇒ Object
10 11 12 |
# File 'lib/activecube/processor/table.rb', line 10 def name model.table_name end |
#query(cube_query, measures = cube_query.measures) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/activecube/processor/table.rb', line 23 def query cube_query, measures = cube_query.measures table = model.arel_table query = table (cube_query.slices + measures + cube_query.selectors + cube_query.).each do |s| query = s.append_query model, cube_query, table, query end query end |