Class: MDQuery::Dataset::Dimension
- Inherits:
-
Object
- Object
- MDQuery::Dataset::Dimension
- Defined in:
- lib/mdquery/dataset.rb
Overview
describes a Dimension consisting of one or more segments
Instance Attribute Summary collapse
-
#dataset ⇒ Object
readonly
Dataset this Dimension belongs to.
-
#key ⇒ Object
readonly
key for this Dimension.
-
#label ⇒ Object
readonly
Optional label of the Dimension.
-
#segments ⇒ Object
readonly
ordered list of one or more DimensionSegments.
-
#values ⇒ Object
readonly
an ordered list of values for the dimension.
Instance Method Summary collapse
-
#[](key) ⇒ Object
lookup a segment by
key
. -
#dimension_value_for(value) ⇒ Object
the DimensionValue describing
value
or nil. - #dimension_values ⇒ Object
-
#dimension_values_for_segments(segment_keys) ⇒ Object
return an ordered list of DimensionValues for 0 or more segments.
-
#initialize(model, dataset) ⇒ Dimension
constructor
A new instance of Dimension.
- #inspect ⇒ Object
-
#label_for(value) ⇒ Object
the label for the
value
or nil. -
#segment(key) ⇒ Object
lookup a segment by
key
. - #validate ⇒ Object
-
#values_for_segments(segment_keys) ⇒ Object
return an ordered list of values for 0 or more segments.
Constructor Details
#initialize(model, dataset) ⇒ Dimension
Returns a new instance of Dimension.
113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/mdquery/dataset.rb', line 113 def initialize(model, dataset) @dataset = dataset @key = model.key @label = model.label @segments = model.segment_models.map{|sm| DimensionSegment.new(sm, self) } @segment_index = @segments.reduce({}){|si, s| si[s.key] = s ; si} @values = segments.map(&:values).reduce(&:+) @dimension_value_index = segments.map(&:dimension_values).reduce(&:+).reduce({}){|dvi,dv| dvi[dv.value] = dv ; dvi} validate end |
Instance Attribute Details
#dataset ⇒ Object (readonly)
Dataset this Dimension belongs to
96 97 98 |
# File 'lib/mdquery/dataset.rb', line 96 def dataset @dataset end |
#key ⇒ Object (readonly)
key for this Dimension
99 100 101 |
# File 'lib/mdquery/dataset.rb', line 99 def key @key end |
#label ⇒ Object (readonly)
Optional label of the Dimension
102 103 104 |
# File 'lib/mdquery/dataset.rb', line 102 def label @label end |
#segments ⇒ Object (readonly)
ordered list of one or more DimensionSegments
105 106 107 |
# File 'lib/mdquery/dataset.rb', line 105 def segments @segments end |
#values ⇒ Object (readonly)
an ordered list of values for the dimension. May be static or extracted from the data source, depending on DimensionSegment definitions. It is the concatentation of the values
from each DimensionSegment in the Dimension
111 112 113 |
# File 'lib/mdquery/dataset.rb', line 111 def values @values end |
Instance Method Details
#[](key) ⇒ Object
lookup a segment by key
143 144 145 |
# File 'lib/mdquery/dataset.rb', line 143 def [](key) segment(key) end |
#dimension_value_for(value) ⇒ Object
the DimensionValue describing value
or nil
175 176 177 |
# File 'lib/mdquery/dataset.rb', line 175 def dimension_value_for(value) @dimension_value_index[value] end |
#dimension_values ⇒ Object
170 171 172 |
# File 'lib/mdquery/dataset.rb', line 170 def dimension_values segments.map(&:dimension_values).reduce(&:+) end |
#dimension_values_for_segments(segment_keys) ⇒ Object
return an ordered list of DimensionValues for 0 or more segments.
-
segment_keys
a list of segment keys. if empty, methods return all DimensionValues
for all segments, otherwise returns the concatenation of DimensionValues for each identified segment
162 163 164 165 166 167 168 |
# File 'lib/mdquery/dataset.rb', line 162 def dimension_values_for_segments(segment_keys) if segment_keys && !segment_keys.empty? segment_keys.map{|sk| segment(sk)}.map(&:dimension_values).reduce(&:+) else dimension_values end end |
#inspect ⇒ Object
133 134 135 |
# File 'lib/mdquery/dataset.rb', line 133 def inspect "#<Dimension: key=#{key.inspect}, label=#{label.inspect}, segments=#{segments.inspect}>" end |
#label_for(value) ⇒ Object
the label for the value
or nil
180 181 182 |
# File 'lib/mdquery/dataset.rb', line 180 def label_for(value) (dv = dimension_value_for(value)) && dv.label end |
#segment(key) ⇒ Object
lookup a segment by key
138 139 140 |
# File 'lib/mdquery/dataset.rb', line 138 def segment(key) @segment_index[key] end |
#validate ⇒ Object
127 128 129 130 131 |
# File 'lib/mdquery/dataset.rb', line 127 def validate raise "no dataset!" if !dataset raise "no key!" if !key raise "no segments!" if !segments || segments.empty? end |
#values_for_segments(segment_keys) ⇒ Object
return an ordered list of values for 0 or more segments.
-
segment_keys
a list of segment keys. if empty, methods returnsvalues
,
otherwise returns the concatentation of values
for each identified segment
150 151 152 153 154 155 156 |
# File 'lib/mdquery/dataset.rb', line 150 def values_for_segments(segment_keys) if segment_keys && !segment_keys.empty? segment_keys.map{|sk| segment(sk)}.map(&:values).reduce(&:+) else values end end |