subledger 0.7.7

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.
Files changed (85) hide show
  1. data/.gitignore +9 -0
  2. data/LICENSE.txt +12 -0
  3. data/README.md +136 -0
  4. data/Rakefile +5 -0
  5. data/bin/subledger +6 -0
  6. data/lib/subledger/actor.rb +32 -0
  7. data/lib/subledger/collection_name.rb +25 -0
  8. data/lib/subledger/domain/account.rb +168 -0
  9. data/lib/subledger/domain/balance.rb +102 -0
  10. data/lib/subledger/domain/book.rb +111 -0
  11. data/lib/subledger/domain/category.rb +157 -0
  12. data/lib/subledger/domain/control.rb +180 -0
  13. data/lib/subledger/domain/formatters.rb +31 -0
  14. data/lib/subledger/domain/identity.rb +159 -0
  15. data/lib/subledger/domain/journal_entry.rb +293 -0
  16. data/lib/subledger/domain/key.rb +113 -0
  17. data/lib/subledger/domain/line.rb +272 -0
  18. data/lib/subledger/domain/org.rb +110 -0
  19. data/lib/subledger/domain/report.rb +247 -0
  20. data/lib/subledger/domain/report_rendering.rb +233 -0
  21. data/lib/subledger/domain/roles/activatable.rb +11 -0
  22. data/lib/subledger/domain/roles/archivable.rb +11 -0
  23. data/lib/subledger/domain/roles/attributable.rb +14 -0
  24. data/lib/subledger/domain/roles/collectable.rb +175 -0
  25. data/lib/subledger/domain/roles/creatable.rb +58 -0
  26. data/lib/subledger/domain/roles/describable.rb +33 -0
  27. data/lib/subledger/domain/roles/describable_report_rendering.rb +50 -0
  28. data/lib/subledger/domain/roles/identifiable.rb +15 -0
  29. data/lib/subledger/domain/roles/postable.rb +54 -0
  30. data/lib/subledger/domain/roles/progressable.rb +11 -0
  31. data/lib/subledger/domain/roles/readable.rb +34 -0
  32. data/lib/subledger/domain/roles/restable.rb +69 -0
  33. data/lib/subledger/domain/roles/storable.rb +30 -0
  34. data/lib/subledger/domain/roles/timeable.rb +18 -0
  35. data/lib/subledger/domain/roles/updatable.rb +35 -0
  36. data/lib/subledger/domain/roles/versionable.rb +35 -0
  37. data/lib/subledger/domain/roles.rb +16 -0
  38. data/lib/subledger/domain/value/credit.rb +16 -0
  39. data/lib/subledger/domain/value/debit.rb +16 -0
  40. data/lib/subledger/domain/value/zero.rb +24 -0
  41. data/lib/subledger/domain/value.rb +111 -0
  42. data/lib/subledger/domain.rb +95 -0
  43. data/lib/subledger/exception_handler.rb +65 -0
  44. data/lib/subledger/interface/client.rb +295 -0
  45. data/lib/subledger/interface/dispatcher.rb +20 -0
  46. data/lib/subledger/interface.rb +2 -0
  47. data/lib/subledger/path.rb +106 -0
  48. data/lib/subledger/rest.rb +128 -0
  49. data/lib/subledger/server.rb +3 -0
  50. data/lib/subledger/store/api/errors.rb +95 -0
  51. data/lib/subledger/store/api/roles/activate.rb +21 -0
  52. data/lib/subledger/store/api/roles/archive.rb +21 -0
  53. data/lib/subledger/store/api/roles/balance.rb +39 -0
  54. data/lib/subledger/store/api/roles/categories.rb +51 -0
  55. data/lib/subledger/store/api/roles/collect.rb +58 -0
  56. data/lib/subledger/store/api/roles/create.rb +26 -0
  57. data/lib/subledger/store/api/roles/create_and_post.rb +35 -0
  58. data/lib/subledger/store/api/roles/create_identity.rb +39 -0
  59. data/lib/subledger/store/api/roles/create_line.rb +24 -0
  60. data/lib/subledger/store/api/roles/first_and_last_line.rb +31 -0
  61. data/lib/subledger/store/api/roles/post.rb +25 -0
  62. data/lib/subledger/store/api/roles/progress.rb +21 -0
  63. data/lib/subledger/store/api/roles/read.rb +19 -0
  64. data/lib/subledger/store/api/roles/reports.rb +77 -0
  65. data/lib/subledger/store/api/roles/update.rb +24 -0
  66. data/lib/subledger/store/api/store.rb +103 -0
  67. data/lib/subledger/store/api.rb +20 -0
  68. data/lib/subledger/store.rb +236 -0
  69. data/lib/subledger/supervisor.rb +21 -0
  70. data/lib/subledger/uuid.rb +52 -0
  71. data/lib/subledger/version.rb +4 -0
  72. data/lib/subledger.rb +234 -0
  73. data/spec/spec_helper.rb +77 -0
  74. data/spec/subledger_account_spec.rb +354 -0
  75. data/spec/subledger_book_spec.rb +130 -0
  76. data/spec/subledger_category_spec.rb +203 -0
  77. data/spec/subledger_control_spec.rb +43 -0
  78. data/spec/subledger_identity_spec.rb +47 -0
  79. data/spec/subledger_journal_entry_spec.rb +417 -0
  80. data/spec/subledger_key_spec.rb +43 -0
  81. data/spec/subledger_org_spec.rb +68 -0
  82. data/spec/subledger_report_spec.rb +295 -0
  83. data/spec/subledger_spec.rb +101 -0
  84. data/subledger.gemspec +52 -0
  85. metadata +205 -0
@@ -0,0 +1,295 @@
1
+ require 'spec_helper'
2
+
3
+ Test 'Subledger' do
4
+
5
+ let(:factory) { Subledger::Factory.create }
6
+ let(:amount ) { '1' }
7
+
8
+ Instance do
9
+ subject { factory.client }
10
+
11
+ Test 'Report' do
12
+
13
+ # POST /v2/orgs/:org_id/books/:book_id/reports
14
+ RespondsTo 'report.create' do
15
+ ByReturning 'an instance of Subledger::Domain::ActiveReport' do
16
+ subject.report.create( factory.report_args ).
17
+ must_be_instance_of Subledger::Domain::ActiveReport
18
+ end
19
+ end
20
+
21
+ # GET /v2/orgs/:org_id/books/:book_id/reports/:id
22
+ [ :archived, :active ].each do |state|
23
+ RespondsTo 'report.read' do
24
+ let(:report) { factory.create_report state }
25
+
26
+ ByReturning "an instance of #{state} report" do
27
+ subject.report.read( :id => report.id ).
28
+ must_be_instance_of report.class
29
+ end
30
+ end
31
+ end
32
+
33
+ # PATCH /v2/orgs/:org_id/books/:book_id/reports/:id
34
+ [ :archived, :active ].each do |state|
35
+ RespondsTo 'reports.update' do
36
+ let(:report ) { factory.create_report state }
37
+ let(:args ) { report.attributes }
38
+ let(:description) { 'updated description' }
39
+ let(:update_args) { args.merge :description => description,
40
+ :version => 2 }
41
+
42
+ ByReturning "an instance of #{state} report" do
43
+ patched = subject.reports.update update_args
44
+
45
+ patched.must_be_instance_of report.class
46
+ patched.description.must_equal description
47
+ end
48
+ end
49
+ end
50
+
51
+ # GET /v2/orgs/:org_id/books/:book_id/reports ? before = :description & limit = :limit & state = :state
52
+ # ending
53
+ # starting
54
+ # after
55
+ [ :active, :archived ].each do |state|
56
+ Subledger.scenarios_order.each do |scenario|
57
+ action = scenario.keys.first
58
+ expectations = scenario[action]
59
+
60
+ RespondsTo "reports.collect :action => #{action}, :state => #{state}" do
61
+ let(:reports) { factory.create_report_collection state }
62
+ let(:item ) { reports[2] }
63
+ let(:limit ) { 2 }
64
+ let(:collection) { subject.reports.collect args }
65
+ let(:klass ) { item.class }
66
+
67
+ let(:args) { { :action => action,
68
+ :description => item.description,
69
+ :state => state,
70
+ :limit => limit } }
71
+
72
+ When 'not given a block' do
73
+ ByReturning "a list of #{state} reports" do
74
+ collection.length.must_equal limit
75
+ end
76
+ end
77
+
78
+ When 'given a block' do
79
+ ByYielding "a list of #{state} reports" do
80
+ count = 0
81
+
82
+ collection.each do |report|
83
+ expectation = expectations[count]
84
+
85
+ report.description.must_equal expectation
86
+
87
+ report.must_be_instance_of klass
88
+
89
+ count += 1
90
+ end
91
+
92
+ count.must_equal limit
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
98
+
99
+ # GET /reports ? preceding = :book_id & limit = :limit & state = :state
100
+ # following = :book_id & limit = :limit & state = :state
101
+ [ :active, :archived ].each do |state|
102
+ Subledger.scenarios_id.each do |scenario|
103
+ action = scenario.keys.first
104
+ expectations = scenario[action]
105
+
106
+ RespondsTo "reports.collect :action => #{action}" do
107
+ let(:reports) { factory.create_report_collection state }
108
+ let(:item ) { reports[2] }
109
+ let(:limit ) { 2 }
110
+ let(:collection) { subject.reports.collect args }
111
+ let(:klass ) { item.class }
112
+
113
+ let(:args) { { :action => action,
114
+ :id => item.id,
115
+ :state => state,
116
+ :limit => limit } }
117
+
118
+ When 'not given a block' do
119
+ ByReturning "a list of #{state} reports" do
120
+ collection.length.must_equal limit
121
+ end
122
+ end
123
+
124
+ When 'given a block' do
125
+ ByYielding "a list of #{state} reports" do
126
+ count = 0
127
+
128
+ collection.each do |report|
129
+ expectation = expectations[count]
130
+
131
+ report.description.must_equal expectation
132
+
133
+ report.must_be_instance_of klass
134
+
135
+ count += 1
136
+ end
137
+
138
+ count.must_equal limit
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
144
+
145
+ # GET /v1/orgs/:org_id/books/:book_id/reports ? before = :description & limit = :limit & state = :state
146
+ # ending
147
+ # starting
148
+ # after
149
+ # Test collects with large number of items
150
+ [ :active ].each do |state|
151
+ Subledger.scenarios_order.each do |scenario|
152
+ action = scenario.keys.first
153
+ expectations = scenario[action]
154
+
155
+ RespondsTo "reports.collect :action => #{action}, :state => #{state}" do
156
+ let(:reports ) { factory.create_large_report_collection state }
157
+
158
+ let(:item ) { reports[100] }
159
+ let(:limit ) { 100 }
160
+ let(:collection) { subject.reports.collect args }
161
+ let(:klass ) { item.class }
162
+
163
+ let(:args) { { :action => action,
164
+ :description => item.description,
165
+ :state => state,
166
+ :limit => limit } }
167
+
168
+ When 'not given a block' do
169
+ ByReturning "a list of #{state} reports" do
170
+ collection.length.must_equal limit
171
+ end
172
+ end
173
+
174
+ When 'given a block' do
175
+ ByYielding "a list of #{state} reports" do
176
+ count = 0
177
+
178
+ collection.each do |report|
179
+ report.must_be_instance_of klass
180
+
181
+ count += 1
182
+ end
183
+
184
+ count.must_equal limit
185
+ end
186
+ end
187
+ end
188
+ end
189
+ end
190
+
191
+ # GET /v1/orgs/:org_id/books/:book_id/reports ? preceding = :id & limit = :limit & state = :state
192
+ # following = :id
193
+ # Test collects with large number of items
194
+ [ :active ].each do |state|
195
+ Subledger.scenarios_id.each do |scenario|
196
+ action = scenario.keys.first
197
+ expectations = scenario[action]
198
+
199
+ RespondsTo "reports.collect :action => #{action}, :state => #{state}" do
200
+ let(:reports ) { factory.create_large_report_collection state }
201
+
202
+ let(:item ) { reports[100] }
203
+ let(:limit ) { 100 }
204
+ let(:collection) { subject.reports.collect args }
205
+ let(:klass ) { item.class }
206
+
207
+ let(:args) { { :action => action,
208
+ :id => item.id,
209
+ :state => state,
210
+ :limit => limit } }
211
+
212
+ When 'not given a block' do
213
+ ByReturning "a list of #{state} reports" do
214
+ collection.length.must_equal limit
215
+ end
216
+ end
217
+
218
+ When 'given a block' do
219
+ ByYielding "a list of #{state} reports" do
220
+ count = 0
221
+
222
+ collection.each do |report|
223
+ report.must_be_instance_of klass
224
+
225
+ count += 1
226
+ end
227
+
228
+ count.must_equal limit
229
+ end
230
+ end
231
+ end
232
+ end
233
+ end
234
+
235
+ # POST /v1/orgs/:org_id/books/:book_id/reports/:id/archive
236
+ RespondsTo 'report_instance.archive' do
237
+ ByReturning 'an instance of Subledger::Domain::ArchivedReport' do
238
+ factory.create_report(:active).archive.
239
+ must_be_instance_of Subledger::Domain::ArchivedReport
240
+ end
241
+ end
242
+
243
+ # POST /v2/orgs/:org_id/books/:book_id/archived_reports/:id/activate
244
+ RespondsTo 'archived_report_instance.activate' do
245
+ ByReturning 'an instance of Subledger::Domain::ActiveReport' do
246
+ factory.create_report(:archived).activate.
247
+ must_be_instance_of Subledger::Domain::ActiveReport
248
+ end
249
+ end
250
+
251
+ # GET /v2/orgs/:org_id/books/:book_id/reports/:id/categories
252
+ if Subledger::STORE == :api
253
+ RespondsTo 'report_instance.categories' do
254
+ ByRaising 'a Store::ReportError' do
255
+ lambda do
256
+ factory.create_report(:active).categories
257
+ end.must_raise Subledger::Store::ReportError
258
+ end
259
+ end
260
+ else
261
+ RespondsTo 'report_instance.categories' do
262
+ ByReturning 'a collection of Subledger::Domain::ActiveCategories' do
263
+ factory.create_report(:active).categories.
264
+ must_be_instance_of Array
265
+ end
266
+ end
267
+ end
268
+
269
+ # POST /v2/orgs/:org_id/books/:book_id/reports/:id/render
270
+ RespondsTo 'report_instance.render :at => Time' do
271
+ let(:at) { Time.now.utc }
272
+
273
+ ByReturning 'an instance of Subledger::Domain::BuildingReportRendering' do
274
+ factory.create_report(:active).render(:at => at).
275
+ must_be_instance_of Subledger::Domain::BuildingReportRendering
276
+ end
277
+ end
278
+
279
+ # GET /v2/orgs/:org_id/books/:book_id/report_renderings/:id
280
+ RespondsTo 'to_json' do
281
+ let(:report ) { factory.loaded_report }
282
+ let(:at ) { Time.now }
283
+ let(:report_rendering) { report.render :at => at }
284
+ let(:rr_json ) { report_rendering.to_json }
285
+ let(:rr_hash ) { MultiJson.load rr_json }
286
+
287
+ before { report.render :at => at }
288
+
289
+ ByReturning 'a REST report' do
290
+ rr_hash.must_be_instance_of Hash
291
+ end
292
+ end
293
+ end
294
+ end
295
+ end
@@ -0,0 +1,101 @@
1
+ require 'spec_helper'
2
+
3
+ Test 'Subledger' do
4
+
5
+ let(:amount ) { '1' }
6
+
7
+ let(:args) { { } }
8
+
9
+ Module do
10
+ subject { Subledger }
11
+
12
+ RespondsTo 'new' do
13
+ When ':store is not received' do
14
+ ByReturning 'an instance of Subledger::Interface::Client' do
15
+ subject.new( args ).must_be_instance_of Subledger::Interface::Client
16
+ end
17
+ end
18
+
19
+ When ':store is received' do
20
+ And ':store is a symbol' do
21
+ ByReturning 'an instance of Subledger::Interface::Client' do
22
+ args.merge! :store => Subledger::STORE
23
+
24
+ subject.new( args ).must_be_instance_of Subledger::Interface::Client
25
+ end
26
+ end
27
+
28
+ And ':store is unknown' do
29
+ ByRaising 'a Error' do
30
+ args.merge! :store => 'unknown'
31
+
32
+ lambda { subject.new( args ) }.must_raise Subledger::Error
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ RespondsTo 'parse_time' do
39
+ ByReturning 'a UTC Time' do
40
+ [
41
+ ( Subledger::EARLIEST_TIME ).iso8601(3),
42
+ ( Subledger::LATEST_TIME ).iso8601(3),
43
+ ].each do |time_string|
44
+ subject.parse_time(
45
+ :test,
46
+ time_string ).utc?.must_equal true
47
+ end
48
+
49
+ [
50
+ nil,
51
+ '',
52
+ 'bob',
53
+ ( Subledger::EARLIEST_TIME - 1 ).iso8601(3),
54
+ ( Subledger::LATEST_TIME + 1 ).iso8601(3),
55
+ ].each do |time_string|
56
+ lambda { subject.parse_time(
57
+ :test,
58
+ time_string ) }.must_raise Subledger::DateError
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ Instance do
65
+ subject { Subledger.new args }
66
+
67
+ RespondsTo 'debit' do
68
+ When 'an amount is received' do
69
+ ByReturning 'a kind of Debit' do
70
+ subject.debit( amount ).must_be_kind_of Subledger::Domain::Debit
71
+ end
72
+ end
73
+
74
+ When 'an amount is not received' do
75
+ ByReturning 'an ancestor of Debit' do
76
+ subject.debit.ancestors.must_include Subledger::Domain::Debit
77
+ end
78
+ end
79
+ end
80
+
81
+ RespondsTo 'credit' do
82
+ When 'an amount is received' do
83
+ ByReturning 'a kind of Debit' do
84
+ subject.credit( amount ).must_be_kind_of Subledger::Domain::Credit
85
+ end
86
+ end
87
+
88
+ When 'an amount is not received' do
89
+ ByReturning 'an ancestor of Debit' do
90
+ subject.credit.ancestors.must_include Subledger::Domain::Credit
91
+ end
92
+ end
93
+ end
94
+
95
+ RespondsTo 'zero' do
96
+ ByReturning 'a kind of Zero' do
97
+ subject.zero( 0 ).must_be_instance_of Subledger::Domain::Zero
98
+ end
99
+ end
100
+ end
101
+ end
data/subledger.gemspec ADDED
@@ -0,0 +1,52 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require File.expand_path('../lib/subledger/version', __FILE__)
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.authors = [ 'Loren Hale', 'Tom Mornini' ]
7
+ gem.email = 'admin@subledger.com'
8
+ gem.description = 'Subledger client gem'
9
+ gem.summary = 'Ruby client gem for accessing the Subledger API'
10
+ gem.homepage = 'http://subledger.com'
11
+
12
+ gem.license = 'BSD 3-Clause'
13
+
14
+ gem.files = [ ]
15
+
16
+ gem.files << [ '.gitignore',
17
+ 'LICENSE.txt',
18
+ 'subledger.gemspec',
19
+ 'Rakefile',
20
+ 'README.md' ]
21
+
22
+
23
+ gem.bindir = 'bin'
24
+ gem.executables = 'subledger'
25
+
26
+ gem.files << [ 'lib/subledger.rb' ]
27
+
28
+ gem.files << Dir.glob( 'lib/subledger/*.rb' )
29
+
30
+ gem.files << Dir.glob( 'lib/subledger/domain/**/*.rb' )
31
+
32
+ gem.files << Dir.glob( 'lib/subledger/interface/**/*.rb' )
33
+
34
+ gem.files << 'lib/subledger/store/api.rb'
35
+ gem.files << Dir.glob( 'lib/subledger/store/api/**/*.rb' )
36
+
37
+ gem.files << Dir.glob( 'spec/*.rb' )
38
+
39
+ gem.files << Dir.glob( 'spec/domain/**/*.rb' )
40
+ gem.files << Dir.glob( 'spec/interface/**/*.rb' )
41
+ gem.files << Dir.glob( 'spec/store/**/*.rb' )
42
+
43
+ gem.test_files = gem.files.grep /spec[.]rb/
44
+
45
+ gem.name = 'subledger'
46
+ gem.version = Subledger::VERSION
47
+
48
+ gem.add_runtime_dependency 'faraday_middleware', '~> 0.9.0'
49
+ gem.add_runtime_dependency 'multi_json', '~> 1.9.0'
50
+ gem.add_runtime_dependency 'grape-entity', '~> 0.4.0'
51
+ gem.add_runtime_dependency 'bcrypt', '~> 3.1.0'
52
+ end
metadata ADDED
@@ -0,0 +1,205 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: subledger
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.7.7
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Loren Hale
9
+ - Tom Mornini
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2014-11-06 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: faraday_middleware
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: 0.9.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: 0.9.0
31
+ - !ruby/object:Gem::Dependency
32
+ name: multi_json
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ~>
37
+ - !ruby/object:Gem::Version
38
+ version: 1.9.0
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 1.9.0
47
+ - !ruby/object:Gem::Dependency
48
+ name: grape-entity
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 0.4.0
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: 0.4.0
63
+ - !ruby/object:Gem::Dependency
64
+ name: bcrypt
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ~>
69
+ - !ruby/object:Gem::Version
70
+ version: 3.1.0
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ~>
77
+ - !ruby/object:Gem::Version
78
+ version: 3.1.0
79
+ description: Subledger client gem
80
+ email: admin@subledger.com
81
+ executables:
82
+ - subledger
83
+ extensions: []
84
+ extra_rdoc_files: []
85
+ files:
86
+ - .gitignore
87
+ - LICENSE.txt
88
+ - subledger.gemspec
89
+ - Rakefile
90
+ - README.md
91
+ - bin/subledger
92
+ - lib/subledger.rb
93
+ - lib/subledger/actor.rb
94
+ - lib/subledger/collection_name.rb
95
+ - lib/subledger/domain.rb
96
+ - lib/subledger/exception_handler.rb
97
+ - lib/subledger/interface.rb
98
+ - lib/subledger/path.rb
99
+ - lib/subledger/rest.rb
100
+ - lib/subledger/server.rb
101
+ - lib/subledger/store.rb
102
+ - lib/subledger/supervisor.rb
103
+ - lib/subledger/uuid.rb
104
+ - lib/subledger/version.rb
105
+ - lib/subledger/domain/account.rb
106
+ - lib/subledger/domain/balance.rb
107
+ - lib/subledger/domain/book.rb
108
+ - lib/subledger/domain/category.rb
109
+ - lib/subledger/domain/control.rb
110
+ - lib/subledger/domain/formatters.rb
111
+ - lib/subledger/domain/identity.rb
112
+ - lib/subledger/domain/journal_entry.rb
113
+ - lib/subledger/domain/key.rb
114
+ - lib/subledger/domain/line.rb
115
+ - lib/subledger/domain/org.rb
116
+ - lib/subledger/domain/report.rb
117
+ - lib/subledger/domain/report_rendering.rb
118
+ - lib/subledger/domain/roles/activatable.rb
119
+ - lib/subledger/domain/roles/archivable.rb
120
+ - lib/subledger/domain/roles/attributable.rb
121
+ - lib/subledger/domain/roles/collectable.rb
122
+ - lib/subledger/domain/roles/creatable.rb
123
+ - lib/subledger/domain/roles/describable.rb
124
+ - lib/subledger/domain/roles/describable_report_rendering.rb
125
+ - lib/subledger/domain/roles/identifiable.rb
126
+ - lib/subledger/domain/roles/postable.rb
127
+ - lib/subledger/domain/roles/progressable.rb
128
+ - lib/subledger/domain/roles/readable.rb
129
+ - lib/subledger/domain/roles/restable.rb
130
+ - lib/subledger/domain/roles/storable.rb
131
+ - lib/subledger/domain/roles/timeable.rb
132
+ - lib/subledger/domain/roles/updatable.rb
133
+ - lib/subledger/domain/roles/versionable.rb
134
+ - lib/subledger/domain/roles.rb
135
+ - lib/subledger/domain/value/credit.rb
136
+ - lib/subledger/domain/value/debit.rb
137
+ - lib/subledger/domain/value/zero.rb
138
+ - lib/subledger/domain/value.rb
139
+ - lib/subledger/interface/client.rb
140
+ - lib/subledger/interface/dispatcher.rb
141
+ - lib/subledger/store/api.rb
142
+ - lib/subledger/store/api/errors.rb
143
+ - lib/subledger/store/api/roles/activate.rb
144
+ - lib/subledger/store/api/roles/archive.rb
145
+ - lib/subledger/store/api/roles/balance.rb
146
+ - lib/subledger/store/api/roles/categories.rb
147
+ - lib/subledger/store/api/roles/collect.rb
148
+ - lib/subledger/store/api/roles/create.rb
149
+ - lib/subledger/store/api/roles/create_and_post.rb
150
+ - lib/subledger/store/api/roles/create_identity.rb
151
+ - lib/subledger/store/api/roles/create_line.rb
152
+ - lib/subledger/store/api/roles/first_and_last_line.rb
153
+ - lib/subledger/store/api/roles/post.rb
154
+ - lib/subledger/store/api/roles/progress.rb
155
+ - lib/subledger/store/api/roles/read.rb
156
+ - lib/subledger/store/api/roles/reports.rb
157
+ - lib/subledger/store/api/roles/update.rb
158
+ - lib/subledger/store/api/store.rb
159
+ - spec/spec_helper.rb
160
+ - spec/subledger_account_spec.rb
161
+ - spec/subledger_book_spec.rb
162
+ - spec/subledger_category_spec.rb
163
+ - spec/subledger_control_spec.rb
164
+ - spec/subledger_identity_spec.rb
165
+ - spec/subledger_journal_entry_spec.rb
166
+ - spec/subledger_key_spec.rb
167
+ - spec/subledger_org_spec.rb
168
+ - spec/subledger_report_spec.rb
169
+ - spec/subledger_spec.rb
170
+ homepage: http://subledger.com
171
+ licenses:
172
+ - BSD 3-Clause
173
+ post_install_message:
174
+ rdoc_options: []
175
+ require_paths:
176
+ - lib
177
+ required_ruby_version: !ruby/object:Gem::Requirement
178
+ none: false
179
+ requirements:
180
+ - - ! '>='
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
183
+ required_rubygems_version: !ruby/object:Gem::Requirement
184
+ none: false
185
+ requirements:
186
+ - - ! '>='
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ requirements: []
190
+ rubyforge_project:
191
+ rubygems_version: 1.8.23.2
192
+ signing_key:
193
+ specification_version: 3
194
+ summary: Ruby client gem for accessing the Subledger API
195
+ test_files:
196
+ - spec/subledger_account_spec.rb
197
+ - spec/subledger_book_spec.rb
198
+ - spec/subledger_category_spec.rb
199
+ - spec/subledger_control_spec.rb
200
+ - spec/subledger_identity_spec.rb
201
+ - spec/subledger_journal_entry_spec.rb
202
+ - spec/subledger_key_spec.rb
203
+ - spec/subledger_org_spec.rb
204
+ - spec/subledger_report_spec.rb
205
+ - spec/subledger_spec.rb