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