Class: LedgerRest::Ledger::Budget

Inherits:
Object
  • Object
show all
Defined in:
lib/ledger-rest/ledger/budget.rb

Constant Summary collapse

FORMAT =
[
 '%(scrub(get_at(display_total, 0)))\n',
 '%(-scrub(get_at(display_total, 1)))\n',
 '%(scrub(get_at(display_total, 1) + get_at(display_total, 0)))\n',
 '%(get_at(display_total, 1) ? (100% * scrub(get_at(display_total, 0))) / -scrub(get_at(display_total, 1)) : 0)\n',
 '%(account)\n',
 '---\n',
 '%/---\n',
 '%$1\n',
 '%$2\n',
 '%$3\n',
 '%$4\n',
 '%/'
].join

Class Method Summary collapse

Class Method Details

.get(query = nil, params = {}) ⇒ Object



21
22
23
# File 'lib/ledger-rest/ledger/budget.rb', line 21

def get(query = nil, params = {})
  JSON.parse(json(query, params), symbolize_names: true)
end

.json(query = nil, params = {}) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/ledger-rest/ledger/budget.rb', line 25

def json(query = nil, params = {})
  params = { '--format' => FORMAT }.merge(params)
  result = Ledger.exec("budget #{query}", params)
  budget = {}
  accounts, total = result.split("---\n---\n")
  budget['accounts'] = accounts.split("---\n").map do |str|
    val = str.split("\n")
    {
      'total'      => val[0].empty? ? '0' : val[0],
      'budget'     => val[1].empty? ? '0' : val[1],
      'difference' => val[2].empty? ? '0' : val[2],
      'percentage' => val[3].empty? ? '0' : val[3],
      'account'    => val[4].empty? ? '0' : val[4]
    }
  end
  if total
    val = total.split("\n")
    budget['total']      = val[0].empty? ? '0' : val[0]
    budget['budget']     = val[1].empty? ? '0' : val[1]
    budget['difference'] = val[2].empty? ? '0' : val[2]
    budget['percentage'] = val[3].empty? ? '0' : val[3]
  end
  budget.to_json
end