sequel_bitemporal 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 :current_version, class: version, key: :master_id, :graph_block=>(proc do |j, lj, js|
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(:current_version).where({current_version__id: nil}.sql_negate)
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
@@ -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.2.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(:current_version).where("current_version.id IS NOT NULL").first.should be
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(:current_version).where("current_version.id IS NOT NULL").first.should be_nil
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.2.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-24 00:00:00.000000000 Z
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: &2153258540 !ruby/object:Gem::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: *2153258540
25
+ version_requirements: *2156745800
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: sqlite3
28
- requirement: &2153252000 !ruby/object:Gem::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: *2153252000
36
+ version_requirements: *2156745360
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: rspec
39
- requirement: &2153251140 !ruby/object:Gem::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: *2153251140
47
+ version_requirements: *2156744860
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: timecop
50
- requirement: &2153250720 !ruby/object:Gem::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: *2153250720
58
+ version_requirements: *2156744440
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: rake
61
- requirement: &2153250180 !ruby/object:Gem::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: *2153250180
69
+ version_requirements: *2156743920
70
70
  description: Bitemporal versioning for sequel, fully tested.
71
71
  email:
72
72
  - joseph.halter@thetalentbox.com