class Activecube::Query::Measure

Attributes

modifications[R]
selectors[R]

Public Class Methods

new(cube, key, definition, selectors = [], modifications = []) click to toggle source
Calls superclass method Activecube::Query::Item::new
# 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

Public Instance Methods

alias!(new_key) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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_names() click to toggle source
# 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_s() click to toggle source
# File lib/activecube/query/measure.rb, line 45
def to_s
  "Metric #{super}"
end
when(*args) click to toggle source
# File lib/activecube/query/measure.rb, line 20
def when *args
  append *args, @selectors, Selector, cube.selectors
end

Private Instance Methods

modifier_methods!() click to toggle source
# File lib/activecube/query/measure.rb, line 58
def modifier_methods!
  definition.class.modifiers.each_pair do |key, modifier|
    define_singleton_method key do |*args|
      (@modifications ||= []) << Modification.new(modifier, *args)
      self
    end
  end
end