Module: OlapReport::Cube::ClassMethods

Includes:
ActiveRecord::Helpers
Defined in:
lib/olap_report/cube.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ActiveRecord::Helpers

#association_class, #column_with_alias, #join_table_name, #quote_table_column

Instance Attribute Details

#dimensionsObject (readonly)

Returns the value of attribute dimensions.



16
17
18
# File 'lib/olap_report/cube.rb', line 16

def dimensions
  @dimensions
end

#measuresObject (readonly)

Returns the value of attribute measures.



16
17
18
# File 'lib/olap_report/cube.rb', line 16

def measures
  @measures
end

Class Method Details

.extended(base) ⇒ Object



18
19
20
21
# File 'lib/olap_report/cube.rb', line 18

def self.extended(base)
  base.instance_variable_set(:@dimensions, [])
  base.instance_variable_set(:@measures, [])
end

Instance Method Details

#adapterObject



23
24
25
26
27
28
# File 'lib/olap_report/cube.rb', line 23

def adapter
  @adapter ||= begin
    klass = ['OlapReport::Cube::Adapters', connection.adapter_name + 'Adapter'].join('::').constantize
    klass.new(self)
  end
end

#define_dimension(name, &block) ⇒ Object

Define dimension for ActiveRecord model

Parameters:

  • name (Symbol)
    • dimension name



36
37
38
39
40
# File 'lib/olap_report/cube.rb', line 36

def define_dimension(name, &block)
  dimension = OlapReport::Cube::Dimension.new(self, name)
  @dimensions << dimension
  dimension.instance_exec &block
end

#define_measure(name, function = :sum, options = {}) ⇒ Object

Define measure for ActiveRecord model

Parameters:

  • name (Symbol)
    • measure name

  • function (Symbol) (defaults to: :sum)
    • measure function (:sum, :avg, :count, :min, :max)

  • options (Hash) (defaults to: {})
    • optional parameters



46
47
48
# File 'lib/olap_report/cube.rb', line 46

def define_measure(name, function = :sum, options= {})
  @measures << OlapReport::Cube::Measure.new(self, name, function, options)
end

#dimension(name) ⇒ OlapReport::Cube::Dimension

Get dimension by name

Parameters:

  • name (Symbol)

Returns:



53
54
55
# File 'lib/olap_report/cube.rb', line 53

def dimension(name)
  dimensions.find{|d| d.name == name} || raise(KeyError, "Dimension #{name} not found")
end

#measure(name) ⇒ OlapReport::Cube::Measure

Get dimension by name

Parameters:

  • name (Symbol)

Returns:



60
61
62
# File 'lib/olap_report/cube.rb', line 60

def measure(name)
  measures.find{|m| m.name == name}
end

#measures_scopeObject



30
31
32
# File 'lib/olap_report/cube.rb', line 30

def measures_scope
  @measures_scope ||= OlapReport::Cube::Measure::Scope.new
end