Class: MDQuery::Model::DimensionSegmentModel

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

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_modelObject (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_queryObject (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_valueObject (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

#keyObject (readonly)

Returns the value of attribute key.



22
23
24
# File 'lib/mdquery/model.rb', line 22

def key
  @key
end

#label_procObject (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_modifiersObject (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_procObject (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_castObject (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_procObject (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_columnObject



87
88
89
# File 'lib/mdquery/model.rb', line 87

def group_by_column
  dimension_model.key.to_s
end

#inspectObject



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_stringObject



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

#validateObject



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