sequel_bitemporal 0.6.16 → 0.7.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.
- checksums.yaml +4 -4
- data/.rspec +1 -0
- data/.travis.yml +5 -5
- data/Gemfile +10 -0
- data/LICENSE +1 -1
- data/README.md +1 -1
- data/lib/sequel/plugins/bitemporal.rb +30 -6
- data/lib/sequel_bitemporal.rb +19 -0
- data/sequel_bitemporal.gemspec +2 -4
- data/spec/bitemporal_date_with_range_spec.rb +1 -1
- data/spec/bitemporal_serialization_spec.rb +1 -1
- data/spec/spec_helper.rb +18 -3
- data/spec/support/db.rb +4 -0
- metadata +22 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2ba7a32d43c79c445e1e16d04211bd92fef7859a
|
4
|
+
data.tar.gz: b3843cf42e0923c0db13d5032a7d5a797706f969
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e01ff6312719f3c62f400e1e2f7d73266a02664a4fd6fdce68071a4b837c686d8263eb615b22693ae233e479a69caf65cb3a337b4c4ded0ebba6d412f7d5b57
|
7
|
+
data.tar.gz: 389ad9ac4318a3a4054985966c8378403ed6f6d2ad24806fad895d1d7ca01b08fde85d3ce803da88286b9e071e96e38006ff9760fca14645e7278866e6689fa0
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -44,4 +44,4 @@ Build Status
|
|
44
44
|
License
|
45
45
|
-------
|
46
46
|
|
47
|
-
sequel_bitemporal is Copyright ©
|
47
|
+
sequel_bitemporal is Copyright © 2011 TalentBox SA. It is free software, and may be redistributed under the terms specified in the LICENSE file.
|
@@ -44,6 +44,13 @@ module Sequel
|
|
44
44
|
raise Error, "please specify version class to use for bitemporal plugin" unless version
|
45
45
|
missing = bitemporal_version_columns - version.columns
|
46
46
|
raise Error, "bitemporal plugin requires the following missing column#{"s" if missing.size>1} on version class: #{missing.join(", ")}" unless missing.empty?
|
47
|
+
|
48
|
+
if Sequel::Plugins::Bitemporal.pg_jdbc?(master.db)
|
49
|
+
master.plugin :pg_typecast_on_load, *master.columns
|
50
|
+
elsif Sequel::Plugins::Bitemporal.jdbc?(master.db)
|
51
|
+
master.plugin :typecast_on_load, *master.columns
|
52
|
+
end
|
53
|
+
|
47
54
|
master.instance_eval do
|
48
55
|
@version_class = version
|
49
56
|
base_alias = name ? underscore(demodulize(name)) : table_name
|
@@ -130,6 +137,12 @@ module Sequel
|
|
130
137
|
end
|
131
138
|
version.many_to_one :master, class: master, key: :master_id
|
132
139
|
version.class_eval do
|
140
|
+
if Sequel::Plugins::Bitemporal.pg_jdbc?(db)
|
141
|
+
plugin :pg_typecast_on_load, *columns
|
142
|
+
elsif Sequel::Plugins::Bitemporal.jdbc?(master.db)
|
143
|
+
plugin :typecast_on_load, *columns
|
144
|
+
end
|
145
|
+
|
133
146
|
def current?
|
134
147
|
t = ::Sequel::Plugins::Bitemporal.point_in_time
|
135
148
|
n = ::Sequel::Plugins::Bitemporal.now
|
@@ -273,12 +286,17 @@ module Sequel
|
|
273
286
|
end if current_version?
|
274
287
|
model.version_class.new current_attributes
|
275
288
|
end
|
276
|
-
pending_version.
|
289
|
+
pending_version.set_all attributes
|
277
290
|
end
|
278
291
|
|
279
292
|
def update_attributes(attributes={})
|
280
293
|
self.attributes = attributes
|
281
|
-
save
|
294
|
+
if save raise_on_failure: false
|
295
|
+
_refresh_set_values @values
|
296
|
+
self
|
297
|
+
else
|
298
|
+
false
|
299
|
+
end
|
282
300
|
end
|
283
301
|
|
284
302
|
def before_create
|
@@ -478,19 +496,25 @@ module Sequel
|
|
478
496
|
|
479
497
|
def save_fossil(expired, attributes={})
|
480
498
|
fossil = model.version_class.new
|
481
|
-
expired_attributes = expired.
|
499
|
+
expired_attributes = expired.keys.each_with_object({}) do |key, hash|
|
500
|
+
hash[key] = expired.send key
|
501
|
+
end
|
482
502
|
expired_attributes.delete :id
|
483
|
-
fossil.
|
503
|
+
fossil.set_all expired_attributes.merge(attributes)
|
484
504
|
fossil.save validate: false
|
505
|
+
fossil.send :_refresh_set_values, fossil.values
|
485
506
|
end
|
486
507
|
|
487
508
|
def save_propagated(version, attributes={})
|
488
509
|
propagated = model.version_class.new
|
489
|
-
version_attributes = version.
|
510
|
+
version_attributes = version.keys.each_with_object({}) do |key, hash|
|
511
|
+
hash[key] = version.send key
|
512
|
+
end
|
490
513
|
version_attributes.delete :id
|
491
514
|
version_attributes[:created_at] = Sequel::Plugins::Bitemporal.point_in_time
|
492
|
-
propagated.
|
515
|
+
propagated.set_all version_attributes.merge(attributes)
|
493
516
|
propagated.save validate: false
|
517
|
+
propagated.send :_refresh_set_values, propagated.values
|
494
518
|
propagated
|
495
519
|
end
|
496
520
|
|
data/lib/sequel_bitemporal.rb
CHANGED
@@ -1,2 +1,21 @@
|
|
1
1
|
require "sequel"
|
2
|
+
|
3
|
+
module Sequel
|
4
|
+
module Plugins
|
5
|
+
module Bitemporal
|
6
|
+
def self.jruby?
|
7
|
+
(defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby') || defined?(JRUBY_VERSION)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.jdbc?(db)
|
11
|
+
db.adapter_scheme==:jdbc
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.pg_jdbc?(db)
|
15
|
+
db.database_type==:postgres && jdbc?(db)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
2
21
|
require "sequel/plugins/bitemporal"
|
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.7.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"
|
@@ -16,10 +16,8 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
17
|
s.require_paths = ["lib"]
|
18
18
|
|
19
|
-
s.add_runtime_dependency "sequel", "
|
19
|
+
s.add_runtime_dependency "sequel", ">= 3.30", "< 5.0"
|
20
20
|
|
21
|
-
s.add_development_dependency "sqlite3"
|
22
|
-
s.add_development_dependency "pg"
|
23
21
|
s.add_development_dependency "rspec", "~> 2.10.0"
|
24
22
|
s.add_development_dependency "timecop"
|
25
23
|
s.add_development_dependency "rake"
|
@@ -360,7 +360,7 @@ if DbHelpers.pg?
|
|
360
360
|
| Single Standard | 12 | 1 | 1 | 2009-11-30 | 2009-12-01 | 2009-12-01 | 2009-12-02 | |
|
361
361
|
| Single Standard | 12 | | 1 | 2009-12-01 | | 2009-11-28 | 2009-11-30 | |
|
362
362
|
| Single Standard | 12 | 3 | 4 | 2009-12-01 | | 2009-11-30 | 2009-12-01 | |
|
363
|
-
| Single Standard | 12 |
|
363
|
+
| Single Standard | 12 | 3 | 4 | 2009-12-01 | | 2009-12-01 | 2009-12-02 | |
|
364
364
|
}
|
365
365
|
ensure
|
366
366
|
@master_class.instance_variable_set :@propagate_per_column, propagate_per_column
|
data/spec/spec_helper.rb
CHANGED
@@ -5,12 +5,26 @@ require "pry"
|
|
5
5
|
Dir[File.expand_path("../support/*.rb", __FILE__)].each{|f| require f}
|
6
6
|
ENV["TZ"]="UTC"
|
7
7
|
|
8
|
+
require "sequel_bitemporal"
|
9
|
+
|
10
|
+
rspec_exclusions = {}
|
11
|
+
|
8
12
|
DB = if DbHelpers.pg?
|
9
13
|
`createdb sequel_bitemporal_test`
|
10
14
|
Sequel.extension :pg_range, :pg_range_ops
|
11
|
-
Sequel.
|
15
|
+
if ::Sequel::Plugins::Bitemporal.jruby?
|
16
|
+
Sequel.connect "jdbc:postgresql://localhost/sequel_bitemporal_test"
|
17
|
+
else
|
18
|
+
Sequel.postgres "sequel_bitemporal_test"
|
19
|
+
end
|
12
20
|
else
|
13
|
-
Sequel.
|
21
|
+
if Sequel::Plugins::Bitemporal.jruby?
|
22
|
+
rspec_exclusions[:skip_jdbc_sqlite] = true
|
23
|
+
Sequel::Model.plugin :typecast_on_load
|
24
|
+
Sequel.connect "jdbc:sqlite::memory:"
|
25
|
+
else
|
26
|
+
Sequel.sqlite
|
27
|
+
end
|
14
28
|
end
|
15
29
|
|
16
30
|
if ENV["DEBUG"]
|
@@ -20,7 +34,8 @@ end
|
|
20
34
|
|
21
35
|
RSpec.configure do |config|
|
22
36
|
config.include DbHelpers
|
23
|
-
|
37
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
38
|
+
config.filter_run_excluding rspec_exclusions
|
24
39
|
config.before :each do
|
25
40
|
db_truncate
|
26
41
|
end
|
data/spec/support/db.rb
CHANGED
@@ -4,6 +4,10 @@ module DbHelpers
|
|
4
4
|
ENV.has_key? "PG"
|
5
5
|
end
|
6
6
|
|
7
|
+
def self.jruby?
|
8
|
+
(defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby') || defined?(JRUBY_VERSION)
|
9
|
+
end
|
10
|
+
|
7
11
|
def db_setup(opts={})
|
8
12
|
use_time = opts[:use_time]
|
9
13
|
DB.drop_table(:room_versions) if DB.table_exists?(:room_versions)
|
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.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joseph HALTER
|
@@ -9,90 +9,68 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-01-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sequel
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '3.30'
|
21
|
+
- - "<"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '5.0'
|
21
24
|
type: :runtime
|
22
25
|
prerelease: false
|
23
26
|
version_requirements: !ruby/object:Gem::Requirement
|
24
27
|
requirements:
|
25
|
-
- -
|
28
|
+
- - ">="
|
26
29
|
- !ruby/object:Gem::Version
|
27
30
|
version: '3.30'
|
28
|
-
-
|
29
|
-
name: sqlite3
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
31
|
-
requirements:
|
32
|
-
- - '>='
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: '0'
|
35
|
-
type: :development
|
36
|
-
prerelease: false
|
37
|
-
version_requirements: !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - '>='
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: '0'
|
42
|
-
- !ruby/object:Gem::Dependency
|
43
|
-
name: pg
|
44
|
-
requirement: !ruby/object:Gem::Requirement
|
45
|
-
requirements:
|
46
|
-
- - '>='
|
31
|
+
- - "<"
|
47
32
|
- !ruby/object:Gem::Version
|
48
|
-
version: '0'
|
49
|
-
type: :development
|
50
|
-
prerelease: false
|
51
|
-
version_requirements: !ruby/object:Gem::Requirement
|
52
|
-
requirements:
|
53
|
-
- - '>='
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: '0'
|
33
|
+
version: '5.0'
|
56
34
|
- !ruby/object:Gem::Dependency
|
57
35
|
name: rspec
|
58
36
|
requirement: !ruby/object:Gem::Requirement
|
59
37
|
requirements:
|
60
|
-
- - ~>
|
38
|
+
- - "~>"
|
61
39
|
- !ruby/object:Gem::Version
|
62
40
|
version: 2.10.0
|
63
41
|
type: :development
|
64
42
|
prerelease: false
|
65
43
|
version_requirements: !ruby/object:Gem::Requirement
|
66
44
|
requirements:
|
67
|
-
- - ~>
|
45
|
+
- - "~>"
|
68
46
|
- !ruby/object:Gem::Version
|
69
47
|
version: 2.10.0
|
70
48
|
- !ruby/object:Gem::Dependency
|
71
49
|
name: timecop
|
72
50
|
requirement: !ruby/object:Gem::Requirement
|
73
51
|
requirements:
|
74
|
-
- -
|
52
|
+
- - ">="
|
75
53
|
- !ruby/object:Gem::Version
|
76
54
|
version: '0'
|
77
55
|
type: :development
|
78
56
|
prerelease: false
|
79
57
|
version_requirements: !ruby/object:Gem::Requirement
|
80
58
|
requirements:
|
81
|
-
- -
|
59
|
+
- - ">="
|
82
60
|
- !ruby/object:Gem::Version
|
83
61
|
version: '0'
|
84
62
|
- !ruby/object:Gem::Dependency
|
85
63
|
name: rake
|
86
64
|
requirement: !ruby/object:Gem::Requirement
|
87
65
|
requirements:
|
88
|
-
- -
|
66
|
+
- - ">="
|
89
67
|
- !ruby/object:Gem::Version
|
90
68
|
version: '0'
|
91
69
|
type: :development
|
92
70
|
prerelease: false
|
93
71
|
version_requirements: !ruby/object:Gem::Requirement
|
94
72
|
requirements:
|
95
|
-
- -
|
73
|
+
- - ">="
|
96
74
|
- !ruby/object:Gem::Version
|
97
75
|
version: '0'
|
98
76
|
description: Bitemporal versioning for sequel, fully tested.
|
@@ -103,9 +81,10 @@ executables: []
|
|
103
81
|
extensions: []
|
104
82
|
extra_rdoc_files: []
|
105
83
|
files:
|
106
|
-
- .gitignore
|
107
|
-
- .
|
108
|
-
- .
|
84
|
+
- ".gitignore"
|
85
|
+
- ".rspec"
|
86
|
+
- ".ruby-version"
|
87
|
+
- ".travis.yml"
|
109
88
|
- Gemfile
|
110
89
|
- LICENSE
|
111
90
|
- README.md
|
@@ -131,17 +110,17 @@ require_paths:
|
|
131
110
|
- lib
|
132
111
|
required_ruby_version: !ruby/object:Gem::Requirement
|
133
112
|
requirements:
|
134
|
-
- -
|
113
|
+
- - ">="
|
135
114
|
- !ruby/object:Gem::Version
|
136
115
|
version: '0'
|
137
116
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
117
|
requirements:
|
139
|
-
- -
|
118
|
+
- - ">="
|
140
119
|
- !ruby/object:Gem::Version
|
141
120
|
version: '0'
|
142
121
|
requirements: []
|
143
122
|
rubyforge_project:
|
144
|
-
rubygems_version: 2.
|
123
|
+
rubygems_version: 2.2.1
|
145
124
|
signing_key:
|
146
125
|
specification_version: 4
|
147
126
|
summary: Bitemporal versioning for sequel.
|