Class: ThinkFeelDoEngine::Reports::Reporter

Inherits:
Object
  • Object
show all
Defined in:
app/models/think_feel_do_engine/reports/reporter.rb

Overview

Produces formatted versions of data produced by a data collector. The collector is expected to have two methods: ‘columns` returns a collection of column names `all` returns a collection of Hashes whose keys match the column names

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(collector) ⇒ Reporter

Returns a new instance of Reporter.



21
22
23
24
# File 'app/models/think_feel_do_engine/reports/reporter.rb', line 21

def initialize(collector)
  @collector = collector
  @path = self.class.file_path(parsed_name)
end

Class Method Details

.fetch_reportsObject



11
12
13
14
# File 'app/models/think_feel_do_engine/reports/reporter.rb', line 11

def self.fetch_reports
  return [] unless Rails.application.config.respond_to?(:reports)
  Rails.application.config.reports
end

.file_path(name) ⇒ Object



16
17
18
19
# File 'app/models/think_feel_do_engine/reports/reporter.rb', line 16

def self.file_path(name)
  Rails.application.config.reports_root_path
       .join("reports/#{name.to_s.scan(/[a-z]+/).join.downcase}.csv")
end

Instance Method Details

#to_csv(csv = []) ⇒ Object



32
33
34
35
36
37
38
39
# File 'app/models/think_feel_do_engine/reports/reporter.rb', line 32

def to_csv(csv = [])
  csv << @collector.columns
  # rubocop:disable Rails/FindEach
  @collector.all.each do |s|
    csv << @collector.columns.map { |c| s[c.to_sym] }
  end
  # rubocop:enable Rails/FindEach
end

#write_csvObject



26
27
28
29
30
# File 'app/models/think_feel_do_engine/reports/reporter.rb', line 26

def write_csv
  CSV.open(@path, "wb") do |csv|
    to_csv(csv)
  end
end