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