sequel-nonsequential_id 1.0.0 → 1.0.1
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/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/lib/sequel/plugins/nonsequential_id.rb +14 -11
- data/sequel-unique_id.gemspec +2 -1
- data/test/nonsequential_id_test.rb +28 -2
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 840ea9c131d342706670449161549bdb60d487d1f840d55b9d2ea62a0a739638
|
4
|
+
data.tar.gz: 546f9996f736dbf205dc5a371267f4be1a2df900066ac2c069242176bf440c27
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 755931214c9f7dd82076f0d5c66f2fb9b69f418a5beeb25b26eb2cc021c91f472ab4701266e478f102012929dbb27a3ca69666e841ee828503b348a4933a5e10
|
7
|
+
data.tar.gz: 1367bc011bb4014671b7dce4e2326d1f9fe723698351dc4f29bd455f832f04d0559d28cb01a3d24bef4bc89803e1999f9aae1314abe4b54fc93bae5cd5303491
|
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
sequel-uniqueid
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.5.1
|
@@ -15,21 +15,24 @@ module Sequel
|
|
15
15
|
end
|
16
16
|
|
17
17
|
module InstanceMethods
|
18
|
-
def
|
19
|
-
|
20
|
-
|
18
|
+
def around_create
|
19
|
+
begin
|
20
|
+
set_nonsequential_id
|
21
|
+
super
|
22
|
+
rescue Sequel::UniqueConstraintViolation => e
|
23
|
+
if e.message =~ /\b#{model.table_name}\.#{model.id_field}\b/
|
24
|
+
retry
|
25
|
+
else
|
26
|
+
raise
|
27
|
+
end
|
28
|
+
end
|
21
29
|
end
|
22
30
|
|
31
|
+
|
23
32
|
private def set_nonsequential_id
|
24
33
|
method = :"#{model.id_field}="
|
25
|
-
|
26
|
-
|
27
|
-
id = SecureRandom.hex.hex.to_s(36)
|
28
|
-
unless model.first("#{model.id_field}": id)
|
29
|
-
set_column_value(method, id)
|
30
|
-
return id
|
31
|
-
end
|
32
|
-
end
|
34
|
+
id = SecureRandom.hex.hex.to_s(36)
|
35
|
+
set_column_value(method, id)
|
33
36
|
end
|
34
37
|
end
|
35
38
|
end
|
data/sequel-unique_id.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = 'sequel-nonsequential_id'
|
5
|
-
spec.version = '1.0.
|
5
|
+
spec.version = '1.0.1'
|
6
6
|
spec.authors = ['Jesse Bowes']
|
7
7
|
spec.email = ['jbowes@dashingrocket.com']
|
8
8
|
spec.summary = 'Sequel Non-Sequential Unique ID Plugin'
|
@@ -21,4 +21,5 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency 'bundler', '~> 1.16'
|
22
22
|
spec.add_development_dependency 'rake', '~> 12.0'
|
23
23
|
spec.add_development_dependency 'sqlite3', '~> 1.3'
|
24
|
+
spec.add_development_dependency 'mocha', '~> 1.7'
|
24
25
|
end
|
@@ -1,5 +1,8 @@
|
|
1
1
|
require 'test/unit'
|
2
|
+
require 'mocha/test_unit'
|
3
|
+
|
2
4
|
require 'sequel'
|
5
|
+
require 'timeout'
|
3
6
|
|
4
7
|
require_relative '../lib/sequel/plugins/nonsequential_id'
|
5
8
|
|
@@ -7,7 +10,7 @@ DB = Sequel.sqlite
|
|
7
10
|
|
8
11
|
DB.create_table :test_models do
|
9
12
|
primary_key :id, type: String, auto_increment: false
|
10
|
-
String :name
|
13
|
+
String :name, unique: true
|
11
14
|
end
|
12
15
|
|
13
16
|
DB.create_table :test_model2s do
|
@@ -28,6 +31,11 @@ class NonsequentialIdTest < Test::Unit::TestCase
|
|
28
31
|
|
29
32
|
end
|
30
33
|
|
34
|
+
def teardown
|
35
|
+
DB[:test_models].delete
|
36
|
+
DB[:test_model2s].delete
|
37
|
+
end
|
38
|
+
|
31
39
|
def test_nonsequential_id
|
32
40
|
obj1 = TestModel.create(name: 'obj1')
|
33
41
|
obj2 = TestModel.create(name: 'obj2')
|
@@ -44,7 +52,7 @@ class NonsequentialIdTest < Test::Unit::TestCase
|
|
44
52
|
assert_equal(obj2.id, TestModel.first(id: obj2.id).id)
|
45
53
|
end
|
46
54
|
|
47
|
-
def
|
55
|
+
def test_nonsequential_id_custom_field
|
48
56
|
obj1 = TestModel2.create(name: 'obj1')
|
49
57
|
obj2 = TestModel2.create(name: 'obj2')
|
50
58
|
|
@@ -59,4 +67,22 @@ class NonsequentialIdTest < Test::Unit::TestCase
|
|
59
67
|
assert_equal(obj1.custom_id, TestModel2.first(custom_id: obj1.custom_id).custom_id)
|
60
68
|
assert_equal(obj2.custom_id, TestModel2.first(custom_id: obj2.custom_id).custom_id)
|
61
69
|
end
|
70
|
+
|
71
|
+
def test_duplicate_id
|
72
|
+
SecureRandom.stubs(:hex).returns('a', 'a', 'b')
|
73
|
+
obj1 = TestModel.create(name: 'obj1')
|
74
|
+
obj2 = nil
|
75
|
+
|
76
|
+
Timeout::timeout(1) do
|
77
|
+
obj2 = TestModel.create(name: 'obj2')
|
78
|
+
end
|
79
|
+
|
80
|
+
assert_equal 'a', obj1.id
|
81
|
+
assert_equal 'b', obj2.id
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_duplicate_other
|
85
|
+
TestModel.create(name: 'obj1')
|
86
|
+
assert_raise(Sequel::UniqueConstraintViolation){TestModel.create(name: 'obj1')}
|
87
|
+
end
|
62
88
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequel-nonsequential_id
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jesse Bowes
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-10-
|
11
|
+
date: 2018-10-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '1.3'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: mocha
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.7'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.7'
|
83
97
|
description: Automatically generate non-sequential (pseudo-random) IDs for Sequel
|
84
98
|
Models
|
85
99
|
email:
|
@@ -89,6 +103,8 @@ extensions: []
|
|
89
103
|
extra_rdoc_files: []
|
90
104
|
files:
|
91
105
|
- ".gitignore"
|
106
|
+
- ".ruby-gemset"
|
107
|
+
- ".ruby-version"
|
92
108
|
- Gemfile
|
93
109
|
- LICENSE
|
94
110
|
- README.md
|