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.
@@ -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