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 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