Sha256: ba0d829fff194a4fe22cad7c2f72cb9812edea36b1d2f89b03fc0b29f0c94c56
Contents?: true
Size: 1.75 KB
Versions: 2
Compression:
Stored size: 1.75 KB
Contents
# typed: strict module LedgerGen class Transaction extend T::Sig sig {params(date_format: String).void} def initialize(date_format='%Y/%m/%d') @date_format = T.let(date_format, String) @postings = T.let([], T::Array[Posting]) @comments = T.let([], T::Array[String]) @date = T.let(nil, T.nilable(T.any(Date, DateTime))) @payee = T.let(nil, T.nilable(String)) @cleared = T.let(false, T::Boolean) end sig {params(date: T.any(Date, DateTime)).returns(T.any(Date, DateTime))} def date(date) @date = date end sig {params(payee: String).returns(String)} def payee(payee) @payee = payee end sig {void} def cleared! @cleared = true end sig do params( account: T.nilable(String), amount: T.nilable(Float), blk: T.nilable(T.proc.params(arg0: Posting).void) ).void end def posting(account=nil, amount=nil, &blk) post = Posting.new @postings << post if account post.account account if amount post.amount amount end end if block_given? blk.call(post) end end sig {params(comment: String).void} def comment(comment) @comments << comment end sig {returns(String)} def to_s lines = ["#{date_string}#{cleared_string} #{@payee}"] @comments.each do |comment| lines << " ; #{comment}" end @postings.each do |post| lines << " " + post.to_s end lines.join("\n") end private sig {returns(String)} def date_string T.must(@date).strftime(@date_format) end sig {returns(String)} def cleared_string @cleared ? ' *' : '' end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ledger_gen-1.0.1 | lib/ledger_gen/transaction.rb |
ledger_gen-1.0.0 | lib/ledger_gen/transaction.rb |