class MDQuery::Model::DimensionSegmentModel

Constants

DEFAULT_LABEL_PROC

Attributes

dimension_model[R]
extract_dimension_query[R]
fixed_dimension_value[R]
key[R]
label_proc[R]
measure_modifiers[R]
narrow_proc[R]
value_cast[R]
values_proc[R]

Public Class Methods

new(attrs) click to toggle source
# File lib/mdquery/model.rb, line 35
def initialize(attrs)
  MDQuery::Util.assign_attributes(self,
                                  attrs,
                                  [:dimension_model, :key, :fixed_dimension_value, :extract_dimension_query, :narrow_proc, :values_proc, :label_proc, :value_cast, :measure_modifiers])
  validate
end

Public Instance Methods

do_cast(value) click to toggle source
# File lib/mdquery/model.rb, line 62
def do_cast(value)
  cast_lambda=CASTS[value_cast] if value_cast
  if cast_lambda
    cast_lambda.call(value)
  else
    value
  end
end
do_modify(measure_key, measure_def) click to toggle source
# File lib/mdquery/model.rb, line 71
def do_modify(measure_key, measure_def)
  if modifier = measure_modifiers[measure_key]
    modifier.call(measure_def)
  else
    measure_def
  end
end
do_narrow(scope) click to toggle source
# File lib/mdquery/model.rb, line 54
def do_narrow(scope)
  if narrow_proc
    narrow_proc.call(scope)
  else
    scope
  end
end
get_values(scope) click to toggle source
# File lib/mdquery/model.rb, line 91
def get_values(scope)
  if fixed_dimension_value
    [fixed_dimension_value.to_s]
  elsif values_proc
    values_proc.call(scope)
  else
    narrowed_scope = do_narrow(scope)
    records = narrowed_scope.select("distinct #{select_string}").all
    records.map{|r| r.send(dimension_model.key)}.map{|v| do_cast(v)}
  end
end
group_by_column() click to toggle source
# File lib/mdquery/model.rb, line 87
def group_by_column
  dimension_model.key.to_s
end
inspect() click to toggle source
# File lib/mdquery/model.rb, line 50
def inspect
  "#<DimensionSegment: key=#{key.inspect}, fixed_dimension_value=#{fixed_dimension_value.inspect}, extract_dimension_query=#{extract_dimension_query.inspect}, narrow_proc=#{narrow_proc.inspect}, label_proc=#{label_proc.inspect},  value_cast=#{value_cast.inspect}, measure_modifiers=#{measure_modifiers.inspect}>"
end
labels(values) click to toggle source

map of values to labels

# File lib/mdquery/model.rb, line 104
def labels(values)
  values.reduce({}) do |labels,value|
    labels[value] = (label_proc || DEFAULT_LABEL_PROC).call(value)
    labels
  end
end
select_string() click to toggle source
# File lib/mdquery/model.rb, line 79
def select_string
  if fixed_dimension_value
    "#{ActiveRecord::Base.quote_value(fixed_dimension_value)} as #{dimension_model.key}"
  else
    "#{extract_dimension_query} as #{dimension_model.key}"
  end
end
validate() click to toggle source
# File lib/mdquery/model.rb, line 42
def validate
  raise "no dimension_model!" if !dimension_model
  raise "no key!" if !key
  raise "only one of fix_dimension and extract_dimension can be given" if fixed_dimension_value && extract_dimension_query
  raise "one of fix_dimension or extract_dimension must be given" if !fixed_dimension_value && !extract_dimension_query
  @measure_modifiers ||= {}
end