Class: Activecube::Query::Measure

Inherits:
Item
  • Object
show all
Defined in:
lib/activecube/query/measure.rb

Direct Known Subclasses

MeasureNothing

Instance Attribute Summary collapse

Attributes inherited from Item

#cube, #definition, #key

Instance Method Summary collapse

Methods inherited from Item

#append_with!

Constructor Details

#initialize(cube, key, definition, selectors = [], modifications = []) ⇒ Measure

Returns a new instance of Measure.



8
9
10
11
12
13
14
# File 'lib/activecube/query/measure.rb', line 8

def initialize cube, key, definition, selectors = [], modifications = []
  super cube, key, definition
  @selectors = selectors
  @modifications = modifications

  modifier_methods! if definition && definition.class.modifiers
end

Instance Attribute Details

#modificationsObject (readonly)

Returns the value of attribute modifications.



6
7
8
# File 'lib/activecube/query/measure.rb', line 6

def modifications
  @modifications
end

#selectorsObject (readonly)

Returns the value of attribute selectors.



6
7
8
# File 'lib/activecube/query/measure.rb', line 6

def selectors
  @selectors
end

Instance Method Details

#alias!(new_key) ⇒ Object



24
25
26
# File 'lib/activecube/query/measure.rb', line 24

def alias! new_key
  self.class.new cube, new_key, definition, selectors, modifications
end

#append_query(model, cube_query, table, query) ⇒ Object



38
39
40
41
42
43
# File 'lib/activecube/query/measure.rb', line 38

def append_query model, cube_query, table, query
  query = append_with!(model, cube_query, table, query)
  attr_alias = "`#{key.to_s}`"
  expr = definition.expression model, table, self, cube_query
  query.project expr.as(attr_alias)
end

#condition_query(model, arel_table, cube_query) ⇒ Object



28
29
30
31
32
33
34
35
36
# File 'lib/activecube/query/measure.rb', line 28

def condition_query model, arel_table, cube_query
  condition = nil
  selectors.each do |selector|
    condition = condition ?
                    condition.and(selector.expression(model, arel_table, cube_query)) :
                    selector.expression(model, arel_table, cube_query)
  end
  condition
end

#modifier(name) ⇒ Object



49
50
51
52
53
# File 'lib/activecube/query/measure.rb', line 49

def modifier name
  ms = modifications.select{|m| m.modifier.name==name}
  raise "Found multiple (#{ms.count}) definitions for #{name} in #{self}" if ms.count>1
  ms.first
end

#required_column_namesObject



16
17
18
# File 'lib/activecube/query/measure.rb', line 16

def required_column_names
  ((definition.class.column_names || []) + selectors.map(&:required_column_names)).flatten.uniq
end

#to_sObject



45
46
47
# File 'lib/activecube/query/measure.rb', line 45

def to_s
  "Metric #{super}"
end

#when(*args) ⇒ Object



20
21
22
# File 'lib/activecube/query/measure.rb', line 20

def when *args
  append *args, @selectors, Selector, cube.selectors
end