double_entry 0.6.0 → 0.6.1
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.
- checksums.yaml +7 -0
- data/gemfiles/Gemfile.rails-3.2.0 +1 -0
- data/lib/double_entry/line.rb +11 -2
- data/lib/double_entry/reporting/week_range.rb +10 -3
- data/lib/double_entry/version.rb +1 -1
- data/spec/double_entry/line_spec.rb +19 -0
- data/spec/double_entry/reporting/week_range_spec.rb +8 -0
- metadata +41 -73
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 872b6fa2ec70dd3783192e17d4f79139a288d859
|
4
|
+
data.tar.gz: 9b116b6617a97740ba998b8efc26fdc2a51d38e8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: dc9648ffc3737e9b8aa9b3ceb7b8fb831dd034c04eb3e9ac756c08ecf4932fe9cca416a792339d9d2dd8036aef70439ed6200b147ee513cdcd30bdfa44ea7e37
|
7
|
+
data.tar.gz: 3aa8185c00db1211e6c537a063a5b345372e98cc05987f86e54bea75f423fbd5d917685064651951bd7f6b4aa42fbdaf6088a238b83f275fcce1de551325f373
|
data/lib/double_entry/line.rb
CHANGED
@@ -28,7 +28,7 @@ module DoubleEntry
|
|
28
28
|
# ```
|
29
29
|
#
|
30
30
|
# ### lines_scope_account_created_at_idx
|
31
|
-
#
|
31
|
+
#
|
32
32
|
# ```sql
|
33
33
|
# ADD INDEX `lines_scope_account_created_at_idx` (scope, account, created_at)
|
34
34
|
# ```
|
@@ -59,10 +59,19 @@ module DoubleEntry
|
|
59
59
|
extend EncapsulateAsMoney
|
60
60
|
|
61
61
|
belongs_to :detail, :polymorphic => true
|
62
|
-
before_save :check_balance_will_not_be_sent_negative
|
63
62
|
|
64
63
|
encapsulate_as_money :amount, :balance
|
65
64
|
|
65
|
+
def save(*)
|
66
|
+
check_balance_will_not_be_sent_negative
|
67
|
+
super
|
68
|
+
end
|
69
|
+
|
70
|
+
def save!(*)
|
71
|
+
check_balance_will_not_be_sent_negative
|
72
|
+
super
|
73
|
+
end
|
74
|
+
|
66
75
|
def code=(code)
|
67
76
|
self[:code] = code.try(:to_s)
|
68
77
|
code
|
@@ -10,9 +10,16 @@ module DoubleEntry
|
|
10
10
|
class << self
|
11
11
|
|
12
12
|
def from_time(time)
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
date = time.to_date
|
14
|
+
week = date.cweek
|
15
|
+
year = date.end_of_week.year
|
16
|
+
|
17
|
+
if date.beginning_of_week.year != year
|
18
|
+
week = 1
|
19
|
+
elsif date.beginning_of_year.cwday > Date::DAYNAMES.index('Thursday')
|
20
|
+
week += 1
|
21
|
+
end
|
22
|
+
|
16
23
|
new(:year => year, :week => week)
|
17
24
|
end
|
18
25
|
|
data/lib/double_entry/version.rb
CHANGED
@@ -41,6 +41,25 @@ describe DoubleEntry::Line do
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
+
describe '#save' do
|
45
|
+
context 'when balance is sent negative' do
|
46
|
+
let(:account) {
|
47
|
+
DoubleEntry.account(:savings, :scope => '17', :positive_only => true)
|
48
|
+
}
|
49
|
+
|
50
|
+
let(:line) {
|
51
|
+
DoubleEntry::Line.new(
|
52
|
+
:balance => Money.new(-1),
|
53
|
+
:account => account,
|
54
|
+
)
|
55
|
+
}
|
56
|
+
|
57
|
+
it 'raises AccountWouldBeSentNegative exception' do
|
58
|
+
expect { line.save }.to raise_error DoubleEntry::AccountWouldBeSentNegative
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
44
63
|
it "has a table name prefixed with double_entry_" do
|
45
64
|
expect(DoubleEntry::Line.table_name).to eq "double_entry_lines"
|
46
65
|
end
|
@@ -15,6 +15,14 @@ describe WeekRange do
|
|
15
15
|
expect(range.start).to eq Time.parse("2010-12-27 00:00:00")
|
16
16
|
end
|
17
17
|
|
18
|
+
it "handles daylight savings time properly" do
|
19
|
+
Time.use_zone('America/Los_Angeles') do
|
20
|
+
time = Time.zone.parse('Mon, 10 Mar 2014')
|
21
|
+
range = WeekRange.from_time time
|
22
|
+
expect(range.start.day).to eq 10
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
18
26
|
describe "::from_time" do
|
19
27
|
subject(:from_time) { WeekRange.from_time(given_time) }
|
20
28
|
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: double_entry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
5
|
-
prerelease:
|
4
|
+
version: 0.6.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Anthony Sellitti
|
@@ -16,246 +15,216 @@ authors:
|
|
16
15
|
autorequire:
|
17
16
|
bindir: bin
|
18
17
|
cert_chain: []
|
19
|
-
date: 2014-
|
18
|
+
date: 2014-10-10 00:00:00.000000000 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
name: money
|
23
22
|
requirement: !ruby/object:Gem::Requirement
|
24
|
-
none: false
|
25
23
|
requirements:
|
26
|
-
- -
|
24
|
+
- - ">="
|
27
25
|
- !ruby/object:Gem::Version
|
28
26
|
version: 5.1.0
|
29
27
|
type: :runtime
|
30
28
|
prerelease: false
|
31
29
|
version_requirements: !ruby/object:Gem::Requirement
|
32
|
-
none: false
|
33
30
|
requirements:
|
34
|
-
- -
|
31
|
+
- - ">="
|
35
32
|
- !ruby/object:Gem::Version
|
36
33
|
version: 5.1.0
|
37
34
|
- !ruby/object:Gem::Dependency
|
38
35
|
name: encapsulate_as_money
|
39
36
|
requirement: !ruby/object:Gem::Requirement
|
40
|
-
none: false
|
41
37
|
requirements:
|
42
|
-
- -
|
38
|
+
- - ">="
|
43
39
|
- !ruby/object:Gem::Version
|
44
40
|
version: '0'
|
45
41
|
type: :runtime
|
46
42
|
prerelease: false
|
47
43
|
version_requirements: !ruby/object:Gem::Requirement
|
48
|
-
none: false
|
49
44
|
requirements:
|
50
|
-
- -
|
45
|
+
- - ">="
|
51
46
|
- !ruby/object:Gem::Version
|
52
47
|
version: '0'
|
53
48
|
- !ruby/object:Gem::Dependency
|
54
49
|
name: activerecord
|
55
50
|
requirement: !ruby/object:Gem::Requirement
|
56
|
-
none: false
|
57
51
|
requirements:
|
58
|
-
- -
|
52
|
+
- - ">="
|
59
53
|
- !ruby/object:Gem::Version
|
60
54
|
version: 3.2.9
|
61
55
|
type: :runtime
|
62
56
|
prerelease: false
|
63
57
|
version_requirements: !ruby/object:Gem::Requirement
|
64
|
-
none: false
|
65
58
|
requirements:
|
66
|
-
- -
|
59
|
+
- - ">="
|
67
60
|
- !ruby/object:Gem::Version
|
68
61
|
version: 3.2.9
|
69
62
|
- !ruby/object:Gem::Dependency
|
70
63
|
name: activesupport
|
71
64
|
requirement: !ruby/object:Gem::Requirement
|
72
|
-
none: false
|
73
65
|
requirements:
|
74
|
-
- -
|
66
|
+
- - ">="
|
75
67
|
- !ruby/object:Gem::Version
|
76
68
|
version: 3.0.0
|
77
69
|
type: :runtime
|
78
70
|
prerelease: false
|
79
71
|
version_requirements: !ruby/object:Gem::Requirement
|
80
|
-
none: false
|
81
72
|
requirements:
|
82
|
-
- -
|
73
|
+
- - ">="
|
83
74
|
- !ruby/object:Gem::Version
|
84
75
|
version: 3.0.0
|
85
76
|
- !ruby/object:Gem::Dependency
|
86
77
|
name: railties
|
87
78
|
requirement: !ruby/object:Gem::Requirement
|
88
|
-
none: false
|
89
79
|
requirements:
|
90
|
-
- -
|
80
|
+
- - ">="
|
91
81
|
- !ruby/object:Gem::Version
|
92
82
|
version: 3.0.0
|
93
83
|
type: :runtime
|
94
84
|
prerelease: false
|
95
85
|
version_requirements: !ruby/object:Gem::Requirement
|
96
|
-
none: false
|
97
86
|
requirements:
|
98
|
-
- -
|
87
|
+
- - ">="
|
99
88
|
- !ruby/object:Gem::Version
|
100
89
|
version: 3.0.0
|
101
90
|
- !ruby/object:Gem::Dependency
|
102
91
|
name: rake
|
103
92
|
requirement: !ruby/object:Gem::Requirement
|
104
|
-
none: false
|
105
93
|
requirements:
|
106
|
-
- -
|
94
|
+
- - ">="
|
107
95
|
- !ruby/object:Gem::Version
|
108
96
|
version: '0'
|
109
97
|
type: :development
|
110
98
|
prerelease: false
|
111
99
|
version_requirements: !ruby/object:Gem::Requirement
|
112
|
-
none: false
|
113
100
|
requirements:
|
114
|
-
- -
|
101
|
+
- - ">="
|
115
102
|
- !ruby/object:Gem::Version
|
116
103
|
version: '0'
|
117
104
|
- !ruby/object:Gem::Dependency
|
118
105
|
name: mysql2
|
119
106
|
requirement: !ruby/object:Gem::Requirement
|
120
|
-
none: false
|
121
107
|
requirements:
|
122
|
-
- -
|
108
|
+
- - ">="
|
123
109
|
- !ruby/object:Gem::Version
|
124
110
|
version: '0'
|
125
111
|
type: :development
|
126
112
|
prerelease: false
|
127
113
|
version_requirements: !ruby/object:Gem::Requirement
|
128
|
-
none: false
|
129
114
|
requirements:
|
130
|
-
- -
|
115
|
+
- - ">="
|
131
116
|
- !ruby/object:Gem::Version
|
132
117
|
version: '0'
|
133
118
|
- !ruby/object:Gem::Dependency
|
134
119
|
name: pg
|
135
120
|
requirement: !ruby/object:Gem::Requirement
|
136
|
-
none: false
|
137
121
|
requirements:
|
138
|
-
- -
|
122
|
+
- - ">="
|
139
123
|
- !ruby/object:Gem::Version
|
140
124
|
version: '0'
|
141
125
|
type: :development
|
142
126
|
prerelease: false
|
143
127
|
version_requirements: !ruby/object:Gem::Requirement
|
144
|
-
none: false
|
145
128
|
requirements:
|
146
|
-
- -
|
129
|
+
- - ">="
|
147
130
|
- !ruby/object:Gem::Version
|
148
131
|
version: '0'
|
149
132
|
- !ruby/object:Gem::Dependency
|
150
133
|
name: sqlite3
|
151
134
|
requirement: !ruby/object:Gem::Requirement
|
152
|
-
none: false
|
153
135
|
requirements:
|
154
|
-
- -
|
136
|
+
- - ">="
|
155
137
|
- !ruby/object:Gem::Version
|
156
138
|
version: '0'
|
157
139
|
type: :development
|
158
140
|
prerelease: false
|
159
141
|
version_requirements: !ruby/object:Gem::Requirement
|
160
|
-
none: false
|
161
142
|
requirements:
|
162
|
-
- -
|
143
|
+
- - ">="
|
163
144
|
- !ruby/object:Gem::Version
|
164
145
|
version: '0'
|
165
146
|
- !ruby/object:Gem::Dependency
|
166
147
|
name: rspec
|
167
148
|
requirement: !ruby/object:Gem::Requirement
|
168
|
-
none: false
|
169
149
|
requirements:
|
170
|
-
- -
|
150
|
+
- - ">="
|
171
151
|
- !ruby/object:Gem::Version
|
172
152
|
version: '0'
|
173
153
|
type: :development
|
174
154
|
prerelease: false
|
175
155
|
version_requirements: !ruby/object:Gem::Requirement
|
176
|
-
none: false
|
177
156
|
requirements:
|
178
|
-
- -
|
157
|
+
- - ">="
|
179
158
|
- !ruby/object:Gem::Version
|
180
159
|
version: '0'
|
181
160
|
- !ruby/object:Gem::Dependency
|
182
161
|
name: rspec-its
|
183
162
|
requirement: !ruby/object:Gem::Requirement
|
184
|
-
none: false
|
185
163
|
requirements:
|
186
|
-
- -
|
164
|
+
- - ">="
|
187
165
|
- !ruby/object:Gem::Version
|
188
166
|
version: '0'
|
189
167
|
type: :development
|
190
168
|
prerelease: false
|
191
169
|
version_requirements: !ruby/object:Gem::Requirement
|
192
|
-
none: false
|
193
170
|
requirements:
|
194
|
-
- -
|
171
|
+
- - ">="
|
195
172
|
- !ruby/object:Gem::Version
|
196
173
|
version: '0'
|
197
174
|
- !ruby/object:Gem::Dependency
|
198
175
|
name: database_cleaner
|
199
176
|
requirement: !ruby/object:Gem::Requirement
|
200
|
-
none: false
|
201
177
|
requirements:
|
202
|
-
- -
|
178
|
+
- - ">="
|
203
179
|
- !ruby/object:Gem::Version
|
204
180
|
version: '0'
|
205
181
|
type: :development
|
206
182
|
prerelease: false
|
207
183
|
version_requirements: !ruby/object:Gem::Requirement
|
208
|
-
none: false
|
209
184
|
requirements:
|
210
|
-
- -
|
185
|
+
- - ">="
|
211
186
|
- !ruby/object:Gem::Version
|
212
187
|
version: '0'
|
213
188
|
- !ruby/object:Gem::Dependency
|
214
189
|
name: generator_spec
|
215
190
|
requirement: !ruby/object:Gem::Requirement
|
216
|
-
none: false
|
217
191
|
requirements:
|
218
|
-
- -
|
192
|
+
- - ">="
|
219
193
|
- !ruby/object:Gem::Version
|
220
194
|
version: '0'
|
221
195
|
type: :development
|
222
196
|
prerelease: false
|
223
197
|
version_requirements: !ruby/object:Gem::Requirement
|
224
|
-
none: false
|
225
198
|
requirements:
|
226
|
-
- -
|
199
|
+
- - ">="
|
227
200
|
- !ruby/object:Gem::Version
|
228
201
|
version: '0'
|
229
202
|
- !ruby/object:Gem::Dependency
|
230
203
|
name: machinist
|
231
204
|
requirement: !ruby/object:Gem::Requirement
|
232
|
-
none: false
|
233
205
|
requirements:
|
234
|
-
- -
|
206
|
+
- - ">="
|
235
207
|
- !ruby/object:Gem::Version
|
236
208
|
version: '0'
|
237
209
|
type: :development
|
238
210
|
prerelease: false
|
239
211
|
version_requirements: !ruby/object:Gem::Requirement
|
240
|
-
none: false
|
241
212
|
requirements:
|
242
|
-
- -
|
213
|
+
- - ">="
|
243
214
|
- !ruby/object:Gem::Version
|
244
215
|
version: '0'
|
245
216
|
- !ruby/object:Gem::Dependency
|
246
217
|
name: timecop
|
247
218
|
requirement: !ruby/object:Gem::Requirement
|
248
|
-
none: false
|
249
219
|
requirements:
|
250
|
-
- -
|
220
|
+
- - ">="
|
251
221
|
- !ruby/object:Gem::Version
|
252
222
|
version: '0'
|
253
223
|
type: :development
|
254
224
|
prerelease: false
|
255
225
|
version_requirements: !ruby/object:Gem::Requirement
|
256
|
-
none: false
|
257
226
|
requirements:
|
258
|
-
- -
|
227
|
+
- - ">="
|
259
228
|
- !ruby/object:Gem::Version
|
260
229
|
version: '0'
|
261
230
|
description:
|
@@ -272,10 +241,10 @@ executables: []
|
|
272
241
|
extensions: []
|
273
242
|
extra_rdoc_files: []
|
274
243
|
files:
|
275
|
-
- .gitignore
|
276
|
-
- .rspec
|
277
|
-
- .travis.yml
|
278
|
-
- .yardopts
|
244
|
+
- ".gitignore"
|
245
|
+
- ".rspec"
|
246
|
+
- ".travis.yml"
|
247
|
+
- ".yardopts"
|
279
248
|
- Gemfile
|
280
249
|
- LICENSE.md
|
281
250
|
- README.md
|
@@ -343,27 +312,26 @@ files:
|
|
343
312
|
- spec/support/schema.rb
|
344
313
|
homepage: https://github.com/envato/double_entry
|
345
314
|
licenses: []
|
315
|
+
metadata: {}
|
346
316
|
post_install_message:
|
347
317
|
rdoc_options: []
|
348
318
|
require_paths:
|
349
319
|
- lib
|
350
320
|
required_ruby_version: !ruby/object:Gem::Requirement
|
351
|
-
none: false
|
352
321
|
requirements:
|
353
|
-
- -
|
322
|
+
- - ">="
|
354
323
|
- !ruby/object:Gem::Version
|
355
324
|
version: '0'
|
356
325
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
357
|
-
none: false
|
358
326
|
requirements:
|
359
|
-
- -
|
327
|
+
- - ">="
|
360
328
|
- !ruby/object:Gem::Version
|
361
329
|
version: '0'
|
362
330
|
requirements: []
|
363
331
|
rubyforge_project:
|
364
|
-
rubygems_version:
|
332
|
+
rubygems_version: 2.2.2
|
365
333
|
signing_key:
|
366
|
-
specification_version:
|
334
|
+
specification_version: 4
|
367
335
|
summary: Tools to build your double entry financial ledger
|
368
336
|
test_files:
|
369
337
|
- spec/active_record/locking_extensions_spec.rb
|