Class: RubyReport::Report
- Inherits:
-
Object
- Object
- RubyReport::Report
- Defined in:
- lib/ruby_report/report.rb
Class Attribute Summary collapse
-
.columns_set ⇒ Object
readonly
Returns the value of attribute columns_set.
-
.decorators ⇒ Object
readonly
Returns the value of attribute decorators.
-
.formatters ⇒ Object
readonly
Returns the value of attribute formatters.
Class Method Summary collapse
Instance Method Summary collapse
- #add_report(report) ⇒ Object
- #build_header ⇒ Object
- #build_row(row) ⇒ Object
- #collect_row(row) ⇒ Object
- #each_row ⇒ Object
- #header ⇒ Object
-
#initialize(data:, scope: nil, columns: nil, header_builder: ::RubyReport::Builder::DefaultHeaderBuilder, row_builder: ::RubyReport::Builder::DefaultRowBuilder, row_resolver: ->(row) { row }) ⇒ Report
constructor
A new instance of Report.
- #prepend_report(report) ⇒ Object
- #rows ⇒ Object
- #to_with(generator, **opts) ⇒ Object
Constructor Details
#initialize(data:, scope: nil, columns: nil, header_builder: ::RubyReport::Builder::DefaultHeaderBuilder, row_builder: ::RubyReport::Builder::DefaultRowBuilder, row_resolver: ->(row) { row }) ⇒ Report
Returns a new instance of Report.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/ruby_report/report.rb', line 15 def initialize( data:, scope: nil, columns: nil, header_builder: ::RubyReport::Builder::DefaultHeaderBuilder, row_builder: ::RubyReport::Builder::DefaultRowBuilder, row_resolver: ->(row) { row } ) @data = data @scope = scope @columns = if columns.nil? self.class.columns_set || raise("Columns not defined") else Set.new(columns) end @header_builder = header_builder @row_builder = row_builder @row_resolver = row_resolver @reports = [self] end |
Class Attribute Details
.columns_set ⇒ Object (readonly)
Returns the value of attribute columns_set.
6 7 8 |
# File 'lib/ruby_report/report.rb', line 6 def columns_set @columns_set end |
.decorators ⇒ Object (readonly)
Returns the value of attribute decorators.
6 7 8 |
# File 'lib/ruby_report/report.rb', line 6 def decorators @decorators end |
.formatters ⇒ Object (readonly)
Returns the value of attribute formatters.
6 7 8 |
# File 'lib/ruby_report/report.rb', line 6 def formatters @formatters end |
Class Method Details
.columns(*keys, decorators: ::RubyReport::Decorator, formatters: ::RubyReport::Formatter) ⇒ Object
8 9 10 11 12 |
# File 'lib/ruby_report/report.rb', line 8 def columns(*keys, decorators: ::RubyReport::Decorator, formatters: ::RubyReport::Formatter) @columns_set = Set.new(keys) @decorators = decorators @formatters = formatters end |
Instance Method Details
#add_report(report) ⇒ Object
35 36 37 |
# File 'lib/ruby_report/report.rb', line 35 def add_report(report) reports << report end |
#build_header ⇒ Object
91 92 93 94 95 |
# File 'lib/ruby_report/report.rb', line 91 def build_header columns.map do |key| header_builder.call(key, self) end end |
#build_row(row) ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/ruby_report/report.rb', line 97 def build_row(row) current_row = row_resolver.call(row) return [] unless current_row Array(decorators).each { |decorator| current_row = decorator.new(current_row, scope) } Array(formatters).each { |formatter| current_row = formatter.new(current_row, scope) } columns.map do |key| row_builder.call(current_row, key, self) end end |
#collect_row(row) ⇒ Object
110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/ruby_report/report.rb', line 110 def collect_row(row) result_row = [] reports.each do |report| result_row += if report == self report.build_row(row) else report.collect_row(row) end end result_row end |
#each_row ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/ruby_report/report.rb', line 57 def each_row return enum_for(:each_row) unless block_given? method = if data.respond_to?(:find_each) :find_each else :each end data.public_send(method) do |row| yield collect_row(row) end end |
#header ⇒ Object
43 44 45 46 47 48 49 50 51 |
# File 'lib/ruby_report/report.rb', line 43 def header @header ||= reports.flat_map do |report| if report == self report.build_header else report.header end end end |
#prepend_report(report) ⇒ Object
39 40 41 |
# File 'lib/ruby_report/report.rb', line 39 def prepend_report(report) reports.unshift(report) end |
#rows ⇒ Object
53 54 55 |
# File 'lib/ruby_report/report.rb', line 53 def rows @rows ||= each_row.to_a end |
#to_with(generator, **opts) ⇒ Object
72 73 74 75 76 |
# File 'lib/ruby_report/report.rb', line 72 def to_with(generator, **opts) report = generator.new report.add_report(self, **opts) report.generate end |