Class: HledgerForecast::Summarizer

Inherits:
Object
  • Object
show all
Defined in:
lib/hledger_forecast/summarizer.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.summarize(csv_string, cli_options = nil) ⇒ Object



3
4
5
# File 'lib/hledger_forecast/summarizer.rb', line 3

def self.summarize(csv_string, cli_options = nil)
  new.summarize(csv_string, cli_options)
end

Instance Method Details

#summarize(csv_string, cli_options = nil) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/hledger_forecast/summarizer.rb', line 7

def summarize(csv_string, cli_options = nil)
  forecast = Forecast.parse(csv_string, cli_options)
  transactions = forecast.transactions.reject(&:summary_exclude?)

  if cli_options&.dig(:tags)
    raise "The --tags option requires a 'tag' column in the forecast CSV" unless forecast.has_tags_column?
    transactions = transactions.select { |t| t.matches_tags?(cli_options[:tags]) }
  end

  output = transactions.map { |t| build_summary_row(t) }
  output = apply_roll_up(output, forecast.settings.roll_up) if forecast.settings.roll_up

  {output: output, settings: forecast.settings}
end