sqids 0.2.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f504d0947f3ffd6f0fe3f9dfb4044a056b4c0d30a9d2b95a8ac5b5a043a5c45b
4
- data.tar.gz: 62fc2e00992383a7632b5f2a155ecfc09a2d221db4e2a31c505b8c54ea6ec12e
3
+ metadata.gz: 8738a24714961747ba8fb004ffba899f34889de1e65ba3932a59a50b85558aef
4
+ data.tar.gz: 6b26a781bd07bc2b805af36d29bd0cc838351569a3a44988e171b6083e75a3e4
5
5
  SHA512:
6
- metadata.gz: 596b48c403f99904706390dfeb23cfd9c59a075da4d970fada135aa75b9a54e39744bfd810de68b62852c7effe64fe21e3edf376d8f965455a8add0a594ab66e
7
- data.tar.gz: 74fbcc76ed257c80fd0a03fc4133ccb1b897ec62381c5377c84b873e372bc58d777194359e2765a67d9e4e38cbac5927a89336eec9a2b0241fe11e29d2e92bc6
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.select do |word|
33
- word.length >= 3 && (word.downcase.chars - alphabet.downcase.chars).empty?
34
- end.to_set(&:downcase)
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
@@ -7,7 +7,7 @@ require 'sqids'
7
7
 
8
8
  Gem::Specification.new do |gem|
9
9
  gem.name = 'sqids'
10
- gem.version = '0.2.0'
10
+ gem.version = '0.2.1'
11
11
  gem.authors = ['Sqids Maintainers']
12
12
  gem.summary = 'Generate YouTube-like ids from numbers.'
13
13
  gem.homepage = 'https://sqids.org/ruby'
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.0
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: 2023-09-10 00:00:00.000000000 Z
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