Class: Dossier::Segmenter
- Inherits:
-
Object
- Object
- Dossier::Segmenter
show all
- Includes:
- Summable
- Defined in:
- lib/dossier/segmenter.rb,
lib/dossier/segmenter/engine.rb,
lib/dossier/segmenter/report.rb,
lib/dossier/segmenter/version.rb,
lib/dossier/segmenter/summable.rb
Defined Under Namespace
Modules: Report, Summable
Classes: Engine
Constant Summary
collapse
- VERSION =
"0.12.0"
Class Attribute Summary collapse
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Summable
#summarize, #summary
Constructor Details
#initialize(report) ⇒ Segmenter
Returns a new instance of Segmenter.
32
33
34
35
|
# File 'lib/dossier/segmenter.rb', line 32
def initialize(report)
self.report = report
extend(segment_chain.first.segment_module) if report.segmented?
end
|
Class Attribute Details
.report_class ⇒ Object
Returns the value of attribute report_class.
14
15
16
|
# File 'lib/dossier/segmenter.rb', line 14
def report_class
@report_class
end
|
Instance Attribute Details
#report ⇒ Object
Returns the value of attribute report.
11
12
13
|
# File 'lib/dossier/segmenter.rb', line 11
def report
@report
end
|
Class Method Details
.segment(name, options = {}, &block) ⇒ Object
21
22
23
24
|
# File 'lib/dossier/segmenter.rb', line 21
def self.segment(name, options = {}, &block)
segments << Segment::Definition.new(self, name, options)
instance_eval(&block) if block_given?
end
|
.segments ⇒ Object
17
18
19
|
# File 'lib/dossier/segmenter.rb', line 17
def self.segments
@segment_chain ||= Segment::Chain.new
end
|
26
27
28
|
# File 'lib/dossier/segmenter.rb', line 26
def self.
segments.map(&:columns).flatten
end
|
Instance Method Details
#data ⇒ Object
41
42
43
44
45
|
# File 'lib/dossier/segmenter.rb', line 41
def data
@data ||= report_results.rows.inject(Hash.new { [] }) { |acc, row|
acc.tap { |hash| hash[key_path_for(row)] += [row] }
}
end
|
78
79
80
|
# File 'lib/dossier/segmenter.rb', line 78
def
@header_index_map ||= Hash[.map { |h| [h, report_results..index(h)] }]
end
|
37
38
39
|
# File 'lib/dossier/segmenter.rb', line 37
def
@headers ||= report_results..reject { || .in?() }
end
|
#inspect ⇒ Object
74
75
76
|
# File 'lib/dossier/segmenter.rb', line 74
def inspect
"#<#{self.class.name}>"
end
|
#key_path ⇒ Object
70
71
72
|
# File 'lib/dossier/segmenter.rb', line 70
def key_path
String.new
end
|
#segment_chain ⇒ Object
47
48
49
|
# File 'lib/dossier/segmenter.rb', line 47
def segment_chain
self.class.segments
end
|
#segment_options_for(segment) ⇒ Object
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
# File 'lib/dossier/segmenter.rb', line 55
def segment_options_for(segment)
position = segment.key_path.split('.').count
data.keys.map { |key|
key.split('.')
}.inject({}) { |acc, key|
acc.tap { |hash|
hash[key.first(position + 1)] ||= data[key.join('.')].first
}
}.select { |key, value|
key.first(position) == segment.key_path.split('.')
}.values.map { |row|
Hash[report_results..zip(row)]
}
end
|
#segmenter ⇒ Object
51
52
53
|
# File 'lib/dossier/segmenter.rb', line 51
def segmenter
self
end
|