double_entry 0.1.0 → 0.2.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.
- data/README.md +16 -14
- data/lib/double_entry.rb +9 -62
- data/lib/double_entry/account.rb +5 -1
- data/lib/double_entry/configuration.rb +21 -0
- data/lib/double_entry/reporting.rb +51 -0
- data/lib/double_entry/{aggregate.rb → reporting/aggregate.rb} +9 -7
- data/lib/double_entry/{aggregate_array.rb → reporting/aggregate_array.rb} +3 -1
- data/lib/double_entry/{day_range.rb → reporting/day_range.rb} +2 -0
- data/lib/double_entry/{hour_range.rb → reporting/hour_range.rb} +2 -0
- data/lib/double_entry/{line_aggregate.rb → reporting/line_aggregate.rb} +4 -2
- data/lib/double_entry/{month_range.rb → reporting/month_range.rb} +4 -2
- data/lib/double_entry/{time_range.rb → reporting/time_range.rb} +7 -5
- data/lib/double_entry/{time_range_array.rb → reporting/time_range_array.rb} +2 -0
- data/lib/double_entry/{week_range.rb → reporting/week_range.rb} +3 -1
- data/lib/double_entry/{year_range.rb → reporting/year_range.rb} +4 -3
- data/lib/double_entry/transfer.rb +4 -0
- data/lib/double_entry/validation.rb +1 -0
- data/lib/double_entry/{line_check.rb → validation/line_check.rb} +2 -0
- data/lib/double_entry/version.rb +1 -1
- data/script/jack_hammer +21 -16
- data/spec/double_entry/account_spec.rb +9 -0
- data/spec/double_entry/configuration_spec.rb +23 -0
- data/spec/double_entry/locking_spec.rb +24 -13
- data/spec/double_entry/{aggregate_array_spec.rb → reporting/aggregate_array_spec.rb} +2 -2
- data/spec/double_entry/reporting/aggregate_spec.rb +171 -0
- data/spec/double_entry/reporting/line_aggregate_spec.rb +10 -0
- data/spec/double_entry/{month_range_spec.rb → reporting/month_range_spec.rb} +23 -21
- data/spec/double_entry/{time_range_array_spec.rb → reporting/time_range_array_spec.rb} +41 -39
- data/spec/double_entry/{time_range_spec.rb → reporting/time_range_spec.rb} +10 -9
- data/spec/double_entry/{week_range_spec.rb → reporting/week_range_spec.rb} +26 -25
- data/spec/double_entry/reporting_spec.rb +24 -0
- data/spec/double_entry/transfer_spec.rb +17 -0
- data/spec/double_entry/{line_check_spec.rb → validation/line_check_spec.rb} +17 -16
- data/spec/double_entry_spec.rb +409 -0
- data/spec/support/accounts.rb +16 -17
- metadata +70 -35
- checksums.yaml +0 -15
- data/spec/double_entry/aggregate_spec.rb +0 -168
- data/spec/double_entry/double_entry_spec.rb +0 -391
- data/spec/double_entry/line_aggregate_spec.rb +0 -8
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: double_entry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Anthony Sellitti
|
@@ -15,11 +16,12 @@ authors:
|
|
15
16
|
autorequire:
|
16
17
|
bindir: bin
|
17
18
|
cert_chain: []
|
18
|
-
date: 2014-06-
|
19
|
+
date: 2014-06-28 00:00:00.000000000 Z
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: money
|
22
23
|
requirement: !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
23
25
|
requirements:
|
24
26
|
- - ! '>='
|
25
27
|
- !ruby/object:Gem::Version
|
@@ -27,6 +29,7 @@ dependencies:
|
|
27
29
|
type: :runtime
|
28
30
|
prerelease: false
|
29
31
|
version_requirements: !ruby/object:Gem::Requirement
|
32
|
+
none: false
|
30
33
|
requirements:
|
31
34
|
- - ! '>='
|
32
35
|
- !ruby/object:Gem::Version
|
@@ -34,6 +37,7 @@ dependencies:
|
|
34
37
|
- !ruby/object:Gem::Dependency
|
35
38
|
name: encapsulate_as_money
|
36
39
|
requirement: !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
37
41
|
requirements:
|
38
42
|
- - ! '>='
|
39
43
|
- !ruby/object:Gem::Version
|
@@ -41,6 +45,7 @@ dependencies:
|
|
41
45
|
type: :runtime
|
42
46
|
prerelease: false
|
43
47
|
version_requirements: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
44
49
|
requirements:
|
45
50
|
- - ! '>='
|
46
51
|
- !ruby/object:Gem::Version
|
@@ -48,6 +53,7 @@ dependencies:
|
|
48
53
|
- !ruby/object:Gem::Dependency
|
49
54
|
name: activerecord
|
50
55
|
requirement: !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
51
57
|
requirements:
|
52
58
|
- - ! '>='
|
53
59
|
- !ruby/object:Gem::Version
|
@@ -55,6 +61,7 @@ dependencies:
|
|
55
61
|
type: :runtime
|
56
62
|
prerelease: false
|
57
63
|
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
58
65
|
requirements:
|
59
66
|
- - ! '>='
|
60
67
|
- !ruby/object:Gem::Version
|
@@ -62,6 +69,7 @@ dependencies:
|
|
62
69
|
- !ruby/object:Gem::Dependency
|
63
70
|
name: activesupport
|
64
71
|
requirement: !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
65
73
|
requirements:
|
66
74
|
- - ! '>='
|
67
75
|
- !ruby/object:Gem::Version
|
@@ -69,6 +77,7 @@ dependencies:
|
|
69
77
|
type: :runtime
|
70
78
|
prerelease: false
|
71
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
72
81
|
requirements:
|
73
82
|
- - ! '>='
|
74
83
|
- !ruby/object:Gem::Version
|
@@ -76,6 +85,7 @@ dependencies:
|
|
76
85
|
- !ruby/object:Gem::Dependency
|
77
86
|
name: railties
|
78
87
|
requirement: !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
79
89
|
requirements:
|
80
90
|
- - ! '>='
|
81
91
|
- !ruby/object:Gem::Version
|
@@ -83,6 +93,7 @@ dependencies:
|
|
83
93
|
type: :runtime
|
84
94
|
prerelease: false
|
85
95
|
version_requirements: !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
86
97
|
requirements:
|
87
98
|
- - ! '>='
|
88
99
|
- !ruby/object:Gem::Version
|
@@ -90,6 +101,7 @@ dependencies:
|
|
90
101
|
- !ruby/object:Gem::Dependency
|
91
102
|
name: rake
|
92
103
|
requirement: !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
93
105
|
requirements:
|
94
106
|
- - ! '>='
|
95
107
|
- !ruby/object:Gem::Version
|
@@ -97,6 +109,7 @@ dependencies:
|
|
97
109
|
type: :development
|
98
110
|
prerelease: false
|
99
111
|
version_requirements: !ruby/object:Gem::Requirement
|
112
|
+
none: false
|
100
113
|
requirements:
|
101
114
|
- - ! '>='
|
102
115
|
- !ruby/object:Gem::Version
|
@@ -104,6 +117,7 @@ dependencies:
|
|
104
117
|
- !ruby/object:Gem::Dependency
|
105
118
|
name: mysql2
|
106
119
|
requirement: !ruby/object:Gem::Requirement
|
120
|
+
none: false
|
107
121
|
requirements:
|
108
122
|
- - ! '>='
|
109
123
|
- !ruby/object:Gem::Version
|
@@ -111,6 +125,7 @@ dependencies:
|
|
111
125
|
type: :development
|
112
126
|
prerelease: false
|
113
127
|
version_requirements: !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
114
129
|
requirements:
|
115
130
|
- - ! '>='
|
116
131
|
- !ruby/object:Gem::Version
|
@@ -118,6 +133,7 @@ dependencies:
|
|
118
133
|
- !ruby/object:Gem::Dependency
|
119
134
|
name: pg
|
120
135
|
requirement: !ruby/object:Gem::Requirement
|
136
|
+
none: false
|
121
137
|
requirements:
|
122
138
|
- - ! '>='
|
123
139
|
- !ruby/object:Gem::Version
|
@@ -125,6 +141,7 @@ dependencies:
|
|
125
141
|
type: :development
|
126
142
|
prerelease: false
|
127
143
|
version_requirements: !ruby/object:Gem::Requirement
|
144
|
+
none: false
|
128
145
|
requirements:
|
129
146
|
- - ! '>='
|
130
147
|
- !ruby/object:Gem::Version
|
@@ -132,6 +149,7 @@ dependencies:
|
|
132
149
|
- !ruby/object:Gem::Dependency
|
133
150
|
name: rspec
|
134
151
|
requirement: !ruby/object:Gem::Requirement
|
152
|
+
none: false
|
135
153
|
requirements:
|
136
154
|
- - ! '>='
|
137
155
|
- !ruby/object:Gem::Version
|
@@ -139,6 +157,7 @@ dependencies:
|
|
139
157
|
type: :development
|
140
158
|
prerelease: false
|
141
159
|
version_requirements: !ruby/object:Gem::Requirement
|
160
|
+
none: false
|
142
161
|
requirements:
|
143
162
|
- - ! '>='
|
144
163
|
- !ruby/object:Gem::Version
|
@@ -146,6 +165,7 @@ dependencies:
|
|
146
165
|
- !ruby/object:Gem::Dependency
|
147
166
|
name: rspec-its
|
148
167
|
requirement: !ruby/object:Gem::Requirement
|
168
|
+
none: false
|
149
169
|
requirements:
|
150
170
|
- - ! '>='
|
151
171
|
- !ruby/object:Gem::Version
|
@@ -153,6 +173,7 @@ dependencies:
|
|
153
173
|
type: :development
|
154
174
|
prerelease: false
|
155
175
|
version_requirements: !ruby/object:Gem::Requirement
|
176
|
+
none: false
|
156
177
|
requirements:
|
157
178
|
- - ! '>='
|
158
179
|
- !ruby/object:Gem::Version
|
@@ -160,6 +181,7 @@ dependencies:
|
|
160
181
|
- !ruby/object:Gem::Dependency
|
161
182
|
name: database_cleaner
|
162
183
|
requirement: !ruby/object:Gem::Requirement
|
184
|
+
none: false
|
163
185
|
requirements:
|
164
186
|
- - ! '>='
|
165
187
|
- !ruby/object:Gem::Version
|
@@ -167,6 +189,7 @@ dependencies:
|
|
167
189
|
type: :development
|
168
190
|
prerelease: false
|
169
191
|
version_requirements: !ruby/object:Gem::Requirement
|
192
|
+
none: false
|
170
193
|
requirements:
|
171
194
|
- - ! '>='
|
172
195
|
- !ruby/object:Gem::Version
|
@@ -174,6 +197,7 @@ dependencies:
|
|
174
197
|
- !ruby/object:Gem::Dependency
|
175
198
|
name: generator_spec
|
176
199
|
requirement: !ruby/object:Gem::Requirement
|
200
|
+
none: false
|
177
201
|
requirements:
|
178
202
|
- - ! '>='
|
179
203
|
- !ruby/object:Gem::Version
|
@@ -181,6 +205,7 @@ dependencies:
|
|
181
205
|
type: :development
|
182
206
|
prerelease: false
|
183
207
|
version_requirements: !ruby/object:Gem::Requirement
|
208
|
+
none: false
|
184
209
|
requirements:
|
185
210
|
- - ! '>='
|
186
211
|
- !ruby/object:Gem::Version
|
@@ -188,6 +213,7 @@ dependencies:
|
|
188
213
|
- !ruby/object:Gem::Dependency
|
189
214
|
name: machinist
|
190
215
|
requirement: !ruby/object:Gem::Requirement
|
216
|
+
none: false
|
191
217
|
requirements:
|
192
218
|
- - ! '>='
|
193
219
|
- !ruby/object:Gem::Version
|
@@ -195,6 +221,7 @@ dependencies:
|
|
195
221
|
type: :development
|
196
222
|
prerelease: false
|
197
223
|
version_requirements: !ruby/object:Gem::Requirement
|
224
|
+
none: false
|
198
225
|
requirements:
|
199
226
|
- - ! '>='
|
200
227
|
- !ruby/object:Gem::Version
|
@@ -202,6 +229,7 @@ dependencies:
|
|
202
229
|
- !ruby/object:Gem::Dependency
|
203
230
|
name: timecop
|
204
231
|
requirement: !ruby/object:Gem::Requirement
|
232
|
+
none: false
|
205
233
|
requirements:
|
206
234
|
- - ! '>='
|
207
235
|
- !ruby/object:Gem::Version
|
@@ -209,6 +237,7 @@ dependencies:
|
|
209
237
|
type: :development
|
210
238
|
prerelease: false
|
211
239
|
version_requirements: !ruby/object:Gem::Requirement
|
240
|
+
none: false
|
212
241
|
requirements:
|
213
242
|
- - ! '>='
|
214
243
|
- !ruby/object:Gem::Version
|
@@ -243,23 +272,25 @@ files:
|
|
243
272
|
- lib/double_entry.rb
|
244
273
|
- lib/double_entry/account.rb
|
245
274
|
- lib/double_entry/account_balance.rb
|
246
|
-
- lib/double_entry/aggregate.rb
|
247
|
-
- lib/double_entry/aggregate_array.rb
|
248
275
|
- lib/double_entry/configurable.rb
|
249
|
-
- lib/double_entry/
|
250
|
-
- lib/double_entry/hour_range.rb
|
276
|
+
- lib/double_entry/configuration.rb
|
251
277
|
- lib/double_entry/line.rb
|
252
|
-
- lib/double_entry/line_aggregate.rb
|
253
|
-
- lib/double_entry/line_check.rb
|
254
278
|
- lib/double_entry/locking.rb
|
255
|
-
- lib/double_entry/month_range.rb
|
256
279
|
- lib/double_entry/reporting.rb
|
257
|
-
- lib/double_entry/
|
258
|
-
- lib/double_entry/
|
280
|
+
- lib/double_entry/reporting/aggregate.rb
|
281
|
+
- lib/double_entry/reporting/aggregate_array.rb
|
282
|
+
- lib/double_entry/reporting/day_range.rb
|
283
|
+
- lib/double_entry/reporting/hour_range.rb
|
284
|
+
- lib/double_entry/reporting/line_aggregate.rb
|
285
|
+
- lib/double_entry/reporting/month_range.rb
|
286
|
+
- lib/double_entry/reporting/time_range.rb
|
287
|
+
- lib/double_entry/reporting/time_range_array.rb
|
288
|
+
- lib/double_entry/reporting/week_range.rb
|
289
|
+
- lib/double_entry/reporting/year_range.rb
|
259
290
|
- lib/double_entry/transfer.rb
|
291
|
+
- lib/double_entry/validation.rb
|
292
|
+
- lib/double_entry/validation/line_check.rb
|
260
293
|
- lib/double_entry/version.rb
|
261
|
-
- lib/double_entry/week_range.rb
|
262
|
-
- lib/double_entry/year_range.rb
|
263
294
|
- lib/generators/double_entry/install/install_generator.rb
|
264
295
|
- lib/generators/double_entry/install/templates/migration.rb
|
265
296
|
- script/jack_hammer
|
@@ -267,18 +298,20 @@ files:
|
|
267
298
|
- spec/active_record/locking_extensions_spec.rb
|
268
299
|
- spec/double_entry/account_balance_spec.rb
|
269
300
|
- spec/double_entry/account_spec.rb
|
270
|
-
- spec/double_entry/
|
271
|
-
- spec/double_entry/aggregate_spec.rb
|
272
|
-
- spec/double_entry/double_entry_spec.rb
|
273
|
-
- spec/double_entry/line_aggregate_spec.rb
|
274
|
-
- spec/double_entry/line_check_spec.rb
|
301
|
+
- spec/double_entry/configuration_spec.rb
|
275
302
|
- spec/double_entry/line_spec.rb
|
276
303
|
- spec/double_entry/locking_spec.rb
|
277
|
-
- spec/double_entry/
|
304
|
+
- spec/double_entry/reporting/aggregate_array_spec.rb
|
305
|
+
- spec/double_entry/reporting/aggregate_spec.rb
|
306
|
+
- spec/double_entry/reporting/line_aggregate_spec.rb
|
307
|
+
- spec/double_entry/reporting/month_range_spec.rb
|
308
|
+
- spec/double_entry/reporting/time_range_array_spec.rb
|
309
|
+
- spec/double_entry/reporting/time_range_spec.rb
|
310
|
+
- spec/double_entry/reporting/week_range_spec.rb
|
278
311
|
- spec/double_entry/reporting_spec.rb
|
279
|
-
- spec/double_entry/
|
280
|
-
- spec/double_entry/
|
281
|
-
- spec/
|
312
|
+
- spec/double_entry/transfer_spec.rb
|
313
|
+
- spec/double_entry/validation/line_check_spec.rb
|
314
|
+
- spec/double_entry_spec.rb
|
282
315
|
- spec/generators/double_entry/install/install_generator_spec.rb
|
283
316
|
- spec/spec_helper.rb
|
284
317
|
- spec/support/accounts.rb
|
@@ -290,43 +323,46 @@ files:
|
|
290
323
|
- spec/support/schema.rb
|
291
324
|
homepage: https://github.com/envato/double_entry
|
292
325
|
licenses: []
|
293
|
-
metadata: {}
|
294
326
|
post_install_message:
|
295
327
|
rdoc_options: []
|
296
328
|
require_paths:
|
297
329
|
- lib
|
298
330
|
required_ruby_version: !ruby/object:Gem::Requirement
|
331
|
+
none: false
|
299
332
|
requirements:
|
300
333
|
- - ! '>='
|
301
334
|
- !ruby/object:Gem::Version
|
302
335
|
version: '0'
|
303
336
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
337
|
+
none: false
|
304
338
|
requirements:
|
305
339
|
- - ! '>='
|
306
340
|
- !ruby/object:Gem::Version
|
307
341
|
version: '0'
|
308
342
|
requirements: []
|
309
343
|
rubyforge_project:
|
310
|
-
rubygems_version:
|
344
|
+
rubygems_version: 1.8.23
|
311
345
|
signing_key:
|
312
|
-
specification_version:
|
346
|
+
specification_version: 3
|
313
347
|
summary: Tools to build your double entry financial ledger
|
314
348
|
test_files:
|
315
349
|
- spec/active_record/locking_extensions_spec.rb
|
316
350
|
- spec/double_entry/account_balance_spec.rb
|
317
351
|
- spec/double_entry/account_spec.rb
|
318
|
-
- spec/double_entry/
|
319
|
-
- spec/double_entry/aggregate_spec.rb
|
320
|
-
- spec/double_entry/double_entry_spec.rb
|
321
|
-
- spec/double_entry/line_aggregate_spec.rb
|
322
|
-
- spec/double_entry/line_check_spec.rb
|
352
|
+
- spec/double_entry/configuration_spec.rb
|
323
353
|
- spec/double_entry/line_spec.rb
|
324
354
|
- spec/double_entry/locking_spec.rb
|
325
|
-
- spec/double_entry/
|
355
|
+
- spec/double_entry/reporting/aggregate_array_spec.rb
|
356
|
+
- spec/double_entry/reporting/aggregate_spec.rb
|
357
|
+
- spec/double_entry/reporting/line_aggregate_spec.rb
|
358
|
+
- spec/double_entry/reporting/month_range_spec.rb
|
359
|
+
- spec/double_entry/reporting/time_range_array_spec.rb
|
360
|
+
- spec/double_entry/reporting/time_range_spec.rb
|
361
|
+
- spec/double_entry/reporting/week_range_spec.rb
|
326
362
|
- spec/double_entry/reporting_spec.rb
|
327
|
-
- spec/double_entry/
|
328
|
-
- spec/double_entry/
|
329
|
-
- spec/
|
363
|
+
- spec/double_entry/transfer_spec.rb
|
364
|
+
- spec/double_entry/validation/line_check_spec.rb
|
365
|
+
- spec/double_entry_spec.rb
|
330
366
|
- spec/generators/double_entry/install/install_generator_spec.rb
|
331
367
|
- spec/spec_helper.rb
|
332
368
|
- spec/support/accounts.rb
|
@@ -336,4 +372,3 @@ test_files:
|
|
336
372
|
- spec/support/double_entry_spec_helper.rb
|
337
373
|
- spec/support/reporting_configuration.rb
|
338
374
|
- spec/support/schema.rb
|
339
|
-
has_rdoc:
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
YTg1NDhmNWRkMDMzNDdmNTU1Mzc4MDc1ODlmZWY1Y2I3Y2VlNjlhMw==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
ZDhhYTM4ZGE5YWM2Mzg2M2Q3NjMzM2Q3Zjc2NjQzODYwNWQ0ZDQwNA==
|
7
|
-
SHA512:
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
YzM2YTJiYTliMTEyZGIyOTAzNTU3ZmM2ZTVjMDg5NmJhYTllZjcxZTE3OGM0
|
10
|
-
OWViZDY1OTFlM2Y2MjZjNjNjZjIzZWFlNjMwY2E2Zjg4MDlkYWMzNGU5YzY4
|
11
|
-
NDA0NzY0ZTk1ZTFkNTI3ZTZmMmIyMGMxNWM1OGIyYWFhNTZjYzI=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
YjAzZGVlMDJlOWQxMWRjM2ViYWY0ZGQ1NmMxNmY0MTNhNTk5NmM2OWEyM2Rj
|
14
|
-
YmJlMzNlNjM2YmVkZmQyYjVjZWViNzljNjE2NDQyNzI4NWQwNjAzNzM2YWZj
|
15
|
-
ZTdiMzBmOWFkMDc2MmQ0NDkwMmIwOGY2YjY2MWUxMzQzZGYzMTU=
|
@@ -1,168 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe DoubleEntry::Aggregate do
|
5
|
-
|
6
|
-
let(:user) { User.make! }
|
7
|
-
|
8
|
-
before do
|
9
|
-
# Thursday
|
10
|
-
Timecop.freeze Time.local(2009, 10, 1) do
|
11
|
-
perform_deposit user, 20_00
|
12
|
-
end
|
13
|
-
|
14
|
-
# Saturday
|
15
|
-
Timecop.freeze Time.local(2009, 10, 3) do
|
16
|
-
perform_deposit user, 40_00
|
17
|
-
end
|
18
|
-
|
19
|
-
Timecop.freeze Time.local(2009, 10, 10) do
|
20
|
-
perform_deposit user, 50_00
|
21
|
-
end
|
22
|
-
Timecop.freeze Time.local(2009, 11, 1, 0, 59, 0) do
|
23
|
-
perform_deposit user, 40_00
|
24
|
-
end
|
25
|
-
Timecop.freeze Time.local(2009, 11, 1, 1, 00, 0) do
|
26
|
-
perform_deposit user, 50_00
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'should store the aggregate for quick retrieval' do
|
31
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus,
|
32
|
-
:range => DoubleEntry::TimeRange.make(:year => 2009, :month => 10))
|
33
|
-
expect(DoubleEntry::LineAggregate.count).to eq 1
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'should only store the aggregate once if it is requested more than once' do
|
37
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus,
|
38
|
-
:range => DoubleEntry::TimeRange.make(:year => 2009, :month => 9))
|
39
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus,
|
40
|
-
:range => DoubleEntry::TimeRange.make(:year => 2009, :month => 9))
|
41
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus,
|
42
|
-
:range => DoubleEntry::TimeRange.make(:year => 2009, :month => 10))
|
43
|
-
expect(DoubleEntry::LineAggregate.count).to eq 2
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'should calculate the complete year correctly' do
|
47
|
-
expect(
|
48
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus, :range => DoubleEntry::TimeRange.make(:year => 2009))
|
49
|
-
).to eq Money.new(200_00)
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'should calculate seperate months correctly' do
|
53
|
-
expect(
|
54
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus, :range => DoubleEntry::TimeRange.make(:year => 2009, :month => 10))
|
55
|
-
).to eq Money.new(110_00)
|
56
|
-
expect(
|
57
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus, :range => DoubleEntry::TimeRange.make(:year => 2009, :month => 11))
|
58
|
-
).to eq Money.new(90_00)
|
59
|
-
end
|
60
|
-
|
61
|
-
it 'should calculate seperate weeks correctly' do
|
62
|
-
# Week 40 - Mon Sep 28, 2009 to Sun Oct 4 2009
|
63
|
-
expect(
|
64
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus, :range => DoubleEntry::TimeRange.make(:year => 2009, :week => 40))
|
65
|
-
).to eq Money.new(60_00)
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'should calculate seperate days correctly' do
|
69
|
-
# 1 Nov 2009
|
70
|
-
expect(
|
71
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus, :range => DoubleEntry::TimeRange.make(:year => 2009, :week => 44, :day => 7))
|
72
|
-
).to eq Money.new(90_00)
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'should calculate seperate hours correctly' do
|
76
|
-
# 1 Nov 2009
|
77
|
-
expect(
|
78
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus, :range => DoubleEntry::TimeRange.make(:year => 2009, :week => 44, :day => 7, :hour => 0))
|
79
|
-
).to eq Money.new(40_00)
|
80
|
-
expect(
|
81
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus, :range => DoubleEntry::TimeRange.make(:year => 2009, :week => 44, :day => 7, :hour => 1))
|
82
|
-
).to eq Money.new(50_00)
|
83
|
-
end
|
84
|
-
|
85
|
-
it 'should calculate, but not store aggregates when the time range is still current' do
|
86
|
-
Timecop.freeze Time.local(2009, 11, 21) do
|
87
|
-
expect(
|
88
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus, :range => DoubleEntry::TimeRange.make(:year => 2009, :month => 11))
|
89
|
-
).to eq Money.new(90_00)
|
90
|
-
expect(DoubleEntry::LineAggregate.count).to eq 0
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
it 'should calculate, but not store aggregates when the time range is in the future' do
|
95
|
-
Timecop.freeze Time.local(2009, 11, 21) do
|
96
|
-
expect(
|
97
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus, :range => DoubleEntry::TimeRange.make(:year => 2009, :month => 12))
|
98
|
-
).to eq Money.new(0)
|
99
|
-
expect(DoubleEntry::LineAggregate.count).to eq 0
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
it 'should calculate monthly all_time ranges correctly' do
|
104
|
-
expect(
|
105
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus, :range => DoubleEntry::TimeRange.make(:year => 2009, :month => 12, :range_type => :all_time))
|
106
|
-
).to eq Money.new(200_00)
|
107
|
-
end
|
108
|
-
|
109
|
-
it 'should calculate weekly all_time ranges correctly' do
|
110
|
-
expect(
|
111
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus, :range => DoubleEntry::TimeRange.make(:year => 2009, :week => 43, :range_type => :all_time))
|
112
|
-
).to eq Money.new(110_00)
|
113
|
-
end
|
114
|
-
|
115
|
-
context 'filters' do
|
116
|
-
|
117
|
-
let(:range) { DoubleEntry::TimeRange.make(:year => 2011, :month => 10) }
|
118
|
-
|
119
|
-
class ::DoubleEntry::Line
|
120
|
-
scope :test_filter, -> { where(:amount => 10_00) }
|
121
|
-
end
|
122
|
-
|
123
|
-
before do
|
124
|
-
Timecop.freeze Time.local(2011, 10, 10) do
|
125
|
-
perform_deposit user, 10_00
|
126
|
-
end
|
127
|
-
|
128
|
-
Timecop.freeze Time.local(2011, 10, 10) do
|
129
|
-
perform_deposit user, 9_00
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
it 'saves filtered aggregations' do
|
134
|
-
expect {
|
135
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus, :range => range, :filter => [:test_filter])
|
136
|
-
}.to change { DoubleEntry::LineAggregate.count }.by 1
|
137
|
-
end
|
138
|
-
|
139
|
-
it 'saves filtered aggregation only once for a range' do
|
140
|
-
expect {
|
141
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus, :range => range, :filter => [:test_filter])
|
142
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus, :range => range, :filter => [:test_filter])
|
143
|
-
}.to change { DoubleEntry::LineAggregate.count }.by 1
|
144
|
-
end
|
145
|
-
|
146
|
-
it 'saves filtered aggregations and non filtered aggregations separately' do
|
147
|
-
expect {
|
148
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus, :range => range, :filter => [:test_filter])
|
149
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus, :range => range)
|
150
|
-
}.to change { DoubleEntry::LineAggregate.count }.by 2
|
151
|
-
end
|
152
|
-
|
153
|
-
it 'loads the correct saved aggregation' do
|
154
|
-
|
155
|
-
# cache the results for filtered and unfiltered aggregations
|
156
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus, :range => range, :filter => [:test_filter])
|
157
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus, :range => range)
|
158
|
-
|
159
|
-
# ensure a second call loads the correct cached value
|
160
|
-
expect(
|
161
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus, :range => range, :filter => [:test_filter])
|
162
|
-
).to eq Money.new(10_00)
|
163
|
-
expect(
|
164
|
-
DoubleEntry.aggregate(:sum, :savings, :bonus, :range => range)
|
165
|
-
).to eq Money.new(19_00)
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|