sequel_bitemporal 0.5.1 → 0.5.2
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/lib/sequel/plugins/bitemporal.rb +25 -3
- data/sequel_bitemporal.gemspec +1 -1
- data/spec/bitemporal_date_spec.rb +29 -5
- data/spec/bitemporal_time_spec.rb +28 -4
- metadata +2 -8
@@ -158,9 +158,11 @@ module Sequel
|
|
158
158
|
@current_version_values = current_version.values
|
159
159
|
end
|
160
160
|
attributes.delete :id
|
161
|
-
|
162
|
-
|
163
|
-
|
161
|
+
if attributes_hold_changes? attributes
|
162
|
+
@pending_version ||= model.version_class.new
|
163
|
+
pending_version.set attributes
|
164
|
+
pending_version.master_id = id unless new?
|
165
|
+
end
|
164
166
|
end
|
165
167
|
|
166
168
|
def update_attributes(attributes={})
|
@@ -329,6 +331,26 @@ module Sequel
|
|
329
331
|
propagated.save validate: false
|
330
332
|
propagated
|
331
333
|
end
|
334
|
+
|
335
|
+
def attributes_hold_changes?(attributes)
|
336
|
+
if new? || !current_version
|
337
|
+
attributes.any?
|
338
|
+
else
|
339
|
+
attributes.detect do |key, new_value|
|
340
|
+
case key
|
341
|
+
when :master_id, :created_at, :expired_at
|
342
|
+
false
|
343
|
+
when :valid_from
|
344
|
+
new_value && new_value<current_version.valid_from
|
345
|
+
when :valid_to
|
346
|
+
new_value || new_value!=current_version.valid_to
|
347
|
+
else
|
348
|
+
current_version.send(key)!=new_value
|
349
|
+
end
|
350
|
+
end
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
332
354
|
end
|
333
355
|
end
|
334
356
|
end
|
data/sequel_bitemporal.gemspec
CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "sequel_bitemporal"
|
6
|
-
s.version = "0.5.
|
6
|
+
s.version = "0.5.2"
|
7
7
|
s.authors = ["Joseph HALTER", "Jonathan TRON"]
|
8
8
|
s.email = ["joseph.halter@thetalentbox.com", "jonathan.tron@thetalentbox.com"]
|
9
9
|
s.homepage = "https://github.com/TalentBox/sequel_bitemporal"
|
@@ -144,7 +144,31 @@ describe "Sequel::Plugins::Bitemporal" do
|
|
144
144
|
# | Single Standard | 98 | 2009-11-28 | 2009-11-29 | 2009-11-28 | 2009-11-30 | |
|
145
145
|
# | Single Standard | 98 | 2009-11-29 | | 2009-11-28 | MAX DATE | true |
|
146
146
|
end
|
147
|
-
|
147
|
+
it "don't create any new version without change" do
|
148
|
+
master = @master_class.new
|
149
|
+
master.update_attributes name: "Single Standard", price: 98
|
150
|
+
master.update_attributes price: 98, partial_update: true
|
151
|
+
master.update_attributes name: "Single Standard", price: 98
|
152
|
+
master.should have_versions %Q{
|
153
|
+
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
154
|
+
| Single Standard | 98 | 2009-11-28 | | 2009-11-28 | MAX DATE | true |
|
155
|
+
}
|
156
|
+
end
|
157
|
+
it "change in validity still creates a new version (SEE COMMENTS FOR IMPROVEMENTS)" do
|
158
|
+
master = @master_class.new
|
159
|
+
master.update_attributes name: "Single Standard", price: 98
|
160
|
+
Timecop.freeze Date.today+1
|
161
|
+
master.update_attributes price: 98, partial_update: true, valid_from: Date.today-2
|
162
|
+
master.update_attributes price: 98, partial_update: true, valid_from: Date.today+1
|
163
|
+
master.should have_versions %Q{
|
164
|
+
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
165
|
+
| Single Standard | 98 | 2009-11-28 | | 2009-11-28 | MAX DATE | true |
|
166
|
+
| Single Standard | 98 | 2009-11-29 | | 2009-11-27 | 2009-11-28 | |
|
167
|
+
}
|
168
|
+
# would be even better if it could be:
|
169
|
+
# | name | price | created_at | expired_at | valid_from | valid_to | current |
|
170
|
+
# | Single Standard | 98 | 2009-11-28 | 2009-11-29 | 2009-11-28 | MAX DATE | |
|
171
|
+
# | Single Standard | 98 | 2009-11-29 | | 2009-11-27 | MAX DATE | true |
|
148
172
|
end
|
149
173
|
it "overrides no future versions" do
|
150
174
|
master = @master_class.new
|
@@ -598,7 +622,7 @@ describe "Sequel::Plugins::Bitemporal", "with audit" do
|
|
598
622
|
Date.today,
|
599
623
|
author
|
600
624
|
)
|
601
|
-
master.update_attributes name: "King size", price: 98
|
625
|
+
master.update_attributes name: "King size", price: 98
|
602
626
|
end
|
603
627
|
it "generates a new audit on partial update" do
|
604
628
|
master = @master_class.new
|
@@ -611,7 +635,7 @@ describe "Sequel::Plugins::Bitemporal", "with audit" do
|
|
611
635
|
Date.today,
|
612
636
|
author
|
613
637
|
)
|
614
|
-
master.update_attributes partial_update: true, name: "King size", price: 98
|
638
|
+
master.update_attributes partial_update: true, name: "King size", price: 98
|
615
639
|
end
|
616
640
|
it "generate a new audit for each future version update when propagating changes" do
|
617
641
|
propagate_per_column = @master_class.propagate_per_column
|
@@ -694,7 +718,7 @@ describe "Sequel::Plugins::Bitemporal", "with audit, specifying how to get the a
|
|
694
718
|
Date.today,
|
695
719
|
author
|
696
720
|
)
|
697
|
-
master.update_attributes name: "King size", price: 98
|
721
|
+
master.update_attributes name: "King size", price: 98
|
698
722
|
end
|
699
723
|
it "generates a new audit on partial update" do
|
700
724
|
master = @master_class.new
|
@@ -707,7 +731,7 @@ describe "Sequel::Plugins::Bitemporal", "with audit, specifying how to get the a
|
|
707
731
|
Date.today,
|
708
732
|
author
|
709
733
|
)
|
710
|
-
master.update_attributes partial_update: true, name: "King size", price: 98
|
734
|
+
master.update_attributes partial_update: true, name: "King size", price: 98
|
711
735
|
end
|
712
736
|
end
|
713
737
|
|
@@ -144,7 +144,31 @@ describe "Sequel::Plugins::Bitemporal" do
|
|
144
144
|
# | Single Standard | 98 | 2009-11-28 10:00:00 +0000 | 2009-11-28 11:00:00 +0000 | 2009-11-28 10:00:00 +0000 | 2009-11-28 12:00:00 +0000 | |
|
145
145
|
# | Single Standard | 98 | 2009-11-28 11:00:00 +0000 | | 2009-11-28 10:00:00 +0000 | MAX TIME | true |
|
146
146
|
end
|
147
|
-
|
147
|
+
it "don't create any new version without change " do
|
148
|
+
master = @master_class.new
|
149
|
+
master.update_attributes name: "Single Standard", price: 98
|
150
|
+
master.update_attributes price: 98, partial_update: true
|
151
|
+
master.update_attributes name: "Single Standard", price: 98
|
152
|
+
master.should have_versions %Q{
|
153
|
+
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
154
|
+
| Single Standard | 98 | 2009-11-28 10:00:00 +0000 | | 2009-11-28 10:00:00 +0000| MAX TIME | true |
|
155
|
+
}
|
156
|
+
end
|
157
|
+
it "change in validity still creates a new version (SEE COMMENTS FOR IMPROVEMENTS)" do
|
158
|
+
master = @master_class.new
|
159
|
+
master.update_attributes name: "Single Standard", price: 98
|
160
|
+
Timecop.freeze Time.now+hour
|
161
|
+
master.update_attributes price: 98, partial_update: true, valid_from: Time.now-2*hour
|
162
|
+
master.update_attributes price: 98, partial_update: true, valid_from: Time.now+1*hour
|
163
|
+
master.should have_versions %Q{
|
164
|
+
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
165
|
+
| Single Standard | 98 | 2009-11-28 10:00:00 +0000 | | 2009-11-28 10:00:00 +0000 | MAX TIME | true |
|
166
|
+
| Single Standard | 98 | 2009-11-28 11:00:00 +0000 | | 2009-11-28 09:00:00 +0000 | 2009-11-28 10:00:00 +0000 | |
|
167
|
+
}
|
168
|
+
# would be even better if it could be:
|
169
|
+
# | name | price | created_at | expired_at | valid_from | valid_to | current |
|
170
|
+
# | Single Standard | 98 | 2009-11-28 10:00:00 +0000 | 2009-11-28 11:00:00 +0000 | 2009-11-28 10:00:00 +0000 | MAX TIME | |
|
171
|
+
# | Single Standard | 98 | 2009-11-28 11:00:00 +0000 | | 2009-11-28 09:00:00 +0000 | MAX TIME | true |
|
148
172
|
end
|
149
173
|
it "overrides no future versions" do
|
150
174
|
master = @master_class.new
|
@@ -390,7 +414,7 @@ describe "Sequel::Plugins::Bitemporal", "with audit" do
|
|
390
414
|
Time.now,
|
391
415
|
author
|
392
416
|
)
|
393
|
-
master.update_attributes name: "King size", price: 98
|
417
|
+
master.update_attributes name: "King size", price: 98
|
394
418
|
end
|
395
419
|
it "generates a new audit on partial update" do
|
396
420
|
master = @master_class.new
|
@@ -404,7 +428,7 @@ describe "Sequel::Plugins::Bitemporal", "with audit" do
|
|
404
428
|
Time.now,
|
405
429
|
author
|
406
430
|
)
|
407
|
-
master.update_attributes partial_update: true, name: "King size", price: 98
|
431
|
+
master.update_attributes partial_update: true, name: "King size", price: 98
|
408
432
|
end
|
409
433
|
end
|
410
434
|
|
@@ -445,7 +469,7 @@ describe "Sequel::Plugins::Bitemporal", "with audit, specifying how to get the a
|
|
445
469
|
Time.now,
|
446
470
|
author
|
447
471
|
)
|
448
|
-
master.update_attributes name: "King size", price: 98
|
472
|
+
master.update_attributes name: "King size", price: 98
|
449
473
|
end
|
450
474
|
it "generates a new audit on partial update" do
|
451
475
|
master = @master_class.new
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequel_bitemporal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2013-01-22 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: sequel
|
@@ -125,18 +125,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
125
125
|
- - ! '>='
|
126
126
|
- !ruby/object:Gem::Version
|
127
127
|
version: '0'
|
128
|
-
segments:
|
129
|
-
- 0
|
130
|
-
hash: 1918973659452831064
|
131
128
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
132
129
|
none: false
|
133
130
|
requirements:
|
134
131
|
- - ! '>='
|
135
132
|
- !ruby/object:Gem::Version
|
136
133
|
version: '0'
|
137
|
-
segments:
|
138
|
-
- 0
|
139
|
-
hash: 1918973659452831064
|
140
134
|
requirements: []
|
141
135
|
rubyforge_project:
|
142
136
|
rubygems_version: 1.8.24
|