sqids 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/README.md +5 -0
- data/lib/sqids.rb +13 -3
- data/sqids.gemspec +1 -1
- metadata +2 -3
- data/spec/uniques_spec.rb +0 -62
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8738a24714961747ba8fb004ffba899f34889de1e65ba3932a59a50b85558aef
|
4
|
+
data.tar.gz: 6b26a781bd07bc2b805af36d29bd0cc838351569a3a44988e171b6083e75a3e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4dbacb914b13fc4a8125f3b313359db82afe1251d5f9ef7d5eaa724fb8b474521e102ec00ef938d621259c52541bf9f6b63647ef1d24243e3bd72a1ab07f6926
|
7
|
+
data.tar.gz: 33660c785f18c7a2692e3e184c275c104c73dd72ac5aa6bca940f1da7dda1a5b3f66c30f55c4010d488bec694bafd0329979bcce3f3e0db20bfb87bdf01a6f4b
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
**v0.2.1:**
|
4
|
+
- Improvement: speeding up Sqids.new: [[PR #7](https://github.com/sqids/sqids-ruby/pull/7)] (thanks to [@lawrencegripper](https://github.com/lawrencegripper))
|
5
|
+
|
3
6
|
**v0.2.0:** **⚠️ BREAKING CHANGE**
|
4
7
|
- **Breaking change**: IDs change. Algorithm has been fine-tuned for better performance [[Issue #11](https://github.com/sqids/sqids-spec/issues/11)]
|
5
8
|
- `alphabet` cannot contain multibyte characters
|
data/README.md
CHANGED
@@ -86,6 +86,11 @@ id = sqids.encode([1, 2, 3]) # 'se8ojk'
|
|
86
86
|
numbers = sqids.decode(id) # [1, 2, 3]
|
87
87
|
```
|
88
88
|
|
89
|
+
> [!WARNING]
|
90
|
+
> If you provide a large custom blocklist and/or custom alphabet, calls to `Sqid.new` can take
|
91
|
+
> ~1ms. You should create a singleton instance of `Sqid` at service start and reusing that rather than
|
92
|
+
> repeatedly calling `Squid.new`
|
93
|
+
|
89
94
|
## 📝 License
|
90
95
|
|
91
96
|
[MIT](LICENSE)
|
data/lib/sqids.rb
CHANGED
@@ -29,9 +29,19 @@ class Sqids
|
|
29
29
|
"Minimum length has to be between 0 and #{min_length_limit}"
|
30
30
|
end
|
31
31
|
|
32
|
-
filtered_blocklist = blocklist
|
33
|
-
|
34
|
-
|
32
|
+
filtered_blocklist = if blocklist == DEFAULT_BLOCKLIST && alphabet == DEFAULT_ALPHABET
|
33
|
+
# If the blocklist is the default one, we don't need to filter it
|
34
|
+
# we already know it's valid (lowercase and words longer than 3 chars)
|
35
|
+
blocklist
|
36
|
+
else
|
37
|
+
# Downcase the alphabet once, rather than in the loop, to save significant time
|
38
|
+
# with large blocklists
|
39
|
+
downcased_alphabet = alphabet.downcase.chars
|
40
|
+
# Filter the blocklist
|
41
|
+
blocklist.select do |word|
|
42
|
+
word.length >= 3 && (word.downcase.chars - downcased_alphabet).empty?
|
43
|
+
end.to_set(&:downcase)
|
44
|
+
end
|
35
45
|
|
36
46
|
@alphabet = shuffle(alphabet)
|
37
47
|
@min_length = min_length
|
data/sqids.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sqids
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sqids Maintainers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-07-25 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|
@@ -27,7 +27,6 @@ files:
|
|
27
27
|
- spec/blocklist_spec.rb
|
28
28
|
- spec/encoding_spec.rb
|
29
29
|
- spec/minlength_spec.rb
|
30
|
-
- spec/uniques_spec.rb
|
31
30
|
- sqids.gemspec
|
32
31
|
homepage: https://sqids.org/ruby
|
33
32
|
licenses:
|
data/spec/uniques_spec.rb
DELETED
@@ -1,62 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rspec'
|
4
|
-
require_relative '../lib/sqids'
|
5
|
-
|
6
|
-
upper = 1_000
|
7
|
-
|
8
|
-
describe Sqids do
|
9
|
-
let(:sqids) { Sqids.new(min_length: Sqids::DEFAULT_ALPHABET.length) }
|
10
|
-
|
11
|
-
it 'uniques, with padding' do
|
12
|
-
set = Set.new
|
13
|
-
|
14
|
-
(0...upper).each do |i|
|
15
|
-
numbers = [i]
|
16
|
-
id = sqids.encode(numbers)
|
17
|
-
set.add(id)
|
18
|
-
expect(sqids.decode(id)).to eq(numbers)
|
19
|
-
end
|
20
|
-
|
21
|
-
expect(set.size).to eq(upper)
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'uniques, low ranges' do
|
25
|
-
set = Set.new
|
26
|
-
|
27
|
-
(0...upper).each do |i|
|
28
|
-
numbers = [i]
|
29
|
-
id = sqids.encode(numbers)
|
30
|
-
set.add(id)
|
31
|
-
expect(sqids.decode(id)).to eq(numbers)
|
32
|
-
end
|
33
|
-
|
34
|
-
expect(set.size).to eq(upper)
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'uniques, high ranges' do
|
38
|
-
set = Set.new
|
39
|
-
|
40
|
-
(100_000_000...(100_000_000 + upper)).each do |i|
|
41
|
-
numbers = [i]
|
42
|
-
id = sqids.encode(numbers)
|
43
|
-
set.add(id)
|
44
|
-
expect(sqids.decode(id)).to eq(numbers)
|
45
|
-
end
|
46
|
-
|
47
|
-
expect(set.size).to eq(upper)
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'uniques, multi' do
|
51
|
-
set = Set.new
|
52
|
-
|
53
|
-
(0...upper).each do |i|
|
54
|
-
numbers = [i, i, i, i, i]
|
55
|
-
id = sqids.encode(numbers)
|
56
|
-
set.add(id)
|
57
|
-
expect(sqids.decode(id)).to eq(numbers)
|
58
|
-
end
|
59
|
-
|
60
|
-
expect(set.size).to eq(upper)
|
61
|
-
end
|
62
|
-
end
|