sequel_bitemporal 0.1.8 → 0.1.9

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.
@@ -52,6 +52,11 @@ module Sequel
52
52
  module InstanceMethods
53
53
  attr_reader :pending_version
54
54
 
55
+ def before_validation
56
+ prepare_pending_version
57
+ super
58
+ end
59
+
55
60
  def validate
56
61
  super
57
62
  pending_version.errors.each do |key, key_errors|
@@ -82,6 +87,7 @@ module Sequel
82
87
  attributes.delete :id
83
88
  @pending_version ||= model.version_class.new
84
89
  pending_version.set attributes
90
+ pending_version.master_id = id unless new?
85
91
  end
86
92
 
87
93
  def update_attributes(attributes={})
@@ -92,15 +98,12 @@ module Sequel
92
98
  def after_create
93
99
  super
94
100
  if pending_version
95
- prepare_pending_version
96
101
  return false unless save_pending_version
97
102
  end
98
103
  end
99
104
 
100
105
  def before_update
101
106
  if pending_version
102
- lock!
103
- prepare_pending_version
104
107
  expire_previous_versions
105
108
  return false unless save_pending_version
106
109
  end
@@ -134,19 +137,14 @@ module Sequel
134
137
  private
135
138
 
136
139
  def prepare_pending_version
140
+ return unless pending_version
137
141
  point_in_time = Time.now
138
142
  pending_version.created_at = point_in_time
139
143
  pending_version.valid_from ||= point_in_time
140
144
  end
141
145
 
142
- def save_pending_version
143
- pending_version.valid_to ||= Time.utc 9999
144
- success = add_version pending_version
145
- @pending_version = nil if success
146
- success
147
- end
148
-
149
146
  def expire_previous_versions
147
+ lock!
150
148
  expired = versions_dataset.where expired_at: nil
151
149
  expired = expired.exclude "valid_from=valid_to"
152
150
  expired = expired.exclude "valid_to<=?", pending_version.valid_from
@@ -164,6 +162,13 @@ module Sequel
164
162
  versions_dataset.where(id: expired.collect(&:id)).update expired_at: pending_version.created_at
165
163
  end
166
164
 
165
+ def save_pending_version
166
+ pending_version.valid_to ||= Time.utc 9999
167
+ success = add_version pending_version
168
+ @pending_version = nil if success
169
+ success
170
+ end
171
+
167
172
  def save_fossil(expired, attributes={})
168
173
  fossil = model.version_class.new
169
174
  expired_attributes = expired.values.dup
@@ -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.1.8"
6
+ s.version = "0.1.9"
7
7
  s.authors = ["Joseph HALTER"]
8
8
  s.email = ["joseph.halter@thetalentbox.com"]
9
9
  s.homepage = "https://github.com/TalentBox/sequel_bitemporal"
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.1.8
4
+ version: 0.1.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-08 00:00:00.000000000 Z
12
+ date: 2011-11-11 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sequel
16
- requirement: &2152436900 !ruby/object:Gem::Requirement
16
+ requirement: &2160905800 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2152436900
24
+ version_requirements: *2160905800
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: sqlite3
27
- requirement: &2152385280 !ruby/object:Gem::Requirement
27
+ requirement: &2160905360 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *2152385280
35
+ version_requirements: *2160905360
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &2152384260 !ruby/object:Gem::Requirement
38
+ requirement: &2160904940 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2152384260
46
+ version_requirements: *2160904940
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: timecop
49
- requirement: &2152383300 !ruby/object:Gem::Requirement
49
+ requirement: &2160904520 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2152383300
57
+ version_requirements: *2160904520
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake
60
- requirement: &2152382540 !ruby/object:Gem::Requirement
60
+ requirement: &2160904100 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2152382540
68
+ version_requirements: *2160904100
69
69
  description: Bitemporal versioning for sequel, fully tested.
70
70
  email:
71
71
  - joseph.halter@thetalentbox.com
@@ -97,21 +97,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
97
97
  - - ! '>='
98
98
  - !ruby/object:Gem::Version
99
99
  version: '0'
100
- segments:
101
- - 0
102
- hash: -617172649856506715
103
100
  required_rubygems_version: !ruby/object:Gem::Requirement
104
101
  none: false
105
102
  requirements:
106
103
  - - ! '>='
107
104
  - !ruby/object:Gem::Version
108
105
  version: '0'
109
- segments:
110
- - 0
111
- hash: -617172649856506715
112
106
  requirements: []
113
107
  rubyforge_project:
114
- rubygems_version: 1.8.10
108
+ rubygems_version: 1.8.6
115
109
  signing_key:
116
110
  specification_version: 3
117
111
  summary: Bitemporal versioning for sequel.