pg_random_id 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: df94e62bb3e5030a92bfcd23854079f7698587f7
4
+ data.tar.gz: 1f468142694c905c84f8e5683476e5c1ca1c4dae
5
+ SHA512:
6
+ metadata.gz: 74e0582ccab04dea4c1ffb12b30a9f7c712fbc3e7cef233fb01d016fdb56a7ef417b10b0451dc18b5eff5de0d7b1514709c0af1c18084606bf3079e8ad512067
7
+ data.tar.gz: a73bd3b7cfbd08f8416d2fe6b229e4a60de05310edecabbc88c450bdc275fdec55a95a69cdb10a095347a3f7b977614daa5d0dcebfc299d087b4afe5aa2d0547
@@ -4,15 +4,37 @@ CREATE TABLE pri_keys (
4
4
  sequence regclass PRIMARY KEY,
5
5
  key integer NOT NULL);
6
6
 
7
+ CREATE OR REPLACE FUNCTION
8
+ pri_random_key() RETURNS integer
9
+ LANGUAGE sql
10
+ VOLATILE
11
+ AS $$
12
+ SELECT trunc(random() * 2^15)::integer;
13
+ $$;
14
+
15
+ CREATE OR REPLACE FUNCTION
16
+ pri_key(_sequence regclass) RETURNS integer
17
+ LANGUAGE plpgsql
18
+ STRICT
19
+ AS $$
20
+ DECLARE
21
+ _key integer = key FROM pri_keys WHERE sequence = _sequence;
22
+ BEGIN
23
+ IF _key IS NULL THEN
24
+ RAISE WARNING 'key not found for sequence %, generating a random one', _sequence;
25
+ INSERT INTO pri_keys(sequence, key) VALUES (_sequence, pri_random_key()) RETURNING key INTO _key;
26
+ END IF;
27
+ RETURN _key;
28
+ END
29
+ $$;
30
+
7
31
  CREATE OR REPLACE FUNCTION
8
32
  pri_nextval(sequence regclass) RETURNS integer
9
33
  LANGUAGE sql
10
34
  VOLATILE
11
35
  STRICT
12
36
  AS $$
13
- SELECT pri_scramble(key, nextval($1))
14
- FROM pri_keys
15
- WHERE sequence = $1;
37
+ SELECT pri_scramble(pri_key($1), nextval($1));
16
38
  $$;
17
39
 
18
40
  CREATE OR REPLACE FUNCTION
@@ -21,7 +43,5 @@ LANGUAGE sql
21
43
  VOLATILE
22
44
  STRICT
23
45
  AS $$
24
- SELECT lpad(crockford(pri_scramble(key, nextval($1))), 6, '0')
25
- FROM pri_keys
26
- WHERE sequence = $1;
46
+ SELECT lpad(crockford(pri_scramble(pri_key($1), nextval($1))), 6, '0');
27
47
  $$;
@@ -1,3 +1,3 @@
1
1
  module PgRandomId
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,6 @@
1
+ require 'active_record'
2
+ require 'sequel'
3
+
1
4
  require 'pg_random_id'
2
5
 
3
6
  require 'helpers/active_record_helper'
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ require 'active_record'
4
+
5
+ describe "pri_nextval(regclass)" do
6
+ include_context 'active_record'
7
+ before do
8
+ migration.create_random_id_functions
9
+ migration.create_table :foo
10
+ migration.random_id :foo
11
+ end
12
+
13
+ context "with removed key entry" do
14
+ before do
15
+ execute "DELETE FROM pri_keys"
16
+ end
17
+
18
+ it "doesn't quietly return null" do
19
+ execute("SELECT pri_nextval('foo_id_seq'::regclass)").values[0].should_not be_nil
20
+ end
21
+ end
22
+ end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_random_id
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
5
- prerelease:
4
+ version: 1.0.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Rafał Rzepecki
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-20 00:00:00.000000000 Z
11
+ date: 2013-07-15 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: activerecord
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rspec
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: sequel
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: pg
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ~>
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ~>
76
67
  - !ruby/object:Gem::Version
@@ -78,7 +69,6 @@ dependencies:
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: ci_reporter
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ~>
84
74
  - !ruby/object:Gem::Version
@@ -86,7 +76,6 @@ dependencies:
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - ~>
92
81
  - !ruby/object:Gem::Version
@@ -94,7 +83,6 @@ dependencies:
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: rake
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
87
  - - ~>
100
88
  - !ruby/object:Gem::Version
@@ -102,7 +90,6 @@ dependencies:
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
94
  - - ~>
108
95
  - !ruby/object:Gem::Version
@@ -136,30 +123,30 @@ files:
136
123
  - spec/migrations_spec.rb
137
124
  - spec/spec_helper.rb
138
125
  - spec/sql/crockford_spec.rb
126
+ - spec/sql/keytable_spec.rb
139
127
  - spec/sql/scramble_spec.rb
140
128
  homepage: https://github.com/inscitiv/pg_random_id
141
129
  licenses: []
130
+ metadata: {}
142
131
  post_install_message:
143
132
  rdoc_options: []
144
133
  require_paths:
145
134
  - lib
146
135
  required_ruby_version: !ruby/object:Gem::Requirement
147
- none: false
148
136
  requirements:
149
- - - ! '>='
137
+ - - '>='
150
138
  - !ruby/object:Gem::Version
151
139
  version: '0'
152
140
  required_rubygems_version: !ruby/object:Gem::Requirement
153
- none: false
154
141
  requirements:
155
- - - ! '>='
142
+ - - '>='
156
143
  - !ruby/object:Gem::Version
157
144
  version: '0'
158
145
  requirements: []
159
146
  rubyforge_project:
160
- rubygems_version: 1.8.24
147
+ rubygems_version: 2.0.3
161
148
  signing_key:
162
- specification_version: 3
149
+ specification_version: 4
163
150
  summary: Pseudo-random record ids in Postgres
164
151
  test_files:
165
152
  - spec/helpers/active_record_helper.rb
@@ -168,5 +155,5 @@ test_files:
168
155
  - spec/migrations_spec.rb
169
156
  - spec/spec_helper.rb
170
157
  - spec/sql/crockford_spec.rb
158
+ - spec/sql/keytable_spec.rb
171
159
  - spec/sql/scramble_spec.rb
172
- has_rdoc: