sequel_bitemporal 0.2.0 → 0.3.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/lib/sequel/plugins/bitemporal.rb +11 -6
- data/sequel_bitemporal.gemspec +1 -1
- data/spec/bitemporal_date_spec.rb +16 -2
- metadata +12 -12
@@ -31,8 +31,12 @@ module Sequel
|
|
31
31
|
required = [:master_id, :valid_from, :valid_to, :created_at, :expired_at]
|
32
32
|
missing = required - version.columns
|
33
33
|
raise Error, "bitemporal plugin requires the following missing column#{"s" if missing.size>1} on version class: #{missing.join(", ")}" unless missing.empty?
|
34
|
+
master.instance_eval do
|
35
|
+
@version_class = version
|
36
|
+
@current_version_name = "#{name ? underscore(demodulize(name)) : table_name}_current_version".to_sym
|
37
|
+
end
|
34
38
|
master.one_to_many :versions, class: version, key: :master_id
|
35
|
-
master.one_to_one
|
39
|
+
master.one_to_one master.current_version_name, class: version, key: :master_id, :graph_block=>(proc do |j, lj, js|
|
36
40
|
t = ::Sequel::Plugins::Bitemporal.point_in_time
|
37
41
|
n = ::Sequel::Plugins::Bitemporal.now
|
38
42
|
e = :expired_at.qualify(j)
|
@@ -43,7 +47,7 @@ module Sequel
|
|
43
47
|
ds.where{(created_at <= t) & ({expired_at=>nil} | (expired_at > t)) & (valid_from <= n) & (valid_to > n)}
|
44
48
|
end
|
45
49
|
master.def_dataset_method :with_current_version do
|
46
|
-
eager_graph(
|
50
|
+
eager_graph(model.current_version_name).where({:id.qualify(model.current_version_name) => nil}.sql_negate)
|
47
51
|
end
|
48
52
|
master.one_to_many :current_or_future_versions, class: version, key: :master_id, :graph_block=>(proc do |j, lj, js|
|
49
53
|
t = ::Sequel::Plugins::Bitemporal.point_in_time
|
@@ -73,9 +77,6 @@ module Sequel
|
|
73
77
|
master.destroy_version self
|
74
78
|
end
|
75
79
|
end
|
76
|
-
master.instance_eval do
|
77
|
-
@version_class = version
|
78
|
-
end
|
79
80
|
unless opts[:delegate]==false
|
80
81
|
(version.columns-required-[:id]).each do |column|
|
81
82
|
master.class_eval <<-EOS
|
@@ -87,7 +88,7 @@ module Sequel
|
|
87
88
|
end
|
88
89
|
end
|
89
90
|
module ClassMethods
|
90
|
-
attr_reader :version_class
|
91
|
+
attr_reader :version_class, :current_version_name
|
91
92
|
end
|
92
93
|
module DatasetMethods
|
93
94
|
end
|
@@ -105,6 +106,10 @@ module Sequel
|
|
105
106
|
key_errors.each{|error| errors.add key, error}
|
106
107
|
end if pending_version && !pending_version.valid?
|
107
108
|
end
|
109
|
+
|
110
|
+
def current_version(*args)
|
111
|
+
send(self.class.current_version_name, *args)
|
112
|
+
end
|
108
113
|
|
109
114
|
def pending_or_current_version
|
110
115
|
pending_version || current_version
|
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.3.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"
|
@@ -296,10 +296,10 @@ describe "Sequel::Plugins::Bitemporal" do
|
|
296
296
|
master = @master_class.new
|
297
297
|
master.update_attributes name: "Single Standard", price: 98
|
298
298
|
master.update_attributes name: "Single Standard", price: 94, valid_from: Date.today+2
|
299
|
-
@master_class.eager_graph(:
|
299
|
+
@master_class.eager_graph(:rooms_current_version).where("rooms_current_version.id IS NOT NULL").first.should be
|
300
300
|
Timecop.freeze Date.today+1
|
301
301
|
master.destroy
|
302
|
-
@master_class.eager_graph(:
|
302
|
+
@master_class.eager_graph(:rooms_current_version).where("rooms_current_version.id IS NOT NULL").first.should be_nil
|
303
303
|
end
|
304
304
|
it "allows loading masters with a current version" do
|
305
305
|
master_destroyed = @master_class.new
|
@@ -412,4 +412,18 @@ describe "Sequel::Plugins::Bitemporal" do
|
|
412
412
|
master = without_delegation_class.new
|
413
413
|
expect{ master.name }.to raise_error NoMethodError
|
414
414
|
end
|
415
|
+
it "get current_version association name from class name" do
|
416
|
+
class MyNameVersion < Sequel::Model
|
417
|
+
set_dataset :room_versions
|
418
|
+
end
|
419
|
+
class MyName < Sequel::Model
|
420
|
+
set_dataset :rooms
|
421
|
+
plugin :bitemporal, version_class: MyNameVersion
|
422
|
+
end
|
423
|
+
expect do
|
424
|
+
MyName.eager_graph :my_name_current_version
|
425
|
+
end.not_to raise_error
|
426
|
+
Object.send :remove_const, :MyName
|
427
|
+
Object.send :remove_const, :MyNameVersion
|
428
|
+
end
|
415
429
|
end
|
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.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2011-11-
|
13
|
+
date: 2011-11-25 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: sequel
|
17
|
-
requirement: &
|
17
|
+
requirement: &2156745800 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2156745800
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: sqlite3
|
28
|
-
requirement: &
|
28
|
+
requirement: &2156745360 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *2156745360
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: rspec
|
39
|
-
requirement: &
|
39
|
+
requirement: &2156744860 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ~>
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: 2.8.0.rc1
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *2156744860
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: timecop
|
50
|
-
requirement: &
|
50
|
+
requirement: &2156744440 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *2156744440
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: rake
|
61
|
-
requirement: &
|
61
|
+
requirement: &2156743920 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *2156743920
|
70
70
|
description: Bitemporal versioning for sequel, fully tested.
|
71
71
|
email:
|
72
72
|
- joseph.halter@thetalentbox.com
|