module Activecube::CubeDefinition

Attributes

dimensions[R]
metrics[R]
models[R]
options[R]
selectors[R]

Public Instance Methods

inspect() click to toggle source
# File lib/activecube/cube_definition.rb, line 23
def inspect
  name +
      (@dimensions && " Dimensions: #{@dimensions.keys.join(',')}")+
      (@metrics && " Metrics: #{@metrics.keys.join(',')}")+
      (@selectors && " Selectors: #{@selectors.keys.join(',')}")+
      (@models && " Models: #{@models.map(&:name).join(',')}")
end

Private Instance Methods

dim_column(column_name) click to toggle source
# File lib/activecube/cube_definition.rb, line 53
def dim_column column_name
  Class.new(Activecube::Dimension) do
    column column_name
  end
end
dimension(data) click to toggle source
# File lib/activecube/cube_definition.rb, line 33
def dimension data
  store_definition_map! 'dimension', (@dimensions ||= NamedHash.new(self, Query::Slice) ), data
end
metric(data) click to toggle source
# File lib/activecube/cube_definition.rb, line 37
def metric data
  store_definition_map! 'metric', (@metrics ||= NamedHash.new(self, Query::Measure)), data
end
metric_column(column_name) click to toggle source
# File lib/activecube/cube_definition.rb, line 59
def metric_column column_name

  Class.new(Activecube::Metric) do

    include Activecube::Common::Metrics

    column column_name

    modifier :calculate

    define_method :expression do |model, arel_table, measure, cube_query|
      if calculate = measure.modifier(:calculate)
        self.send(calculate.args.first, model, arel_table, measure, cube_query)
      else
        sum(model, arel_table, measure, cube_query)
      end
    end


  end
end
option(*args) click to toggle source
# File lib/activecube/cube_definition.rb, line 49
def option *args
  store_definition_array! 'option', (@options ||= []), [*args].flatten.map{|t| t }
end
select_column(column_name) click to toggle source
# File lib/activecube/cube_definition.rb, line 81
def select_column column_name
  Class.new(Activecube::Selector) do
    column column_name
  end
end
selector(data) click to toggle source
# File lib/activecube/cube_definition.rb, line 41
def selector data
  store_definition_map! 'filter', (@selectors ||= NamedHash.new(self, Query::Selector)), data
end
store_definition_array!(name, array, data) click to toggle source
# File lib/activecube/cube_definition.rb, line 94
def store_definition_array! name, array, data
  values = data & array
  raise DefinitionError, "#{values.join(',')} already defined for #{name}" unless values.empty?
  array.concat data
end
store_definition_map!(name, map, data) click to toggle source
# File lib/activecube/cube_definition.rb, line 87
def store_definition_map! name, map, data
  data.each_pair do |key, class_def|
    raise DefinitionError, "#{key} already defined for #{name}" if map.has_key?(key)
    map[key] = class_def
  end
end
table(*args) click to toggle source
# File lib/activecube/cube_definition.rb, line 45
def table *args
  store_definition_array! 'model', (@models ||= []), [*args].flatten.map{|t| t }
end