ledger_gen 0.2.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ .