public_uid 1.2.2 → 1.3.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 +5 -5
- data/.travis.yml +2 -1
- data/README.md +46 -0
- data/lib/public_uid.rb +2 -1
- data/lib/public_uid/generators/hex_string_secure_random.rb +20 -0
- data/lib/public_uid/generators/number_secure_random.rb +16 -0
- data/lib/public_uid/model.rb +1 -1
- data/lib/public_uid/version.rb +1 -1
- data/test/lib/generators/hex_string_secure_random_test.rb +34 -0
- data/test/lib/generators/number_random_test.rb +1 -1
- data/test/lib/generators/number_secure_random_test.rb +40 -0
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c2d69f6a9e786d8688e3e6c0bcfa330c14fd7b127b5e3472d7ce5b82f2f03b87
|
4
|
+
data.tar.gz: 25d0ab2367c4ff2326b8853fe1835484206ce016d364d21c09a0220a98355519
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f0b0837bb2a8104ac4cf986fe8bb595b0502ad4f53cdf7c10e9f3f99cf0e4a9f338de1eca825cc29038a14f85f0033a348192094f402b042568b5363af1ce85b
|
7
|
+
data.tar.gz: 9ab628f84f3883aa7f6c2063c74dbfd8b8897a15b6613ccdcb020af3456f45dd3b5c56f487d037e981cae3d5ab2f438c94fc1d1021be9c453e573285de4a8541
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -141,6 +141,36 @@ generator wont work if your public uniq ID column is a String (as the
|
|
141
141
|
gem would try to set Integer on a String). If you really want a number
|
142
142
|
like string you can specify number range for Range String Generator
|
143
143
|
|
144
|
+
If you want to generate random Integer using SecureRandom ruby library you can use built-in number secure generator:
|
145
|
+
|
146
|
+
```ruby
|
147
|
+
class User < ActiveRecord::Base
|
148
|
+
generate_public_uid generator: PublicUid::Generators::NumberSecureRandom.new
|
149
|
+
end
|
150
|
+
```
|
151
|
+
|
152
|
+
```irb
|
153
|
+
u = User.new
|
154
|
+
u.public_uid #=> nil
|
155
|
+
u.save! #=> true
|
156
|
+
u.public_uid #=> 4567123
|
157
|
+
```
|
158
|
+
|
159
|
+
If you want to generate random Hexadecimal String using SecureRandom ruby library you can use built-in hexadecimal string secure generator:
|
160
|
+
|
161
|
+
```ruby
|
162
|
+
class User < ActiveRecord::Base
|
163
|
+
generate_public_uid generator: PublicUid::Generators::HexStringSecureRandom.new
|
164
|
+
end
|
165
|
+
```
|
166
|
+
|
167
|
+
```irb
|
168
|
+
u = User.new
|
169
|
+
u.public_uid #=> nil
|
170
|
+
u.save! #=> true
|
171
|
+
u.public_uid #=> 0b30ffbc7de3b362
|
172
|
+
```
|
173
|
+
|
144
174
|
### Customizing generated string
|
145
175
|
|
146
176
|
```ruby
|
@@ -150,6 +180,14 @@ class User < ActiveRecord::Base
|
|
150
180
|
end
|
151
181
|
```
|
152
182
|
|
183
|
+
or in case you are using SecureRandom ruby library:
|
184
|
+
|
185
|
+
```ruby
|
186
|
+
class User < ActiveRecord::Base
|
187
|
+
generate_public_uid generator: PublicUid::Generators::HexStringSecureRandom.new(4) #4 is length of hexadecimal string. If this argument is not set, length of hexadecimal string will be 8 characters.
|
188
|
+
end
|
189
|
+
```
|
190
|
+
|
153
191
|
```irb
|
154
192
|
u = User.new
|
155
193
|
u.public_uid #=> nil
|
@@ -177,6 +215,14 @@ class User < ActiveRecord::Base
|
|
177
215
|
end
|
178
216
|
```
|
179
217
|
|
218
|
+
or in case you are using SecureRandom ruby library:
|
219
|
+
```ruby
|
220
|
+
class User < ActiveRecord::Base
|
221
|
+
UID_RANGE = 1_000..4_000
|
222
|
+
generate_public_uid generator: PublicUid::Generators::NumberSecureRandom.new(UID_RANGE)
|
223
|
+
end
|
224
|
+
```
|
225
|
+
|
180
226
|
```irb
|
181
227
|
u = User.new
|
182
228
|
u.public_uid #=> nil
|
data/lib/public_uid.rb
CHANGED
@@ -4,7 +4,8 @@ require "public_uid/set_public_uid"
|
|
4
4
|
require "public_uid/model"
|
5
5
|
require "public_uid/generators/number_random"
|
6
6
|
require "public_uid/generators/range_string"
|
7
|
-
|
7
|
+
require "public_uid/generators/number_secure_random"
|
8
|
+
require "public_uid/generators/hex_string_secure_random"
|
8
9
|
require 'public_uid/tasks' if defined?(Rails)
|
9
10
|
|
10
11
|
require 'orm/active_record' if defined?(ActiveRecord::Base)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
|
3
|
+
module PublicUid
|
4
|
+
module Generators
|
5
|
+
class HexStringSecureRandom
|
6
|
+
def initialize(length=8)
|
7
|
+
@length = length
|
8
|
+
end
|
9
|
+
|
10
|
+
def generate
|
11
|
+
if @length.odd?
|
12
|
+
result = SecureRandom.hex( (@length+1)/2 ) #because in "SecureRandom.hex(@length)" @length means length in bytes = 2 hexadecimal characters
|
13
|
+
return result[0...-1]
|
14
|
+
else
|
15
|
+
SecureRandom.hex(@length/2)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
|
3
|
+
module PublicUid
|
4
|
+
module Generators
|
5
|
+
class NumberSecureRandom
|
6
|
+
def initialize(scale = 1_000_000..9_999_999)
|
7
|
+
@scale = scale
|
8
|
+
end
|
9
|
+
|
10
|
+
def generate()
|
11
|
+
generated_number = SecureRandom.random_number( (@scale.max - @scale.min) ) #because SecureRandom.random_number can have only one argument = max value.
|
12
|
+
return (generated_number + @scale.min)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/public_uid/model.rb
CHANGED
data/lib/public_uid/version.rb
CHANGED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe 'HexStringSecureRandom' do
|
4
|
+
|
5
|
+
describe "#generate" do
|
6
|
+
subject{ instance.generate }
|
7
|
+
|
8
|
+
context 'by default' do
|
9
|
+
let(:instance){ PublicUid::Generators::HexStringSecureRandom.new }
|
10
|
+
it 'generates 8 chars hexa string' do
|
11
|
+
subject.length.must_equal 8
|
12
|
+
subject.must_be_kind_of String
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'generates hexadecimal chars' do
|
16
|
+
subject.must_match(/^[a-f0-9]*$/)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'when 10 hexa chars' do
|
21
|
+
let(:instance){ PublicUid::Generators::HexStringSecureRandom.new(10) }
|
22
|
+
it 'generates 10 chars string' do
|
23
|
+
subject.length.must_equal 10
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'when 11 hexa chars' do
|
28
|
+
let(:instance){ PublicUid::Generators::HexStringSecureRandom.new(11) }
|
29
|
+
it 'generates 11 chars string' do
|
30
|
+
subject.length.must_equal 11
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe 'NumberSecureRandom' do
|
4
|
+
|
5
|
+
describe "#generate" do
|
6
|
+
subject{ instance.generate }
|
7
|
+
|
8
|
+
context 'by default' do
|
9
|
+
let(:instance){ PublicUid::Generators::NumberSecureRandom.new }
|
10
|
+
it 'generates 7 digits' do
|
11
|
+
subject.to_i.to_s.length.must_equal 7
|
12
|
+
subject.must_be_kind_of Integer
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'when specifying number between 20 - 21' do
|
17
|
+
let(:instance){ PublicUid::Generators::NumberSecureRandom.new(20..21) }
|
18
|
+
it 'generates 2 digits' do
|
19
|
+
subject.to_i.to_s.length.must_equal 2
|
20
|
+
subject.must_be_kind_of Integer
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'generates integer has to be 20 or 21' do
|
24
|
+
[20, 21].must_include subject
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'when specifying number between 1000 - 9999' do
|
29
|
+
let(:instance){ PublicUid::Generators::NumberSecureRandom.new(1000..9999) }
|
30
|
+
it 'generates 4 digits' do
|
31
|
+
subject.to_i.to_s.length.must_equal 4
|
32
|
+
subject.must_be_kind_of Integer
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'generates integer has to be between 1000 and 9999' do
|
36
|
+
(1000..9999).must_include subject
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: public_uid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomas Valent
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: orm_adapter
|
@@ -123,7 +123,9 @@ files:
|
|
123
123
|
- Rakefile
|
124
124
|
- lib/orm/active_record.rb
|
125
125
|
- lib/public_uid.rb
|
126
|
+
- lib/public_uid/generators/hex_string_secure_random.rb
|
126
127
|
- lib/public_uid/generators/number_random.rb
|
128
|
+
- lib/public_uid/generators/number_secure_random.rb
|
127
129
|
- lib/public_uid/generators/range_string.rb
|
128
130
|
- lib/public_uid/model.rb
|
129
131
|
- lib/public_uid/set_public_uid.rb
|
@@ -131,7 +133,9 @@ files:
|
|
131
133
|
- lib/public_uid/tasks/generate.rake
|
132
134
|
- lib/public_uid/version.rb
|
133
135
|
- public_uid.gemspec
|
136
|
+
- test/lib/generators/hex_string_secure_random_test.rb
|
134
137
|
- test/lib/generators/number_random_test.rb
|
138
|
+
- test/lib/generators/number_secure_random_test.rb
|
135
139
|
- test/lib/generators/range_string_test.rb
|
136
140
|
- test/lib/set_public_uid_test.rb
|
137
141
|
- test/lib/tasks/generate_test.rb
|
@@ -162,12 +166,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
162
166
|
version: '0'
|
163
167
|
requirements: []
|
164
168
|
rubyforge_project:
|
165
|
-
rubygems_version: 2.
|
169
|
+
rubygems_version: 2.7.7
|
166
170
|
signing_key:
|
167
171
|
specification_version: 4
|
168
172
|
summary: Automatic generates public UID column
|
169
173
|
test_files:
|
174
|
+
- test/lib/generators/hex_string_secure_random_test.rb
|
170
175
|
- test/lib/generators/number_random_test.rb
|
176
|
+
- test/lib/generators/number_secure_random_test.rb
|
171
177
|
- test/lib/generators/range_string_test.rb
|
172
178
|
- test/lib/set_public_uid_test.rb
|
173
179
|
- test/lib/tasks/generate_test.rb
|