ledgerjournal is a Ruby gem to read and write ledger accounting files. For parsing, it uses the ledger xml command. For outputting, it formats the ledger data as String in Ruby. The ledger binary needs to be installed to parse and pretty-print.
Parsing a ledger journal file:
journal = Ledger::Journal.new(path: "example_journal.dat")
journal.transactions.each do |tx|
puts tx.date, tx.payee
end
Creating a ledger file from scratch:
journal = Ledger::Journal.new()
journal.transactions << Ledger::Transaction.new(
date: Date.new(2020, 1, 2),
payee: 'Example Payee',
metadata: { "Foo" => "Bar", "Description" => "Example Transaction" },
postings: [
Ledger::Posting.new(account: "Expenses:Unknown", currency: "EUR", amount: BigDecimal('1234.56'), metadata: { "Foo" => "Bar", "Description" => "Example Posting" }),
Ledger::Posting.new(account: "Assets:Checking", currency: "EUR", amount: BigDecimal('-1234.56'))
]
)
puts(journal.to_s)
Appending to a ledger journal:
journal = Ledger::Journal.new(path: "example_journal.dat")
journal.transactions << Ledger::Transaction.new(
date: Date.new(2020, 1, 2),
payee: 'Example Payee',
postings: [
Ledger::Posting.new(account: "Expenses:Unknown", currency: "EUR", amount: BigDecimal('1234.56')),
Ledger::Posting.new(account: "Assets:Checking", currency: "EUR", amount: BigDecimal('-1234.56'))
]
)
journal.save!
Running ledger commands:
puts Ledger.defaults.run('--version')
By default ledgerjournal expects the date format '%Y/%m/%d' and amounts with decimal point (1234.56). This is configurable:
Ledger.defaults = Options.new(date_format: '%d.%m.%Y', decimal_comma: true)
or:
Ledger.defaults = Ledger::Options.for_locale(:de)
Add this line to your application's Gemfile:
gem 'ledgerjournal'
Or install it yourself as:
$ gem install ledgerjournal
After checking out the repo, run bin/setup
to install dependencies. Then, run rake test
to run the tests.
Bug reports and pull requests are welcome on GitHub at https://github.com/ralfebert/ledgerjournal.
ledgerjournal is released under the MIT License. See LICENSE.md.