Sha256: 3c5940c22dbbb85e21f4f05097d1bec3007269f64fa1fe9eb7b3679e8d69c3ce

Contents?: true

Size: 1.14 KB

Versions: 52

Compression:

Stored size: 1.14 KB

Contents

require "csv"

module ThinkFeelDoEngine
  module Reports
    # 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 Reporter
      def self.fetch_reports
        return [] unless Rails.application.config.respond_to?(:reports)
        Rails.application.config.reports
      end

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

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

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

      def to_csv(csv = [])
        csv << @collector.columns
        @collector.all.each do |s|
          csv << @collector.columns.map { |c| s[c.to_sym] }
        end
      end

      private

      def parsed_name
        @collector.name.split("::").last.downcase
      end
    end
  end
end

Version data entries

52 entries across 52 versions & 1 rubygems

Version Path
think_feel_do_engine-3.19.6 app/models/think_feel_do_engine/reports/reporter.rb
think_feel_do_engine-3.19.5 app/models/think_feel_do_engine/reports/reporter.rb
think_feel_do_engine-3.19.4 app/models/think_feel_do_engine/reports/reporter.rb
think_feel_do_engine-3.19.3 app/models/think_feel_do_engine/reports/reporter.rb
think_feel_do_engine-3.19.2 app/models/think_feel_do_engine/reports/reporter.rb
think_feel_do_engine-3.19.1 app/models/think_feel_do_engine/reports/reporter.rb
think_feel_do_engine-3.19.0 app/models/think_feel_do_engine/reports/reporter.rb
think_feel_do_engine-3.18.0 app/models/think_feel_do_engine/reports/reporter.rb
think_feel_do_engine-3.17.2 app/models/think_feel_do_engine/reports/reporter.rb
think_feel_do_engine-3.17.1 app/models/think_feel_do_engine/reports/reporter.rb
think_feel_do_engine-3.17.0 app/models/think_feel_do_engine/reports/reporter.rb
think_feel_do_engine-3.16.3 app/models/think_feel_do_engine/reports/reporter.rb
think_feel_do_engine-3.16.2 app/models/think_feel_do_engine/reports/reporter.rb
think_feel_do_engine-3.16.1 app/models/think_feel_do_engine/reports/reporter.rb
think_feel_do_engine-3.15.7 app/models/think_feel_do_engine/reports/reporter.rb
think_feel_do_engine-3.16.0 app/models/think_feel_do_engine/reports/reporter.rb
think_feel_do_engine-3.15.6 app/models/think_feel_do_engine/reports/reporter.rb
think_feel_do_engine-3.15.5 app/models/think_feel_do_engine/reports/reporter.rb
think_feel_do_engine-3.15.4 app/models/think_feel_do_engine/reports/reporter.rb
think_feel_do_engine-3.15.3 app/models/think_feel_do_engine/reports/reporter.rb