sequel_bitemporal 0.8.9 → 0.9.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.
- checksums.yaml +5 -5
- data/.travis.yml +18 -9
- data/Gemfile +0 -2
- data/ci/sequel.gemfile +17 -0
- data/lib/sequel/plugins/bitemporal.rb +31 -16
- data/lib/sequel_bitemporal.rb +0 -4
- data/sequel_bitemporal.gemspec +3 -3
- data/spec/bitemporal_date_spec.rb +15 -15
- data/spec/bitemporal_date_with_range_spec.rb +14 -14
- data/spec/bitemporal_time_spec.rb +6 -6
- data/spec/bitemporal_time_with_range_spec.rb +6 -6
- data/spec/spec_helper.rb +1 -1
- data/spec/support/db.rb +15 -0
- metadata +10 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4f44bf401ad71c80c9815ff7d2e3508edf8e5bdbef4112b36bf86d06a6d02523
|
4
|
+
data.tar.gz: 19b320461ebbdac3b2e7ace0117ffa2921180dd602b59e5145d2c1771987d993
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e9928807145999a4ba2215b10e3169bb26e63bc42137c28b9fc05ad6ac9a2e66f10c69ccdda40ae1ae8d7bbfabad0f1f921122fc3e0bb155da559b335ffa97f
|
7
|
+
data.tar.gz: a7fac94af384e4478fd9d6f98a6381bf03278e1310d8d97dff5bea449f2e3c5baeb962e3552774535a14b0a021a5b0ce22d76b659b08f7fcf9fe9a17a36d31dc
|
data/.travis.yml
CHANGED
@@ -3,13 +3,22 @@ cache:
|
|
3
3
|
bundler: true
|
4
4
|
sudo: false
|
5
5
|
rvm:
|
6
|
-
-
|
7
|
-
- 2.
|
8
|
-
- 2.
|
9
|
-
-
|
10
|
-
|
6
|
+
- 2.2.7
|
7
|
+
- 2.3.4
|
8
|
+
- 2.4.2
|
9
|
+
- jruby-9.1.13.0
|
10
|
+
before_script:
|
11
|
+
- psql -c 'create database sequel_bitemporal_test;' -U postgres
|
11
12
|
env:
|
12
|
-
- SQLITE=1
|
13
|
-
-
|
14
|
-
|
15
|
-
|
13
|
+
- SQLITE=1 SEQUEL='~> 4.0'
|
14
|
+
- SQLITE=1 SEQUEL='~> 5.0'
|
15
|
+
- PG=1 SEQUEL='~> 4.0'
|
16
|
+
- PG=1 SEQUEL='~> 5.0'
|
17
|
+
gemfile:
|
18
|
+
- ci/sequel.gemfile
|
19
|
+
matrix:
|
20
|
+
allow_failures:
|
21
|
+
- rvm: jruby-9.1.13.0
|
22
|
+
env: PG=1 SEQUEL='~> 4.0'
|
23
|
+
- rvm: jruby-9.1.13.0
|
24
|
+
env: PG=1 SEQUEL='~> 5.0'
|
data/Gemfile
CHANGED
data/ci/sequel.gemfile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gemspec :path => '../'
|
4
|
+
|
5
|
+
gem 'sequel', "#{ENV['SEQUEL']}"
|
6
|
+
|
7
|
+
# MRI/Rubinius Adapter Dependencies
|
8
|
+
platforms :ruby do
|
9
|
+
gem "pg"
|
10
|
+
gem "sqlite3"
|
11
|
+
end
|
12
|
+
|
13
|
+
# JRuby Adapter Dependencies
|
14
|
+
platforms :jruby do
|
15
|
+
gem "jdbc-postgres"
|
16
|
+
gem "jdbc-sqlite3"
|
17
|
+
end
|
@@ -46,12 +46,25 @@ module Sequel
|
|
46
46
|
missing = bitemporal_version_columns - version.columns
|
47
47
|
raise Error, "bitemporal plugin requires the following missing column#{"s" if missing.size>1} on version class: #{missing.join(", ")}" unless missing.empty?
|
48
48
|
|
49
|
-
if Sequel::Plugins::Bitemporal.
|
50
|
-
master.plugin :pg_typecast_on_load, *master.columns
|
51
|
-
elsif Sequel::Plugins::Bitemporal.jdbc?(master.db)
|
49
|
+
if Sequel::Plugins::Bitemporal.jdbc?(master.db)
|
52
50
|
master.plugin :typecast_on_load, *master.columns
|
53
51
|
end
|
54
52
|
|
53
|
+
# Sequel::Model.def_dataset_method has been deprecated and moved to the
|
54
|
+
# def_dataset_method plugin in Sequel 4.46.0, it was not loaded by
|
55
|
+
# default from 5.0
|
56
|
+
begin
|
57
|
+
master.plugin :def_dataset_method
|
58
|
+
rescue LoadError
|
59
|
+
end
|
60
|
+
# Sequel::Model#set_all has been deprecated and moved to the whitelist
|
61
|
+
# security plugin in Sequel 4.46.0, it was not loaded by default from 5.0
|
62
|
+
begin
|
63
|
+
master.plugin :whitelist_security
|
64
|
+
version.plugin :whitelist_security
|
65
|
+
rescue LoadError
|
66
|
+
end
|
67
|
+
|
55
68
|
master.instance_eval do
|
56
69
|
@version_class = version
|
57
70
|
base_alias = opts.fetch :base_alias do
|
@@ -153,14 +166,12 @@ module Sequel
|
|
153
166
|
end
|
154
167
|
master.def_dataset_method :with_current_or_future_versions do
|
155
168
|
eager_graph(:current_or_future_versions).where(
|
156
|
-
Sequel.negate(
|
169
|
+
Sequel.negate(Sequel.qualify(:current_or_future_versions, :id) => nil)
|
157
170
|
)
|
158
171
|
end
|
159
172
|
version.many_to_one :master, class: master, key: :master_id
|
160
173
|
version.class_eval do
|
161
|
-
if Sequel::Plugins::Bitemporal.
|
162
|
-
plugin :pg_typecast_on_load, *columns
|
163
|
-
elsif Sequel::Plugins::Bitemporal.jdbc?(master.db)
|
174
|
+
if Sequel::Plugins::Bitemporal.jdbc?(master.db)
|
164
175
|
plugin :typecast_on_load, *columns
|
165
176
|
end
|
166
177
|
|
@@ -355,7 +366,11 @@ module Sequel
|
|
355
366
|
|
356
367
|
def destroy
|
357
368
|
point_in_time = ::Sequel::Plugins::Bitemporal.point_in_time
|
358
|
-
versions_dataset.where(
|
369
|
+
versions_dataset.where(
|
370
|
+
expired_at: nil
|
371
|
+
).where(
|
372
|
+
Sequel.lit("valid_to>valid_from")
|
373
|
+
).update expired_at: point_in_time
|
359
374
|
end
|
360
375
|
|
361
376
|
def destroy_version(version, expand_previous_version)
|
@@ -370,7 +385,7 @@ module Sequel
|
|
370
385
|
previous = versions_dataset.where({
|
371
386
|
expired_at: nil,
|
372
387
|
valid_to: version.valid_from,
|
373
|
-
}).where("valid_to>valid_from").first
|
388
|
+
}).where(Sequel.lit("valid_to>valid_from")).first
|
374
389
|
if previous
|
375
390
|
if version_was_valid
|
376
391
|
success &&= save_fossil previous, created_at: point_in_time, valid_from: now, valid_to: version.valid_to
|
@@ -471,11 +486,11 @@ module Sequel
|
|
471
486
|
lock!
|
472
487
|
set master_changes
|
473
488
|
expired = versions_dataset.where expired_at: nil
|
474
|
-
expired = expired.exclude "valid_from=valid_to"
|
475
|
-
expired = expired.exclude "valid_to<=?", pending_version.valid_from
|
476
|
-
pending_version.valid_to ||= expired.where("valid_from>?", pending_version.valid_from).min(:valid_from)
|
489
|
+
expired = expired.exclude Sequel.lit("valid_from=valid_to")
|
490
|
+
expired = expired.exclude Sequel.lit("valid_to<=?", pending_version.valid_from)
|
491
|
+
pending_version.valid_to ||= expired.where(Sequel.lit("valid_from>?", pending_version.valid_from)).min(:valid_from)
|
477
492
|
pending_version.valid_to ||= Time.utc 9999
|
478
|
-
expired = expired.exclude "valid_from>=?", pending_version.valid_to
|
493
|
+
expired = expired.exclude Sequel.lit("valid_from>=?", pending_version.valid_to)
|
479
494
|
expired = expired.all
|
480
495
|
expired.each do |expired_version|
|
481
496
|
if expired_version.valid_from<pending_version.valid_from && expired_version.valid_to>pending_version.valid_from
|
@@ -492,9 +507,9 @@ module Sequel
|
|
492
507
|
@propagated_during_last_save = []
|
493
508
|
lock!
|
494
509
|
futures = versions_dataset.where expired_at: nil
|
495
|
-
futures = futures.exclude "valid_from=valid_to"
|
496
|
-
futures = futures.exclude "valid_to<=?", pending_version.valid_from
|
497
|
-
futures = futures.where "valid_from>?", pending_version.valid_from
|
510
|
+
futures = futures.exclude Sequel.lit("valid_from=valid_to")
|
511
|
+
futures = futures.exclude Sequel.lit("valid_to<=?", pending_version.valid_from)
|
512
|
+
futures = futures.where Sequel.lit("valid_from>?", pending_version.valid_from)
|
498
513
|
futures = futures.order(:valid_from).all
|
499
514
|
|
500
515
|
to_check_columns = self.class.version_class.columns - excluded_columns
|
data/lib/sequel_bitemporal.rb
CHANGED
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.
|
6
|
+
s.version = "0.9.0"
|
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"
|
@@ -16,9 +16,9 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
17
|
s.require_paths = ["lib"]
|
18
18
|
|
19
|
-
s.add_runtime_dependency "sequel", ">=
|
19
|
+
s.add_runtime_dependency "sequel", ">= 4.0", "< 6.0"
|
20
20
|
|
21
|
-
s.add_development_dependency "rspec", "~> 3.
|
21
|
+
s.add_development_dependency "rspec", "~> 3.6.0"
|
22
22
|
s.add_development_dependency "timecop"
|
23
23
|
s.add_development_dependency "rake"
|
24
24
|
end
|
@@ -382,10 +382,10 @@ describe "Sequel::Plugins::Bitemporal" do
|
|
382
382
|
master = @master_class.new
|
383
383
|
master.update_attributes name: "Single Standard", price: 98
|
384
384
|
master.update_attributes name: "Single Standard", price: 94, valid_from: Date.today+2
|
385
|
-
expect(@master_class.eager_graph(:current_version).where("rooms_current_version.id IS NOT NULL").first).to be
|
385
|
+
expect(@master_class.eager_graph(:current_version).where(Sequel.lit("rooms_current_version.id IS NOT NULL")).first).to be
|
386
386
|
Timecop.freeze Date.today+1
|
387
387
|
master.destroy
|
388
|
-
expect(@master_class.eager_graph(:current_version).where("rooms_current_version.id IS NOT NULL").first).to be_nil
|
388
|
+
expect(@master_class.eager_graph(:current_version).where(Sequel.lit("rooms_current_version.id IS NOT NULL")).first).to be_nil
|
389
389
|
end
|
390
390
|
it "allows eager loading via a separate query" do
|
391
391
|
master = @master_class.new
|
@@ -468,25 +468,25 @@ describe "Sequel::Plugins::Bitemporal" do
|
|
468
468
|
}
|
469
469
|
expect(master.current_version.price).to eq(94)
|
470
470
|
Sequel::Plugins::Bitemporal.at(Date.today-1) do
|
471
|
-
expect(master.current_version(true).price).to eq(98)
|
471
|
+
expect(master.current_version(:reload => true).price).to eq(98)
|
472
472
|
end
|
473
473
|
Sequel::Plugins::Bitemporal.at(Date.today+1) do
|
474
|
-
expect(master.current_version(true).price).to eq(93)
|
474
|
+
expect(master.current_version(:reload => true).price).to eq(93)
|
475
475
|
end
|
476
476
|
Sequel::Plugins::Bitemporal.at(Date.today+2) do
|
477
|
-
expect(master.current_version(true).price).to eq(96)
|
477
|
+
expect(master.current_version(:reload => true).price).to eq(96)
|
478
478
|
end
|
479
479
|
Sequel::Plugins::Bitemporal.as_we_knew_it(Date.today-1) do
|
480
|
-
expect(master.current_version(true).price).to eq(95)
|
480
|
+
expect(master.current_version(:reload => true).price).to eq(95)
|
481
481
|
expect(master.current_version).to be_current
|
482
482
|
Sequel::Plugins::Bitemporal.at(Date.today-1) do
|
483
|
-
expect(master.current_version(true).price).to eq(98)
|
483
|
+
expect(master.current_version(:reload => true).price).to eq(98)
|
484
484
|
end
|
485
485
|
Sequel::Plugins::Bitemporal.at(Date.today+1) do
|
486
|
-
expect(master.current_version(true).price).to eq(93)
|
486
|
+
expect(master.current_version(:reload => true).price).to eq(93)
|
487
487
|
end
|
488
488
|
Sequel::Plugins::Bitemporal.at(Date.today+2) do
|
489
|
-
expect(master.current_version(true).price).to eq(91)
|
489
|
+
expect(master.current_version(:reload => true).price).to eq(91)
|
490
490
|
end
|
491
491
|
end
|
492
492
|
end
|
@@ -511,17 +511,17 @@ describe "Sequel::Plugins::Bitemporal" do
|
|
511
511
|
Timecop.freeze Date.today+1
|
512
512
|
master.update_attributes name: "Single Standard", price: 99
|
513
513
|
master.update_attributes name: "Single Standard", price: 94, valid_from: Date.today+2
|
514
|
-
res = @master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(
|
514
|
+
res = @master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(Sequel.qualify(:current_or_future_versions, :id) => nil) & {price: 99}).all.first
|
515
515
|
expect(res).to be
|
516
516
|
expect(res.current_or_future_versions.size).to eq(1)
|
517
517
|
expect(res.current_or_future_versions.first.price).to eq(99)
|
518
|
-
res = @master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(
|
518
|
+
res = @master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(Sequel.qualify(:current_or_future_versions, :id) => nil) & {price: 94}).all.first
|
519
519
|
expect(res).to be
|
520
520
|
expect(res.current_or_future_versions.size).to eq(1)
|
521
521
|
expect(res.current_or_future_versions.first.price).to eq(94)
|
522
522
|
Timecop.freeze Date.today+1
|
523
523
|
master.destroy
|
524
|
-
expect(@master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(
|
524
|
+
expect(@master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(Sequel.qualify(:current_or_future_versions, :id) => nil)).all).to be_empty
|
525
525
|
end
|
526
526
|
it "association current or future versions ignores versions with valid_from==valid_to" do
|
527
527
|
master = @master_class.new
|
@@ -613,7 +613,7 @@ describe "Sequel::Plugins::Bitemporal" do
|
|
613
613
|
plugin :bitemporal, version_class: MyNameVersion
|
614
614
|
end
|
615
615
|
expect do
|
616
|
-
MyName.eager_graph(:current_version).where("my_name_current_version.id IS NOT NULL").first
|
616
|
+
MyName.eager_graph(:current_version).where(Sequel.lit("my_name_current_version.id IS NOT NULL")).first
|
617
617
|
end.not_to raise_error
|
618
618
|
Object.send :remove_const, :MyName
|
619
619
|
Object.send :remove_const, :MyNameVersion
|
@@ -653,7 +653,7 @@ describe "Sequel::Plugins::Bitemporal" do
|
|
653
653
|
| King Size | 98 | 2009-11-29 | | 2009-11-28 | MAX DATE | |
|
654
654
|
}
|
655
655
|
Sequel::Plugins::Bitemporal.as_we_knew_it(Date.today+2) do
|
656
|
-
master.current_version(true).destroy
|
656
|
+
master.current_version(:reload => true).destroy
|
657
657
|
end
|
658
658
|
expect(master).to have_versions %Q{
|
659
659
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
@@ -937,7 +937,7 @@ describe "Sequel::Plugins::Bitemporal", "with audit, specifying how to get the a
|
|
937
937
|
expect do
|
938
938
|
redefined_base_alias.eager_graph(
|
939
939
|
:current_version
|
940
|
-
).where("anything_current_version.id IS NOT NULL").first
|
940
|
+
).where(Sequel.lit("anything_current_version.id IS NOT NULL")).first
|
941
941
|
end.not_to raise_error
|
942
942
|
end
|
943
943
|
end
|
@@ -373,10 +373,10 @@ if DbHelpers.pg?
|
|
373
373
|
master = @master_class.new
|
374
374
|
master.update_attributes name: "Single Standard", price: 98
|
375
375
|
master.update_attributes name: "Single Standard", price: 94, valid_from: Date.today+2
|
376
|
-
expect(@master_class.eager_graph(:current_version).where("rooms_current_version.id IS NOT NULL").first).to be
|
376
|
+
expect(@master_class.eager_graph(:current_version).where(Sequel.lit("rooms_current_version.id IS NOT NULL")).first).to be
|
377
377
|
Timecop.freeze Date.today+1
|
378
378
|
master.destroy
|
379
|
-
expect(@master_class.eager_graph(:current_version).where("rooms_current_version.id IS NOT NULL").first).to be_nil
|
379
|
+
expect(@master_class.eager_graph(:current_version).where(Sequel.lit("rooms_current_version.id IS NOT NULL")).first).to be_nil
|
380
380
|
end
|
381
381
|
it "allows loading masters with a current version" do
|
382
382
|
master_destroyed = @master_class.new
|
@@ -428,25 +428,25 @@ if DbHelpers.pg?
|
|
428
428
|
}
|
429
429
|
expect(master.current_version.price).to eq(94)
|
430
430
|
Sequel::Plugins::Bitemporal.at(Date.today-1) do
|
431
|
-
expect(master.current_version(true).price).to eq(98)
|
431
|
+
expect(master.current_version(:reload => true).price).to eq(98)
|
432
432
|
end
|
433
433
|
Sequel::Plugins::Bitemporal.at(Date.today+1) do
|
434
|
-
expect(master.current_version(true).price).to eq(93)
|
434
|
+
expect(master.current_version(:reload => true).price).to eq(93)
|
435
435
|
end
|
436
436
|
Sequel::Plugins::Bitemporal.at(Date.today+2) do
|
437
|
-
expect(master.current_version(true).price).to eq(96)
|
437
|
+
expect(master.current_version(:reload => true).price).to eq(96)
|
438
438
|
end
|
439
439
|
Sequel::Plugins::Bitemporal.as_we_knew_it(Date.today-1) do
|
440
|
-
expect(master.current_version(true).price).to eq(95)
|
440
|
+
expect(master.current_version(:reload => true).price).to eq(95)
|
441
441
|
expect(master.current_version).to be_current
|
442
442
|
Sequel::Plugins::Bitemporal.at(Date.today-1) do
|
443
|
-
expect(master.current_version(true).price).to eq(98)
|
443
|
+
expect(master.current_version(:reload => true).price).to eq(98)
|
444
444
|
end
|
445
445
|
Sequel::Plugins::Bitemporal.at(Date.today+1) do
|
446
|
-
expect(master.current_version(true).price).to eq(93)
|
446
|
+
expect(master.current_version(:reload => true).price).to eq(93)
|
447
447
|
end
|
448
448
|
Sequel::Plugins::Bitemporal.at(Date.today+2) do
|
449
|
-
expect(master.current_version(true).price).to eq(91)
|
449
|
+
expect(master.current_version(:reload => true).price).to eq(91)
|
450
450
|
end
|
451
451
|
end
|
452
452
|
end
|
@@ -471,17 +471,17 @@ if DbHelpers.pg?
|
|
471
471
|
Timecop.freeze Date.today+1
|
472
472
|
master.update_attributes name: "Single Standard", price: 99
|
473
473
|
master.update_attributes name: "Single Standard", price: 94, valid_from: Date.today+2
|
474
|
-
res = @master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(
|
474
|
+
res = @master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(Sequel.qualify(:current_or_future_versions, :id) => nil) & {price: 99}).all.first
|
475
475
|
expect(res).to be
|
476
476
|
expect(res.current_or_future_versions.size).to eq(1)
|
477
477
|
expect(res.current_or_future_versions.first.price).to eq(99)
|
478
|
-
res = @master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(
|
478
|
+
res = @master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(Sequel.qualify(:current_or_future_versions, :id) => nil) & {price: 94}).all.first
|
479
479
|
expect(res).to be
|
480
480
|
expect(res.current_or_future_versions.size).to eq(1)
|
481
481
|
expect(res.current_or_future_versions.first.price).to eq(94)
|
482
482
|
Timecop.freeze Date.today+1
|
483
483
|
master.destroy
|
484
|
-
expect(@master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(
|
484
|
+
expect(@master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(Sequel.qualify(:current_or_future_versions, :id) => nil)).all).to be_empty
|
485
485
|
end
|
486
486
|
it "allows loading masters with current or future versions" do
|
487
487
|
master_destroyed = @master_class.new
|
@@ -519,7 +519,7 @@ if DbHelpers.pg?
|
|
519
519
|
plugin :bitemporal, version_class: MyNameVersion
|
520
520
|
end
|
521
521
|
expect do
|
522
|
-
MyName.eager_graph(:current_version).where("my_name_current_version.id IS NOT NULL").first
|
522
|
+
MyName.eager_graph(:current_version).where(Sequel.lit("my_name_current_version.id IS NOT NULL")).first
|
523
523
|
end.not_to raise_error
|
524
524
|
Object.send :remove_const, :MyName
|
525
525
|
Object.send :remove_const, :MyNameVersion
|
@@ -559,7 +559,7 @@ if DbHelpers.pg?
|
|
559
559
|
| King Size | 98 | 2009-11-29 | | 2009-11-28 | MAX DATE | |
|
560
560
|
}
|
561
561
|
Sequel::Plugins::Bitemporal.as_we_knew_it(Date.today+2) do
|
562
|
-
master.current_version(true).destroy
|
562
|
+
master.current_version(:reload => true).destroy
|
563
563
|
end
|
564
564
|
expect(master).to have_versions %Q{
|
565
565
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
@@ -292,10 +292,10 @@ describe "Sequel::Plugins::Bitemporal" do
|
|
292
292
|
master = @master_class.new
|
293
293
|
master.update_attributes name: "Single Standard", price: 98
|
294
294
|
master.update_attributes name: "Single Standard", price: 94, valid_from: Time.now+2*hour
|
295
|
-
expect(@master_class.eager_graph(:current_version).where("rooms_current_version.id IS NOT NULL").first).to be
|
295
|
+
expect(@master_class.eager_graph(:current_version).where(Sequel.lit("rooms_current_version.id IS NOT NULL")).first).to be
|
296
296
|
Timecop.freeze Time.now+hour
|
297
297
|
master.destroy
|
298
|
-
expect(@master_class.eager_graph(:current_version).where("rooms_current_version.id IS NOT NULL").first).to be_nil
|
298
|
+
expect(@master_class.eager_graph(:current_version).where(Sequel.lit("rooms_current_version.id IS NOT NULL")).first).to be_nil
|
299
299
|
end
|
300
300
|
it "allows loading masters with a current version" do
|
301
301
|
master_destroyed = @master_class.new
|
@@ -334,7 +334,7 @@ describe "Sequel::Plugins::Bitemporal" do
|
|
334
334
|
master.update_attributes price: 94
|
335
335
|
expect(master.current_version.price).to eq(94)
|
336
336
|
Sequel::Plugins::Bitemporal.as_we_knew_it(Time.now-1*hour) do
|
337
|
-
expect(master.current_version(true).price).to eq(98)
|
337
|
+
expect(master.current_version(:reload => true).price).to eq(98)
|
338
338
|
end
|
339
339
|
end
|
340
340
|
it "correctly reset time if failure when going back in time" do
|
@@ -358,17 +358,17 @@ describe "Sequel::Plugins::Bitemporal" do
|
|
358
358
|
Timecop.freeze Time.now+1*hour
|
359
359
|
master.update_attributes name: "Single Standard", price: 99
|
360
360
|
master.update_attributes name: "Single Standard", price: 94, valid_from: Time.now+2*hour
|
361
|
-
res = @master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(
|
361
|
+
res = @master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(Sequel.qualify(:current_or_future_versions, :id) => nil) & {price: 99}).all.first
|
362
362
|
expect(res).to be
|
363
363
|
expect(res.current_or_future_versions.size).to eq(1)
|
364
364
|
expect(res.current_or_future_versions.first.price).to eq(99)
|
365
|
-
res = @master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(
|
365
|
+
res = @master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(Sequel.qualify(:current_or_future_versions, :id) => nil) & {price: 94}).all.first
|
366
366
|
expect(res).to be
|
367
367
|
expect(res.current_or_future_versions.size).to eq(1)
|
368
368
|
expect(res.current_or_future_versions.first.price).to eq(94)
|
369
369
|
Timecop.freeze Time.now+1*hour
|
370
370
|
master.destroy
|
371
|
-
expect(@master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(
|
371
|
+
expect(@master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(Sequel.qualify(:current_or_future_versions, :id) => nil)).all).to be_empty
|
372
372
|
end
|
373
373
|
it "allows loading masters with current or future versions" do
|
374
374
|
master_destroyed = @master_class.new
|
@@ -292,10 +292,10 @@ if DbHelpers.pg?
|
|
292
292
|
master = @master_class.new
|
293
293
|
master.update_attributes name: "Single Standard", price: 98
|
294
294
|
master.update_attributes name: "Single Standard", price: 94, valid_from: Time.now+2*hour
|
295
|
-
expect(@master_class.eager_graph(:current_version).where("rooms_current_version.id IS NOT NULL").first).to be
|
295
|
+
expect(@master_class.eager_graph(:current_version).where(Sequel.lit("rooms_current_version.id IS NOT NULL")).first).to be
|
296
296
|
Timecop.freeze Time.now+hour
|
297
297
|
master.destroy
|
298
|
-
expect(@master_class.eager_graph(:current_version).where("rooms_current_version.id IS NOT NULL").first).to be_nil
|
298
|
+
expect(@master_class.eager_graph(:current_version).where(Sequel.lit("rooms_current_version.id IS NOT NULL")).first).to be_nil
|
299
299
|
end
|
300
300
|
it "allows loading masters with a current version" do
|
301
301
|
master_destroyed = @master_class.new
|
@@ -334,7 +334,7 @@ if DbHelpers.pg?
|
|
334
334
|
master.update_attributes price: 94
|
335
335
|
expect(master.current_version.price).to eq(94)
|
336
336
|
Sequel::Plugins::Bitemporal.as_we_knew_it(Time.now-1*hour) do
|
337
|
-
expect(master.current_version(true).price).to eq(98)
|
337
|
+
expect(master.current_version(:reload => true).price).to eq(98)
|
338
338
|
end
|
339
339
|
end
|
340
340
|
it "correctly reset time if failure when going back in time" do
|
@@ -358,17 +358,17 @@ if DbHelpers.pg?
|
|
358
358
|
Timecop.freeze Time.now+1*hour
|
359
359
|
master.update_attributes name: "Single Standard", price: 99
|
360
360
|
master.update_attributes name: "Single Standard", price: 94, valid_from: Time.now+2*hour
|
361
|
-
res = @master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(
|
361
|
+
res = @master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(Sequel.qualify(:current_or_future_versions, :id) => nil) & {price: 99}).all.first
|
362
362
|
expect(res).to be
|
363
363
|
expect(res.current_or_future_versions.size).to eq(1)
|
364
364
|
expect(res.current_or_future_versions.first.price).to eq(99)
|
365
|
-
res = @master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(
|
365
|
+
res = @master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(Sequel.qualify(:current_or_future_versions, :id) => nil) & {price: 94}).all.first
|
366
366
|
expect(res).to be
|
367
367
|
expect(res.current_or_future_versions.size).to eq(1)
|
368
368
|
expect(res.current_or_future_versions.first.price).to eq(94)
|
369
369
|
Timecop.freeze Time.now+1*hour
|
370
370
|
master.destroy
|
371
|
-
expect(@master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(
|
371
|
+
expect(@master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(Sequel.qualify(:current_or_future_versions, :id) => nil)).all).to be_empty
|
372
372
|
end
|
373
373
|
it "allows loading masters with current or future versions" do
|
374
374
|
master_destroyed = @master_class.new
|
data/spec/spec_helper.rb
CHANGED
data/spec/support/db.rb
CHANGED
@@ -46,6 +46,21 @@ module DbHelpers
|
|
46
46
|
set_dataset :rooms
|
47
47
|
plugin :bitemporal, bitemporal_options
|
48
48
|
end
|
49
|
+
|
50
|
+
DB.drop_table(:my_name_versions) if DB.table_exists?(:my_name_versions)
|
51
|
+
DB.drop_table(:my_names) if DB.table_exists?(:my_names)
|
52
|
+
|
53
|
+
DB.create_table! :my_names do
|
54
|
+
primary_key :id
|
55
|
+
end
|
56
|
+
DB.create_table! :my_name_versions do
|
57
|
+
primary_key :id
|
58
|
+
foreign_key :master_id, :my_names
|
59
|
+
send(use_time ? :Time : :Date, :created_at)
|
60
|
+
send(use_time ? :Time : :Date, :expired_at)
|
61
|
+
send(use_time ? :Time : :Date, :valid_from)
|
62
|
+
send(use_time ? :Time : :Date, :valid_to)
|
63
|
+
end
|
49
64
|
end
|
50
65
|
|
51
66
|
def db_truncate
|
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.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joseph HALTER
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2018-11-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sequel
|
@@ -17,34 +17,34 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
20
|
+
version: '4.0'
|
21
21
|
- - "<"
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: '
|
23
|
+
version: '6.0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
27
|
requirements:
|
28
28
|
- - ">="
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
version: '
|
30
|
+
version: '4.0'
|
31
31
|
- - "<"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '6.0'
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: rspec
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 3.
|
40
|
+
version: 3.6.0
|
41
41
|
type: :development
|
42
42
|
prerelease: false
|
43
43
|
version_requirements: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 3.
|
47
|
+
version: 3.6.0
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: timecop
|
50
50
|
requirement: !ruby/object:Gem::Requirement
|
@@ -89,6 +89,7 @@ files:
|
|
89
89
|
- LICENSE
|
90
90
|
- README.md
|
91
91
|
- Rakefile
|
92
|
+
- ci/sequel.gemfile
|
92
93
|
- lib/sequel/plugins/bitemporal.rb
|
93
94
|
- lib/sequel_bitemporal.rb
|
94
95
|
- sequel_bitemporal.gemspec
|
@@ -120,7 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
121
|
version: '0'
|
121
122
|
requirements: []
|
122
123
|
rubyforge_project:
|
123
|
-
rubygems_version: 2.
|
124
|
+
rubygems_version: 2.7.6
|
124
125
|
signing_key:
|
125
126
|
specification_version: 4
|
126
127
|
summary: Bitemporal versioning for sequel.
|