ledger_gen 0.2.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b4fba09632d0197e1908966b5bc853020862d019
4
- data.tar.gz: 1645c7d8f10015c54875e6931cee1659723e4e20
3
+ metadata.gz: ef56a31e0eaff2fe2873264e052138e1a751a2fd
4
+ data.tar.gz: 595843b7a15ed91352a8f35e3069f8be0f6ec9b1
5
5
  SHA512:
6
- metadata.gz: b35a1a77e119b07dc182847b2dac3b270877110b6ca2d79c049265357379a19c233e4cbf56aea527bec46356b77ec99abd644d03dcd4895f1161cbbaa73514c8
7
- data.tar.gz: d90c0935e1310b0143ba0f35b0b3ebbe0eeae7dd0f7aa15e2024927eee8e8dc8c8b8a983aef34ad4c23a57ae32d2c5ce07509256e1050bc76abde60b34fb44e8
6
+ metadata.gz: b0346e50cac7cff1626d50f6da33380d0409149f7162f1692c48a96537d90e4522bd6942a7c9834175cebdc9d81d196cd13b95fddf093f8be41289778d7a45d2
7
+ data.tar.gz: 8e2531fa740934717912ec1a9f10ec653f788f8e1d390015423acd132c7c3c31f97a4c08553a3efce28b566ffa550c47c0b396a8bd8504c4cac1484d3c0d5f63
data/README.md CHANGED
@@ -29,7 +29,6 @@ j = LedgerGen::Journal.build do |journal|
29
29
  txn.posting do |post|
30
30
  post.account 'Expenses:Utils:Energy'
31
31
  post.amount 190.0
32
- post.currency '$'
33
32
  end
34
33
  txn.posting 'Assets:PNC:Checking', -190.0
35
34
  end
data/ledger_gen.gemspec CHANGED
@@ -20,7 +20,10 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ["lib"]
22
22
 
23
+ spec.add_dependency "sorbet-runtime"
24
+
23
25
  spec.add_development_dependency "bundler", "~> 1.13"
24
- spec.add_development_dependency "rake", "~> 10.0"
26
+ spec.add_development_dependency "rake", ">= 12.3.3"
25
27
  spec.add_development_dependency "rspec", "~> 3.0"
28
+ spec.add_development_dependency "sorbet"
26
29
  end
@@ -1,33 +1,47 @@
1
+ # typed: strict
2
+
1
3
  module LedgerGen
2
4
  class Journal
5
+ extend T::Sig
6
+
7
+ sig {returns(String)}
3
8
  attr_accessor :date_format
4
9
 
5
- def self.build
10
+ sig {params(blk: T.proc.params(arg0: Journal).void).returns(Journal)}
11
+ def self.build(&blk)
6
12
  journal = new
7
13
 
8
- yield journal
14
+ blk.call(journal)
9
15
 
10
16
  return journal
11
17
  end
12
18
 
19
+ sig {void}
13
20
  def initialize
14
- @transactions = []
15
- @date_format = '%Y/%m/%d'
21
+ @transactions = T.let([], T::Array[Transaction])
22
+ @date_format = T.let('%Y/%m/%d', String)
16
23
  end
17
24
 
18
- def transaction
25
+ sig {params(blk: T.proc.params(arg0: Transaction).void).void}
26
+ def transaction(&blk)
19
27
  txn = Transaction.new(date_format)
20
28
  @transactions << txn
21
29
 
22
30
  yield txn
23
31
  end
24
32
 
33
+ sig {returns(String)}
25
34
  def to_s
26
35
  @transactions.map(&:to_s).join("\n\n") + "\n"
27
36
  end
28
37
 
38
+ sig {params(ledger_options: String).returns(String)}
29
39
  def pretty_print(ledger_options='')
30
- IO.popen("ledger #{ledger_options} -f - print", mode='r+') do |io|
40
+ if ledger_options == ''
41
+ ledger_options = %Q{-y "#{date_format}" --sort=date}
42
+ end
43
+
44
+ IO.popen("ledger #{ledger_options} -f - print", 'r+') do |io|
31
45
  io.write to_s
32
46
  io.close_write
33
47
  io.read
@@ -1,17 +1,31 @@
1
+ # typed: strict
2
+
1
3
  module LedgerGen
2
4
  class Posting
5
+ extend T::Sig
6
+
7
+ sig {void}
8
+ def initialize
9
+ @account = T.let('', String)
10
+ @amount = T.let(0, Numeric)
11
+ end
12
+
13
+ sig { params(account: String).returns(String) }
3
14
  def account(account)
4
15
  @account = account
5
16
  end
6
17
 
18
+ sig { params(amount: Numeric).returns(Numeric) }
7
19
  def amount(amount)
8
20
  @amount = amount
9
21
  end
10
22
 
23
+ sig {returns(String)}
11
24
  def to_s
12
25
  "#{@account} #{amount_string}"
13
26
  end
14
27
 
28
+ sig {returns(String)}
15
29
  def amount_string
16
30
  if @amount.nil?
17
31
  ''
@@ -1,41 +1,63 @@
1
+ # typed: strict
1
2
  module LedgerGen
2
3
  class Transaction
3
- def initialize(date_format=nil)
4
- @date_format = date_format || '%Y/%m/%d'
5
- @postings = []
6
- @comments = []
4
+ extend T::Sig
5
+
6
+ sig {params(date_format: String).void}
7
+ def initialize(date_format='%Y/%m/%d')
8
+ @date_format = T.let(date_format, String)
9
+ @postings = T.let([], T::Array[Posting])
10
+ @comments = T.let([], T::Array[String])
11
+
12
+ @date = T.let(nil, T.nilable(T.any(Date, DateTime)))
13
+ @payee = T.let(nil, T.nilable(String))
14
+ @cleared = T.let(false, T::Boolean)
7
15
  end
8
16
 
17
+ sig {params(date: T.any(Date, DateTime)).returns(T.any(Date, DateTime))}
9
18
  def date(date)
10
19
  @date = date
11
20
  end
12
21
 
22
+ sig {params(payee: String).returns(String)}
13
23
  def payee(payee)
14
24
  @payee = payee
15
25
  end
16
26
 
27
+ sig {void}
17
28
  def cleared!
18
29
  @cleared = true
19
30
  end
20
31
 
21
- def posting(*args)
32
+ sig do
33
+ params(
34
+ account: T.nilable(String),
35
+ amount: T.nilable(Float),
36
+ blk: T.nilable(T.proc.params(arg0: Posting).void)
37
+ ).void
38
+ end
39
+ def posting(account=nil, amount=nil, &blk)
22
40
  post = Posting.new
23
41
  @postings << post
24
42
 
25
- if args.length > 0
26
- post.account args.shift
27
- if args.length > 0
28
- post.amount args[0]
43
+ if account
44
+ post.account account
45
+ if amount
46
+ post.amount amount
29
47
  end
30
- else
31
- yield post
48
+ end
49
+
50
+ if block_given?
51
+ blk.call(post)
32
52
  end
33
53
  end
34
54
 
55
+ sig {params(comment: String).void}
35
56
  def comment(comment)
36
57
  @comments << comment
37
58
  end
38
59
 
60
+ sig {returns(String)}
39
61
  def to_s
40
62
  lines = ["#{date_string}#{cleared_string} #{@payee}"]
41
63
 
@@ -52,10 +74,12 @@ module LedgerGen
52
74
 
53
75
  private
54
76
 
77
+ sig {returns(String)}
55
78
  def date_string
56
- @date.strftime(@date_format)
79
+ T.must(@date).strftime(@date_format)
57
80
  end
58
81
 
82
+ sig {returns(String)}
59
83
  def cleared_string
60
84
  @cleared ? ' *' : ''
61
85
  end
@@ -1,3 +1,4 @@
1
+ # typed: strong
1
2
  module LedgerGen
2
- VERSION = "0.2.0"
3
+ VERSION = "1.0.0"
3
4
  end
data/lib/ledger_gen.rb CHANGED
@@ -1,4 +1,6 @@
1
+ # typed: strong
1
2
  require "ledger_gen/version"
3
+ require "sorbet-runtime"
2
4
 
3
5
  module LedgerGen
4
6
  # Your code goes here...
data/sorbet/config ADDED
@@ -0,0 +1,2 @@
1
+ --dir
2
+ .