sequel_bitemporal 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -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.