lite-uxid 2.0.0 → 2.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/CHANGELOG.md +6 -0
- data/Gemfile.lock +1 -1
- data/README.md +12 -40
- data/benchmarks/compare.rb +15 -7
- data/lib/generators/lite/uxid/templates/install.rb +1 -1
- data/lib/lite/uxid/configuration.rb +2 -2
- data/lib/lite/uxid/record/{scatterid.rb → obfuscateid.rb} +4 -8
- data/lib/lite/uxid/reversible/{scatterid.rb → obfuscateid.rb} +5 -8
- data/lib/lite/uxid/version.rb +1 -1
- data/lib/lite/uxid.rb +2 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9078e4e13dc6877ed30a6a0028ad4327ff95d3056a5303f789137272e2bb0f12
|
4
|
+
data.tar.gz: c25e8acbb22ad4e4381bf9b07018eaf12daaf8e1d0123cee24f5fa9c8af8e87a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd5d7ef2cd4c425fb798dea874a7f395e20e5514ca07fb807d673feb75187e8a236236bd7f833084983a820d71a05a7a27c80d72138a13f888fb5b088a4c869f
|
7
|
+
data.tar.gz: 24462c53958076c1435e1012f3608002d23fdb01b3d59d00ac9d7d78c81f8f1d91b3a80fcac78d9a6a9ce358d9db728af6dd6df3d6815037a1c7dfa25515ba3f
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [2.0.1] - 2024-09-23
|
10
|
+
### Changed
|
11
|
+
- Renamed `Scatterid` to `Obfuscateid`
|
12
|
+
### Removed
|
13
|
+
- Removed prefix option from obfuscateid
|
14
|
+
|
9
15
|
## [2.0.0] - 2024-09-23
|
10
16
|
### Added
|
11
17
|
- Scatterid reversible lib
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -27,9 +27,9 @@ Or install it yourself as:
|
|
27
27
|
|
28
28
|
* [Configuration](#configuration)
|
29
29
|
* [Usage](#usage)
|
30
|
-
* [
|
30
|
+
* [HashID](#hashid)
|
31
31
|
* [NanoID](#nanoid)
|
32
|
-
* [
|
32
|
+
* [ObfuscateID](#obfuscateid)
|
33
33
|
* [ULID](#ulid)
|
34
34
|
* [UUID](#uuid)
|
35
35
|
* [Options](#options)
|
@@ -88,13 +88,13 @@ Lite::Uxid::Reversible::Hashid.decode('1zWr1m0') #=> 10
|
|
88
88
|
Lite::Uxid::Irreversible::Nanoid.encode #=> 'sMuNUa3Cegn6r5GRQ4Ij2'
|
89
89
|
```
|
90
90
|
|
91
|
-
##
|
91
|
+
## ObfuscateID
|
92
92
|
|
93
93
|
[More information](https://github.com/namick/scatter_swap)
|
94
94
|
|
95
95
|
```ruby
|
96
|
-
Lite::Uxid::Reversible::
|
97
|
-
Lite::Uxid::Reversible::
|
96
|
+
Lite::Uxid::Reversible::Obfuscateid.encode(10) #=> '2056964183'
|
97
|
+
Lite::Uxid::Reversible::Obfuscateid.decode(2056964183) #=> 10
|
98
98
|
```
|
99
99
|
|
100
100
|
## ULID
|
@@ -128,7 +128,7 @@ Passable options are:
|
|
128
128
|
charset: 'string', # Available for: hashid, nanoid, ulid
|
129
129
|
salt: 'string', # Available for: hashid
|
130
130
|
size: 'integer', # Available for: hashid, nanoid, ulid
|
131
|
-
spin: 'integer', # Available for:
|
131
|
+
spin: 'integer', # Available for: obfuscateid
|
132
132
|
version: 'integer', # Available for: uuid
|
133
133
|
prefix: 'string' # Available for: hashid, nanoid
|
134
134
|
}
|
@@ -159,34 +159,11 @@ t.uuid :uxid, null: false, index: { unique: true }
|
|
159
159
|
#### HashID
|
160
160
|
```ruby
|
161
161
|
class User < ActiveRecord::Base
|
162
|
+
# Pick one:
|
162
163
|
include Lite::Uxid::Record::Hashid
|
163
|
-
end
|
164
|
-
```
|
165
|
-
|
166
|
-
#### NanoID
|
167
|
-
```ruby
|
168
|
-
class User < ActiveRecord::Base
|
169
164
|
include Lite::Uxid::Record::Nanoid
|
170
|
-
|
171
|
-
```
|
172
|
-
|
173
|
-
#### ScatterID
|
174
|
-
```ruby
|
175
|
-
class User < ActiveRecord::Base
|
176
|
-
include Lite::Uxid::Record::Scatterid
|
177
|
-
end
|
178
|
-
```
|
179
|
-
|
180
|
-
#### ULID
|
181
|
-
```ruby
|
182
|
-
class User < ActiveRecord::Base
|
165
|
+
include Lite::Uxid::Record::Obfuscateid
|
183
166
|
include Lite::Uxid::Record::Ulid
|
184
|
-
end
|
185
|
-
```
|
186
|
-
|
187
|
-
#### UUID
|
188
|
-
```ruby
|
189
|
-
class User < ActiveRecord::Base
|
190
167
|
include Lite::Uxid::Record::Uuid
|
191
168
|
end
|
192
169
|
```
|
@@ -198,16 +175,16 @@ class User < ActiveRecord::Base
|
|
198
175
|
include Lite::Uxid::Record::Hashid
|
199
176
|
|
200
177
|
def uxid_prefix
|
201
|
-
"
|
178
|
+
"usr_"
|
202
179
|
end
|
203
180
|
end
|
204
181
|
```
|
205
182
|
|
206
183
|
**Usage**
|
207
184
|
|
208
|
-
Using
|
185
|
+
Using the `hashid` and `nanoid` above provide handy methods to find records by uxid.
|
209
186
|
|
210
|
-
####
|
187
|
+
#### Hashing methods
|
211
188
|
```ruby
|
212
189
|
user = User.new
|
213
190
|
user.id_to_uxid #=> Encodes the records id to uxid
|
@@ -222,15 +199,10 @@ User.find_by_uxid!('x123') #=> Raises an ActiveRecord::RecordNotFound error if n
|
|
222
199
|
|
223
200
|
## Benchmarks
|
224
201
|
|
225
|
-
The classes ranked from fastest to slowest are `UUID`, `
|
202
|
+
The classes ranked from fastest to slowest are `UUID`, `HashID`, `NanoID`, `ULID`, and `ObfuscateID`.
|
226
203
|
|
227
204
|
View how each compares by running the [benchmarks](https://github.com/drexed/lite-uxid/tree/master/benchmarks).
|
228
205
|
|
229
|
-
#### Alternatives
|
230
|
-
|
231
|
-
Learn more about alternative functions and more advance hashing setups:
|
232
|
-
[hashids.org](https://hashids.org)
|
233
|
-
|
234
206
|
## Development
|
235
207
|
|
236
208
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/benchmarks/compare.rb
CHANGED
@@ -8,22 +8,30 @@ require "lite/uxid"
|
|
8
8
|
Benchmark.ips do |x|
|
9
9
|
x.report("Hashid") do
|
10
10
|
id = rand(1..1_000_000)
|
11
|
-
Lite::Uxid::Hashid.encode(id)
|
11
|
+
Lite::Uxid::Reversible::Hashid.encode(id)
|
12
12
|
end
|
13
13
|
|
14
|
+
x.report("Obfuscateid") do
|
15
|
+
id = rand(1..1_000_000)
|
16
|
+
Lite::Uxid::Reversible::Obfuscateid.encode(id)
|
17
|
+
end
|
18
|
+
|
19
|
+
# The irreversible examples include `rand` simulate
|
20
|
+
# the extra work just like reversible examples.
|
21
|
+
|
14
22
|
x.report("NanoID") do
|
15
|
-
_id = rand(1..1_000_000)
|
16
|
-
Lite::Uxid::Nanoid.encode
|
23
|
+
_id = rand(1..1_000_000)
|
24
|
+
Lite::Uxid::Irreversible::Nanoid.encode
|
17
25
|
end
|
18
26
|
|
19
27
|
x.report("ULID") do
|
20
|
-
_id = rand(1..1_000_000)
|
21
|
-
Lite::Uxid::Ulid.encode
|
28
|
+
_id = rand(1..1_000_000)
|
29
|
+
Lite::Uxid::Irreversible::Ulid.encode
|
22
30
|
end
|
23
31
|
|
24
32
|
x.report("UUID") do
|
25
|
-
_id = rand(1..1_000_000)
|
26
|
-
Lite::Uxid::Uuid.encode
|
33
|
+
_id = rand(1..1_000_000)
|
34
|
+
Lite::Uxid::Irreversible::Uuid.encode
|
27
35
|
end
|
28
36
|
|
29
37
|
x.compare!
|
@@ -6,7 +6,7 @@ Lite::Uxid.configure do |config|
|
|
6
6
|
config.hashid_size = 16
|
7
7
|
config.nanoid_charset = "_-0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
8
8
|
config.nanoid_size = 21
|
9
|
-
config.
|
9
|
+
config.obfuscateid_spin = 0
|
10
10
|
config.ulid_charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
11
11
|
config.ulid_size = 26
|
12
12
|
config.uuid_version = 4
|
@@ -11,7 +11,7 @@ module Lite
|
|
11
11
|
|
12
12
|
attr_accessor :hashid_charset, :hashid_size, :hashid_salt,
|
13
13
|
:nanoid_charset, :nanoid_size,
|
14
|
-
:
|
14
|
+
:obfuscateid_spin,
|
15
15
|
:ulid_charset, :ulid_size,
|
16
16
|
:uuid_version
|
17
17
|
|
@@ -21,7 +21,7 @@ module Lite
|
|
21
21
|
@hashid_size = 16
|
22
22
|
@nanoid_charset = WEB_SAFE
|
23
23
|
@nanoid_size = 21
|
24
|
-
@
|
24
|
+
@obfuscateid_spin = 0
|
25
25
|
@ulid_charset = COCKFORDS_32
|
26
26
|
@ulid_size = 26
|
27
27
|
@uuid_version = 4
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Lite
|
4
4
|
module Uxid
|
5
5
|
module Record
|
6
|
-
module
|
6
|
+
module Obfuscateid
|
7
7
|
|
8
8
|
def self.included(base)
|
9
9
|
base.extend ClassMethods
|
@@ -17,7 +17,7 @@ module Lite
|
|
17
17
|
module ClassMethods
|
18
18
|
|
19
19
|
def find_by_uxid(uxid)
|
20
|
-
decoded_id = Lite::Uxid::Reversible::
|
20
|
+
decoded_id = Lite::Uxid::Reversible::Obfuscateid.decode(uxid)
|
21
21
|
find_by(id: decoded_id)
|
22
22
|
end
|
23
23
|
|
@@ -33,17 +33,13 @@ module Lite
|
|
33
33
|
def id_to_uxid
|
34
34
|
return unless respond_to?(:uxid)
|
35
35
|
|
36
|
-
Lite::Uxid::Reversible::
|
36
|
+
Lite::Uxid::Reversible::Obfuscateid.encode(id)
|
37
37
|
end
|
38
38
|
|
39
39
|
def uxid_to_id
|
40
40
|
return unless respond_to?(:uxid)
|
41
41
|
|
42
|
-
Lite::Uxid::Reversible::
|
43
|
-
end
|
44
|
-
|
45
|
-
def uxid_prefix
|
46
|
-
nil
|
42
|
+
Lite::Uxid::Reversible::Obfuscateid.decode(uxid)
|
47
43
|
end
|
48
44
|
|
49
45
|
private
|
@@ -3,21 +3,18 @@
|
|
3
3
|
module Lite
|
4
4
|
module Uxid
|
5
5
|
module Reversible
|
6
|
-
class
|
6
|
+
class Obfuscateid < Base
|
7
7
|
|
8
8
|
def encode
|
9
9
|
swap
|
10
10
|
scatter
|
11
|
-
|
12
|
-
"#{coder_prefix}#{joined_array}"
|
11
|
+
result
|
13
12
|
end
|
14
13
|
|
15
14
|
def decode
|
16
|
-
@id = id.delete_prefix(coder_prefix.to_s)
|
17
|
-
|
18
15
|
unscatter
|
19
16
|
unswap
|
20
|
-
|
17
|
+
result
|
21
18
|
end
|
22
19
|
|
23
20
|
private
|
@@ -30,8 +27,8 @@ module Lite
|
|
30
27
|
@coder_array ||= zero_padded_id.chars.collect(&:to_i)
|
31
28
|
end
|
32
29
|
|
33
|
-
def
|
34
|
-
coder_array.join
|
30
|
+
def result
|
31
|
+
coder_array.join.to_i
|
35
32
|
end
|
36
33
|
|
37
34
|
def swapper_map(index)
|
data/lib/lite/uxid/version.rb
CHANGED
data/lib/lite/uxid.rb
CHANGED
@@ -12,9 +12,9 @@ require "lite/uxid/irreversible/ulid"
|
|
12
12
|
require "lite/uxid/irreversible/uuid"
|
13
13
|
require "lite/uxid/reversible/base"
|
14
14
|
require "lite/uxid/reversible/hashid"
|
15
|
-
require "lite/uxid/reversible/
|
15
|
+
require "lite/uxid/reversible/obfuscateid"
|
16
16
|
require "lite/uxid/record/hashid"
|
17
17
|
require "lite/uxid/record/nanoid"
|
18
|
-
require "lite/uxid/record/
|
18
|
+
require "lite/uxid/record/obfuscateid"
|
19
19
|
require "lite/uxid/record/ulid"
|
20
20
|
require "lite/uxid/record/uuid"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lite-uxid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juan Gomez
|
@@ -225,12 +225,12 @@ files:
|
|
225
225
|
- lib/lite/uxid/irreversible/uuid.rb
|
226
226
|
- lib/lite/uxid/record/hashid.rb
|
227
227
|
- lib/lite/uxid/record/nanoid.rb
|
228
|
-
- lib/lite/uxid/record/
|
228
|
+
- lib/lite/uxid/record/obfuscateid.rb
|
229
229
|
- lib/lite/uxid/record/ulid.rb
|
230
230
|
- lib/lite/uxid/record/uuid.rb
|
231
231
|
- lib/lite/uxid/reversible/base.rb
|
232
232
|
- lib/lite/uxid/reversible/hashid.rb
|
233
|
-
- lib/lite/uxid/reversible/
|
233
|
+
- lib/lite/uxid/reversible/obfuscateid.rb
|
234
234
|
- lib/lite/uxid/version.rb
|
235
235
|
- lite-uxid.gemspec
|
236
236
|
homepage: http://drexed.github.io/lite-uxid
|