transactions 0.1.0 → 0.1.1

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: d1fb2dde0117abbbd982a133959573444cb4b0fd
4
- data.tar.gz: 27fbf80ef838f35511f3a9337ac7746c159b811f
3
+ metadata.gz: 33eda3b0328f7e73b955157f5e6546a02318dd39
4
+ data.tar.gz: b5517d7c6f82f774478fed0b3201233221836ac4
5
5
  SHA512:
6
- metadata.gz: dfc5cc11724b32935bfb1b63936404109f9d384a3936dd28ab899e32ac0e11d55e51ef58491dfe9312d83ba62fcf6eb921bbd2f4d7091655e83c4e2d8b80d33c
7
- data.tar.gz: e7d1c09de955ccde03a27024783c3eb9e5bd3ea7e6e4a875712da422ad03cd9ef30724ae6aa934d8b2437318762e242d326b9aa39b832ebb55b809c03c3298dc
6
+ metadata.gz: e48557d6ce160b64d8222d6697aa2a431c3ff38aa5f867e96020b05d042d978852f5108eb3b9a9097227a4a61e4cace27caf57db60dec9b9dfe06bd1814d6a90
7
+ data.tar.gz: 862a28891b7a1a138714d0ca2a391718f19286ee9744c29ec8927395fe7187e10409980bb9630a3aca82ec576e765fb11c606c114971f88248caa202bcdb5204
@@ -1,11 +1,15 @@
1
+ ## version 0.1.1 (2013-06-28)
2
+ * refactored transaction parser
3
+ * added some tomdocs to code
4
+ * included test directory in gem pkg
5
+
6
+
1
7
  ## version 0.1.0 (2013-06-27)
2
- ---
3
- * Initial Release
4
- * Added additional unit tests
5
- * Authored README.md
8
+ * initial Release
9
+ * added additional unit tests
10
+ * authored README.md
6
11
 
7
12
 
8
13
  ## version 0.0.0 (2013-06-26)
9
- ---
10
- * Happy Birthday!
14
+ * happy birthday!
11
15
 
data/README.md CHANGED
@@ -21,7 +21,7 @@ on your system. Note that RubyGems is included with Ruby since version 1.9.
21
21
  The best way to install transactions is via RubyGems. At the terminal prompt, run
22
22
  the following command:
23
23
 
24
- `gem install transactions`
24
+ gem install transactions
25
25
 
26
26
 
27
27
  ## Additional Information
@@ -227,14 +227,16 @@ Limit by date
227
227
  How to get your work merged into the project?
228
228
 
229
229
  * Fork the project.
230
- * Clone your fork ( git clone git@github.com:<username>/transactions.git ).
231
- * Create a topic branch for your change ( git checkout -b my_new_feature ).
230
+ * Clone your fork ( `git clone git@github.com:<username>/transactions.git` ).
231
+ * Create a topic branch for your change ( `git checkout -b my_new_feature` ).
232
232
  * Hack away, add tests. Not necessarily in that order.
233
- * Make sure everything still passes by running rake.
233
+ * Make sure everything still passes by running `ruby test_transactions.rb`
234
+ from within the test directory (tests need to be run in the same directory
235
+ as the included **ledger.yaml** file).
234
236
  * If necessary, rebase your commits into logical chunks, without errors.
235
- * Push the branch up ( git push origin my_new_feature ).
237
+ * Push the branch up ( `git push origin my_new_feature` ).
236
238
  * Create a pull request against randyschneck/transactions and describe what
237
- your change does and the why you think it should be merged.
239
+ your change does and/or why you think it should be merged.
238
240
 
239
241
 
240
242
  ## Credits
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $:.unshift File.join(File.dirname(__FILE__), "..", "lib") # For use/testing when not installed
3
+ $:.unshift File.join(File.dirname(__FILE__), *%w{ .. lib })
4
4
 
5
5
  require 'transactions'
6
6
 
@@ -1,5 +1,3 @@
1
- $:.unshift File.dirname(__FILE__) # For use/testing when not installed
2
-
3
1
  # stdlib
4
2
  require 'yaml'
5
3
  require 'optparse'
@@ -1,5 +1,15 @@
1
1
  module Transaction
2
2
 
3
+ # Public: Initializes a Transaction::Parser object. A 'ledger.yaml' file must
4
+ # exist in the current working directory.
5
+ #
6
+ # Examples
7
+ #
8
+ # require 'transactions'
9
+ # # read the ledger.yaml file into a Transaction::Parser object
10
+ # t = Transaction::Parser.new
11
+ #
12
+ # Returns nothing
3
13
  class Parser
4
14
 
5
15
  def initialize
@@ -6,6 +6,9 @@ module Transaction
6
6
  @options = {}
7
7
  end
8
8
 
9
+ # Internal: Parses options for transactions from the command line.
10
+ #
11
+ # Returns nothing.
9
12
  def options
10
13
  OptionParser.new do |opts|
11
14
 
@@ -68,6 +71,10 @@ module Transaction
68
71
  end
69
72
 
70
73
 
74
+ # Internal: Prints help for commands that are stored in ARGV[0]. Used in
75
+ # help menu.
76
+ #
77
+ # Returns nothing.
71
78
  def commands_help
72
79
  <<-COMMANDHELP
73
80
 
@@ -1,5 +1,25 @@
1
1
  module Transaction
2
2
 
3
+ # Public: This is the actual parser for generating financial reports.
4
+ #
5
+ # cmd - A String for the command to run through parser. Must be 'balance',
6
+ # 'register', or 'print'.
7
+ #
8
+ # Examples
9
+ #
10
+ # require 'transactions'
11
+ # t = Transaction::Parser.new
12
+ # ARGV[0] == "" # The function requires ARGV[0] even if it's empty
13
+ # t.parse 'balance'
14
+ # t.parse 'register'
15
+ # t.parse 'print'
16
+ # ARGV[1] = 'checking'
17
+ # t.parse 'register'
18
+ # ARGV[1] = 'income'
19
+ # ARGV[2] = 'expenses'
20
+ # t.parse 'balance'
21
+ #
22
+ # Returns Hash containing accounts and totals if cmd is 'balance'
3
23
  def parse(cmd)
4
24
 
5
25
  @accounts = {}
@@ -19,38 +39,19 @@ module Transaction
19
39
 
20
40
  def transaction_register(x, k, v, running_total)
21
41
  if v.is_a? Numeric
22
- if @options[:wide] # for printing 132 columns wide
23
- t = "%10s %-44s %-44s %15.2f %15.2f"
24
- puts sprintf(t, x['date'], x['transaction'][0..42],
25
- k[0..42], v, running_total)
26
- else # for printing 78 columns wide (default)
27
- t = "%10s %-20s %-24s %10.2f %10.2f"
28
- puts sprintf(t, x['date'], x['transaction'][0..18],
29
- k[0..22], v, running_total)
30
- end
42
+ t = "%10s %-44.42s %-44.42s %15.2f %15.2f" if @options[:wide]
43
+ t = "%10s %-20.18s %-24.22s %10.2f %10.2f" unless @options[:wide]
44
+ puts sprintf(t, x['date'], x['transaction'], k, v, running_total)
31
45
  end
32
46
  end
33
47
 
34
48
  def transaction_command(cmd, x, k, v)
35
49
  ARGV.map! { |z| z.downcase }
36
- if ARGV[1..-1].any? { |arg| k.downcase.include? arg }
37
- @running_total += v if v.is_a? Numeric
38
- if cmd == 'print'
39
- transaction_print(x)
40
- elsif cmd == 'balance'
41
- transaction_balance(k, v)
42
- elsif cmd == 'register'
43
- transaction_register(x, k, v, @running_total)
44
- end
45
- elsif !ARGV[1]
50
+ if ARGV[1..-1].any? { |arg| k.downcase.include? arg } || !ARGV[1]
46
51
  @running_total += v if v.is_a? Numeric
47
- if cmd == 'print'
48
- transaction_print(x)
49
- elsif cmd == 'balance'
50
- transaction_balance(k, v)
51
- elsif cmd == 'register'
52
- transaction_register(x, k, v, @running_total)
53
- end
52
+ transaction_print(x) if cmd == 'print'
53
+ transaction_balance(k, v) if cmd == 'balance'
54
+ transaction_register(x, k, v, @running_total) if cmd == 'register'
54
55
  end
55
56
  end
56
57
 
@@ -154,9 +155,9 @@ module Transaction
154
155
  end
155
156
  end
156
157
  end
158
+ @accounts
157
159
  end
158
160
 
159
-
160
161
  end
161
162
  end
162
163
 
@@ -1,4 +1,4 @@
1
1
  module Transaction
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
4
4
 
@@ -0,0 +1,58 @@
1
+ # This is a sample ledger file
2
+ # this line and the one above are comments that will be ignored
3
+ # during processing! Comments can also be placed at the end of
4
+ # a line (see below for examples).
5
+
6
+ - date: 2013/01/01
7
+ transaction: Opening Balances
8
+ Assets:Checking: 251.0
9
+ Assets:Savings: 5005.3
10
+ Assets:IRA: 22510.92
11
+ Liabilities:CreditCard: -931.32
12
+ Liabilities:Salliemae: -10189.05
13
+ Equity:OpeningBalances: -16646.85
14
+
15
+ - date: 2013/01/07
16
+ transaction: Trader Joe's
17
+ Expenses:Food:Groceries: 58.77
18
+ Assets:Checking: -58.77
19
+
20
+ - date: 2013/01/09
21
+ transaction: Student Loan Payment
22
+ Liabilities:Salliemae: 103.3
23
+ Expenses:Interest:StudentLoan: 15.04
24
+ Assets:Checking: -118.34
25
+
26
+ - date: 2013/02/11
27
+ transaction: Deposit Paycheck
28
+ Assets:Checking: 1242.87
29
+ Income:JobName: -1242.87
30
+
31
+ - date: 2013/02/11
32
+ transaction: Visa Payment
33
+ Expenses:Interest:CreditCard: 10.0
34
+ Liabilities:CreditCard: 130.0
35
+ Assets:Checking: -140.0
36
+
37
+ - date: 2013/02/25
38
+ transaction: PG&E
39
+ Expenses:Utilities:Electric: 75
40
+ Assets:Checking: -75
41
+
42
+ - date: 2013/02/25
43
+ transaction: Verizon # Switch to Virgin Mobile
44
+ Expenses:Phone: 55.72
45
+ Assets:Checking: -55.72
46
+
47
+ - date: 2013/02/26
48
+ transaction: Ike's Lair # good sandwich
49
+ Expenses:Food:Dining: 22.31
50
+ Assets:Checking: -22.31
51
+
52
+ # a transaction requires only one space as a separator but can also be
53
+ # aligned as above. The choice is yours!
54
+
55
+ - date: 2013/02/26
56
+ transaction: Money Transfer
57
+ Assets:Savings: 494.7
58
+ Assets:Checking: -494.7
@@ -0,0 +1,36 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), *%w{ .. lib })
2
+
3
+ require "test/unit"
4
+ require "../lib/transactions"
5
+
6
+ class TestTransactions < Test::Unit::TestCase
7
+
8
+ def test_options # make sure options are initiated
9
+ test_options = Transaction::Options.new.options
10
+ assert_equal(test_options, {})
11
+ test_options[:file] = 'test'
12
+ assert_equal(test_options, {:file=>'test'})
13
+ end
14
+
15
+ def test_balances # make sure accounts balance in test "ledger.yaml"
16
+ ARGV[0] = ""
17
+ accounts = Transaction::Parser.new.parse("balance")
18
+ accounts.each do |x|
19
+ assert_equal(529.03, x[1].round(2)) if x[0] == "Assets:Checking"
20
+ assert_equal(22510.92, x[1].round(2)) if x[0] == "Assets:IRA"
21
+ assert_equal(5500.00, x[1].round(2)) if x[0] == "Assets:Savings"
22
+ assert_equal(-16646.85, x[1].round(2)) if x[0] == "Equity:OpeningBalances"
23
+ assert_equal(22.31, x[1].round(2)) if x[0] == "Expenses:Food:Dining"
24
+ assert_equal(58.77, x[1].round(2)) if x[0] == "Expenses:Food:Groceries"
25
+ assert_equal(10.00, x[1].round(2)) if x[0] == "Expenses:Interest:CreditCard"
26
+ assert_equal(15.04, x[1].round(2)) if x[0] == "Expenses:Interest:StudentLoan"
27
+ assert_equal(55.72, x[1].round(2)) if x[0] == "Expenses:Phone"
28
+ assert_equal(75.00, x[1].round(2)) if x[0] == "Expenses:Utilities:Electric"
29
+ assert_equal(-1242.87, x[1].round(2)) if x[0] == "Income:JobName"
30
+ assert_equal(-801.32, x[1].round(2)) if x[0] == "Liabilities:CreditCard"
31
+ assert_equal(-10085.75, x[1].round(2)) if x[0] == "Liabilities:Salliemae"
32
+ end
33
+ end
34
+
35
+ end
36
+
@@ -0,0 +1,28 @@
1
+ lib = File.expand_path('../lib/', __FILE__)
2
+ $:.unshift lib unless $:.include?(lib)
3
+
4
+ require 'transactions/version'
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = 'transactions'
8
+ s.version = Transaction::VERSION
9
+
10
+ s.summary = "A bookkeeping application to help manage your finances."
11
+ s.description = <<-EOF
12
+ A small but powerful command line application to help manage finances.
13
+ Transactions are entered into a text file using yaml and reports are
14
+ generated by parsing this data.
15
+ EOF
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_path = 'lib'
21
+ s.require_paths = %w[lib]
22
+ s.executables = ["transactions"]
23
+
24
+ s.authors = ["Randy Schneck"]
25
+ s.email = 'rasch@computercrayons.com'
26
+ s.homepage = 'https://github.com/randyschneck/transactions'
27
+ s.license = 'MIT'
28
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: transactions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Randy Schneck
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-27 00:00:00.000000000 Z
11
+ date: 2013-06-29 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |2
14
14
  A small but powerful command line application to help manage finances.
@@ -20,15 +20,18 @@ executables:
20
20
  extensions: []
21
21
  extra_rdoc_files: []
22
22
  files:
23
+ - CHANGELOG.md
24
+ - LICENSE.md
25
+ - README.md
23
26
  - bin/transactions
27
+ - lib/transactions.rb
24
28
  - lib/transactions/main.rb
25
29
  - lib/transactions/options.rb
26
30
  - lib/transactions/parser.rb
27
31
  - lib/transactions/version.rb
28
- - lib/transactions.rb
29
- - LICENSE.md
30
- - README.md
31
- - CHANGELOG.md
32
+ - test/ledger.yaml
33
+ - test/test_transactions.rb
34
+ - transactions.gemspec
32
35
  homepage: https://github.com/randyschneck/transactions
33
36
  licenses:
34
37
  - MIT
@@ -49,8 +52,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
49
52
  version: '0'
50
53
  requirements: []
51
54
  rubyforge_project:
52
- rubygems_version: 2.0.2
55
+ rubygems_version: 2.0.3
53
56
  signing_key:
54
57
  specification_version: 4
55
58
  summary: A bookkeeping application to help manage your finances.
56
- test_files: []
59
+ test_files:
60
+ - test/ledger.yaml
61
+ - test/test_transactions.rb