gnucash 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YTlmNWViYWRiZWVmNzlhYWE2NDdmODc1ZGIyYmFmZTEzNzBiOGJkYg==
5
+ data.tar.gz: !binary |-
6
+ YmFmZGY1YmQ0NzkxYTRlMGEzYjBiNjVjZDE0ZTBjNDU2MGQxMGVjMQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ NzExNTNlOTgxZjk3MjI2ZWQ4ZmFlMDIwZDEwOTQ1YzZmN2I4MmEyM2E1YTlm
10
+ MGNlMjU1NzE2MjdkZTVmZDdmZWM5YzkzNDU3YmM2MThhNzk0NzMyYzViMzBk
11
+ Y2E0MTM4ZTNmYWIzOGUzNzk1ZDkwYWJjMjU2ZGYyYzEwNzBhNmE=
12
+ data.tar.gz: !binary |-
13
+ ZjY0NzY5YjZhN2Y0OWMyNTNmNzRmMjE3MTE0MjFhNjM0YWUzNTcxY2Y1ZmM1
14
+ ODg2Y2UzMzJhODJjODNiZDIxNDAwOTllMDFhOTVkNTZiYWEwYmIzZWRjYTZk
15
+ ZTQ1MTU4ODBlZDQ4ZTcxOTkxZWZhNjA5Y2M3ZGQzNGYwN2U0Mzg=
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Ruby library for extracting data from GnuCash data files
4
4
 
5
+ [![Gem Version](https://badge.fury.io/rb/gnucash.png)](http://badge.fury.io/rb/gnucash)
6
+
5
7
  ## Installation
6
8
 
7
9
  Add this line to your application's Gemfile:
@@ -26,7 +28,7 @@ Or install it yourself as:
26
28
  puts "#{account.full_name}: #{account.final_balance}"
27
29
  end
28
30
 
29
- act = book.find_account_by_full_name("Assets::Checking")
31
+ act = book.find_account_by_full_name("Assets:Checking")
30
32
  balance = Gnucash::Value.zero
31
33
  act.transactions.each do |txn|
32
34
  balance += txn.value
@@ -37,6 +39,20 @@ Or install it yourself as:
37
39
  txn.description))
38
40
  end
39
41
 
42
+ ## Release Notes
43
+
44
+ ### v1.2.0
45
+
46
+ - use Date objects instead of formatted strings for dates
47
+ - use a single colon instead of a double colon in account names
48
+ - use 'require_relative' instead of 'require'
49
+
50
+ ### v1.1.0
51
+
52
+ - store and provide access to the account description
53
+ - change many attributes to read-only
54
+ - add 'placeholder' Account attribute
55
+
40
56
  ## Contributing
41
57
 
42
58
  1. Fork it
data/Rakefile CHANGED
@@ -1,3 +1,9 @@
1
+ require "bundler"
2
+ begin
3
+ Bundler.setup(:default, :development)
4
+ rescue Bundler::BundlerError => e
5
+ raise LoadError.new("Unable to Bundler.setup(): You probably need to run `bundle install`: #{e.message}")
6
+ end
1
7
  require "bundler/gem_tasks"
2
8
  require "rake/clean"
3
9
  require "rspec/core/rake_task"
@@ -25,4 +25,7 @@ Gem::Specification.new do |gem|
25
25
  gem.add_development_dependency "rspec-core"
26
26
  gem.add_development_dependency "rspec-expectations"
27
27
  gem.add_development_dependency "rspec-mocks"
28
+ gem.add_development_dependency "rake"
29
+ gem.add_development_dependency "rdoc"
30
+ gem.add_development_dependency "yard"
28
31
  end
@@ -1,9 +1,9 @@
1
- require "gnucash/account"
2
- require "gnucash/account_transaction"
3
- require "gnucash/book"
4
- require "gnucash/transaction"
5
- require "gnucash/value"
6
- require "gnucash/version"
1
+ require_relative "gnucash/account"
2
+ require_relative "gnucash/account_transaction"
3
+ require_relative "gnucash/book"
4
+ require_relative "gnucash/transaction"
5
+ require_relative "gnucash/value"
6
+ require_relative "gnucash/version"
7
7
 
8
8
  # Namespace module for gnucash gem functionality
9
9
  module Gnucash
@@ -74,7 +74,9 @@ module Gnucash
74
74
  # Return the balance of the account as of the date given as a
75
75
  # _Gnucash::Value_. Transactions that occur on the given date are included
76
76
  # in the returned balance.
77
+ # date can be a _String_ ("YYYY-MM-DD") or _Date_ object.
77
78
  def balance_on(date)
79
+ date = Date.parse(date) if date.is_a?(String)
78
80
  return Value.new(0) unless @balances.size > 0
79
81
  return Value.new(0) if @balances.first[:date] > date
80
82
  return @balances.last[:value] if date >= @balances.last[:date]
@@ -99,7 +101,7 @@ module Gnucash
99
101
  if @parent_id
100
102
  parent = @book.find_account_by_id(@parent_id)
101
103
  if parent and parent.type != 'ROOT'
102
- prefix = parent.full_name + "::"
104
+ prefix = parent.full_name + ":"
103
105
  end
104
106
  end
105
107
  prefix + name
@@ -10,10 +10,10 @@ module Gnucash
10
10
  # _Array_ of _Gnucash::Transaction_ objects in the book
11
11
  attr_reader :transactions
12
12
 
13
- # _String_ in "YYYY-MM-DD" format of the first transaction in the book
13
+ # _Date_ of the first transaction in the book
14
14
  attr_reader :start_date
15
15
 
16
- # _String_ in "YYYY-MM-DD" format of the last transaction in the book
16
+ # _Date_ of the last transaction in the book
17
17
  attr_reader :end_date
18
18
 
19
19
  # Construct a Book object.
@@ -1,10 +1,12 @@
1
+ require "date"
2
+
1
3
  module Gnucash
2
4
  # Represent a GnuCash transaction.
3
5
  # Transactions have multiple splits with individual values.
4
6
  # Splits are created as AccountTransaction objects which are associated
5
7
  # with an individual account.
6
8
  class Transaction
7
- # _String_: The date of the transaction, in ISO format ("YYYY-MM-DD")
9
+ # _Date_: The date of the transaction
8
10
  attr_reader :date
9
11
 
10
12
  # _String_: The GUID of the transaction
@@ -24,7 +26,7 @@ module Gnucash
24
26
  @book = book
25
27
  @node = node
26
28
  @id = node.xpath('trn:id').text
27
- @date = node.xpath('trn:date-posted/ts:date').text.split(' ').first
29
+ @date = Date.parse(node.xpath('trn:date-posted/ts:date').text.split(' ').first)
28
30
  @description = node.xpath('trn:description').text
29
31
  @splits = node.xpath('trn:splits/trn:split').map do |split_node|
30
32
  value = Value.new(split_node.xpath('split:value').text)
@@ -1,4 +1,4 @@
1
1
  module Gnucash
2
2
  # gem version
3
- VERSION = "1.1.0"
3
+ VERSION = "1.2.0"
4
4
  end
@@ -4,9 +4,9 @@ module Gnucash
4
4
  # just read the file once
5
5
  @book = Gnucash.open("spec/books/sample.gnucash")
6
6
  @assets = @book.find_account_by_full_name("Assets")
7
- @checking = @book.find_account_by_full_name("Assets::Current Assets::Checking Account")
7
+ @checking = @book.find_account_by_full_name("Assets:Current Assets:Checking Account")
8
8
  @income = @book.find_account_by_full_name("Income")
9
- @salary = @book.find_account_by_full_name("Income::Salary")
9
+ @salary = @book.find_account_by_full_name("Income:Salary")
10
10
  end
11
11
 
12
12
  it "gives access to the account name" do
@@ -18,7 +18,7 @@ module Gnucash
18
18
  end
19
19
 
20
20
  it "gives access to the fully-qualified account name" do
21
- @checking.full_name.should == "Assets::Current Assets::Checking Account"
21
+ @checking.full_name.should == "Assets:Current Assets:Checking Account"
22
22
  end
23
23
 
24
24
  it "gives access to the final balance" do
@@ -20,11 +20,11 @@ module Gnucash
20
20
  end
21
21
 
22
22
  it "records the date of the earliest transaction" do
23
- @subject.start_date.should == "2007-01-01"
23
+ @subject.start_date.should == Date.parse("2007-01-01")
24
24
  end
25
25
 
26
26
  it "records the date of the last transaction" do
27
- @subject.end_date.should == "2012-12-28"
27
+ @subject.end_date.should == Date.parse("2012-12-28")
28
28
  end
29
29
 
30
30
  it "lets you find an account by id" do
@@ -32,7 +32,7 @@ module Gnucash
32
32
  end
33
33
 
34
34
  it "lets you find an account by full name" do
35
- @subject.find_account_by_full_name("Assets::Current Assets::Savings Account").id.should == "67e6e7daadc35716eb6152769373e974"
35
+ @subject.find_account_by_full_name("Assets:Current Assets:Savings Account").id.should == "67e6e7daadc35716eb6152769373e974"
36
36
  end
37
37
  end
38
38
  end
@@ -8,10 +8,12 @@ module Gnucash
8
8
  split_node = "split_node"
9
9
  value_text = "value_text"
10
10
  account_text = "account_text"
11
+ date_text = "date_text"
11
12
 
12
- node.should_receive(:xpath).with('trn:id').and_return(text)
13
13
  text.stub(:text) {"hi there"}
14
- node.should_receive(:xpath).with('trn:date-posted/ts:date').and_return(text)
14
+ node.should_receive(:xpath).with('trn:id').and_return(text)
15
+ date_text.should_receive(:text).and_return("2014-01-20")
16
+ node.should_receive(:xpath).with('trn:date-posted/ts:date').and_return(date_text)
15
17
  value_text.should_receive(:text).and_return("1177/100")
16
18
  account_text.should_receive(:text).and_return("a1s2d3f4")
17
19
  split_node.should_receive(:xpath).with("split:value").and_return(value_text)
@@ -27,7 +29,7 @@ module Gnucash
27
29
  context "without errors" do
28
30
  before(:all) do
29
31
  @book = Gnucash.open("spec/books/sample.gnucash")
30
- @txn = @book.find_account_by_full_name("Assets::Current Assets::Cash in Wallet").transactions.first
32
+ @txn = @book.find_account_by_full_name("Assets:Current Assets:Cash in Wallet").transactions.first
31
33
  end
32
34
 
33
35
  it "keeps track of the transaction description" do
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gnucash
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
5
- prerelease:
4
+ version: 1.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Josh Holtrop
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-08-31 00:00:00.000000000 Z
11
+ date: 2014-01-20 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: nokogiri
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ! '>='
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: simplecov
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ! '>='
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ! '>='
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ! '>='
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ! '>='
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rspec-core
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ! '>='
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ! '>='
76
67
  - !ruby/object:Gem::Version
@@ -78,7 +69,6 @@ dependencies:
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: rspec-expectations
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ! '>='
84
74
  - !ruby/object:Gem::Version
@@ -86,7 +76,6 @@ dependencies:
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - ! '>='
92
81
  - !ruby/object:Gem::Version
@@ -94,7 +83,6 @@ dependencies:
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: rspec-mocks
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
87
  - - ! '>='
100
88
  - !ruby/object:Gem::Version
@@ -102,7 +90,48 @@ dependencies:
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rdoc
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: yard
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
106
135
  requirements:
107
136
  - - ! '>='
108
137
  - !ruby/object:Gem::Version
@@ -139,27 +168,26 @@ files:
139
168
  homepage: https://github.com/holtrop/ruby-gnucash
140
169
  licenses:
141
170
  - MIT
171
+ metadata: {}
142
172
  post_install_message:
143
173
  rdoc_options: []
144
174
  require_paths:
145
175
  - lib
146
176
  required_ruby_version: !ruby/object:Gem::Requirement
147
- none: false
148
177
  requirements:
149
178
  - - ! '>='
150
179
  - !ruby/object:Gem::Version
151
180
  version: '0'
152
181
  required_rubygems_version: !ruby/object:Gem::Requirement
153
- none: false
154
182
  requirements:
155
183
  - - ! '>='
156
184
  - !ruby/object:Gem::Version
157
185
  version: '0'
158
186
  requirements: []
159
187
  rubyforge_project:
160
- rubygems_version: 1.8.23
188
+ rubygems_version: 2.2.1
161
189
  signing_key:
162
- specification_version: 3
190
+ specification_version: 4
163
191
  summary: Extract data from GnuCash data files
164
192
  test_files:
165
193
  - spec/books/sample-text.gnucash