Class: MDQuery::Model::DimensionSegmentModel
- Inherits:
-
Object
- Object
- MDQuery::Model::DimensionSegmentModel
- Defined in:
- lib/mdquery/model.rb
Constant Summary collapse
- DEFAULT_LABEL_PROC =
Proc.new do |value| value.to_s.gsub('_', ' ').split.map(&:capitalize).join(' ') end
Instance Attribute Summary collapse
-
#dimension_model ⇒ Object
readonly
Returns the value of attribute dimension_model.
-
#extract_dimension_query ⇒ Object
readonly
Returns the value of attribute extract_dimension_query.
-
#fixed_dimension_value ⇒ Object
readonly
Returns the value of attribute fixed_dimension_value.
-
#key ⇒ Object
readonly
Returns the value of attribute key.
-
#label_proc ⇒ Object
readonly
Returns the value of attribute label_proc.
-
#measure_modifiers ⇒ Object
readonly
Returns the value of attribute measure_modifiers.
-
#narrow_proc ⇒ Object
readonly
Returns the value of attribute narrow_proc.
-
#value_cast ⇒ Object
readonly
Returns the value of attribute value_cast.
-
#values_proc ⇒ Object
readonly
Returns the value of attribute values_proc.
Instance Method Summary collapse
- #do_cast(value) ⇒ Object
- #do_modify(measure_key, measure_def) ⇒ Object
- #do_narrow(scope) ⇒ Object
- #get_values(scope) ⇒ Object
- #group_by_column ⇒ Object
-
#initialize(attrs) ⇒ DimensionSegmentModel
constructor
A new instance of DimensionSegmentModel.
- #inspect ⇒ Object
-
#labels(values) ⇒ Object
map of values to labels.
- #select_string ⇒ Object
- #validate ⇒ Object
Constructor Details
#initialize(attrs) ⇒ DimensionSegmentModel
Returns a new instance of DimensionSegmentModel.
35 36 37 38 39 40 |
# 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 |
Instance Attribute Details
#dimension_model ⇒ Object (readonly)
Returns the value of attribute dimension_model.
21 22 23 |
# File 'lib/mdquery/model.rb', line 21 def dimension_model @dimension_model end |
#extract_dimension_query ⇒ Object (readonly)
Returns the value of attribute extract_dimension_query.
24 25 26 |
# File 'lib/mdquery/model.rb', line 24 def extract_dimension_query @extract_dimension_query end |
#fixed_dimension_value ⇒ Object (readonly)
Returns the value of attribute fixed_dimension_value.
23 24 25 |
# File 'lib/mdquery/model.rb', line 23 def fixed_dimension_value @fixed_dimension_value end |
#key ⇒ Object (readonly)
Returns the value of attribute key.
22 23 24 |
# File 'lib/mdquery/model.rb', line 22 def key @key end |
#label_proc ⇒ Object (readonly)
Returns the value of attribute label_proc.
27 28 29 |
# File 'lib/mdquery/model.rb', line 27 def label_proc @label_proc end |
#measure_modifiers ⇒ Object (readonly)
Returns the value of attribute measure_modifiers.
29 30 31 |
# File 'lib/mdquery/model.rb', line 29 def measure_modifiers @measure_modifiers end |
#narrow_proc ⇒ Object (readonly)
Returns the value of attribute narrow_proc.
25 26 27 |
# File 'lib/mdquery/model.rb', line 25 def narrow_proc @narrow_proc end |
#value_cast ⇒ Object (readonly)
Returns the value of attribute value_cast.
28 29 30 |
# File 'lib/mdquery/model.rb', line 28 def value_cast @value_cast end |
#values_proc ⇒ Object (readonly)
Returns the value of attribute values_proc.
26 27 28 |
# File 'lib/mdquery/model.rb', line 26 def values_proc @values_proc end |
Instance Method Details
#do_cast(value) ⇒ Object
62 63 64 65 66 67 68 69 |
# 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) ⇒ Object
71 72 73 74 75 76 77 |
# 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) ⇒ Object
54 55 56 57 58 59 60 |
# 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) ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 |
# 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 ⇒ Object
87 88 89 |
# File 'lib/mdquery/model.rb', line 87 def group_by_column dimension_model.key.to_s end |
#inspect ⇒ Object
50 51 52 |
# 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) ⇒ Object
map of values to labels
104 105 106 107 108 109 |
# 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 ⇒ Object
79 80 81 82 83 84 85 |
# 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 ⇒ Object
42 43 44 45 46 47 48 |
# 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 |