lite-uxid 1.5.0 → 1.5.2

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: 750f76e67f536272728bf9234c0ad126f902dbd429a5b8d518af72f955b607dc
4
- data.tar.gz: 5ac2699b92b9a12944d4cb83fa22b49ef63689567796fae7a563f943535ec86e
3
+ metadata.gz: d000996f6e79fc0122e86a88c034391d9853146de2af1e44a1da19234ad538b1
4
+ data.tar.gz: 932aa03aeb3f62c58cb96328d38d9bc97ca09cc15f5f9a617147464448a45856
5
5
  SHA512:
6
- metadata.gz: 6b6bd1f1eae662b9a9c275f6acea8b7ca1e39d3e21614bdfdb46a648301f9da6f424655895a288eef683607ff94fd18bdcae88c346a2930f60f7748e778755fc
7
- data.tar.gz: 6b9f3c95b1c8bbd801a50bdf8791fdb608702e3c65116af06a2be6a1f9112ceb77f8f9450ae612eb198e2c5645e4b9eaf6f38b88e45b64de431a0087bb637dfd
6
+ metadata.gz: 1241d664904c1db3b9008bbd70bfb509070dc7adab95313ab5cac6a859fafeb6254f902ab0664086163bfa6d5998643d7f74f059525206d9354214f5595767ac
7
+ data.tar.gz: 51df74a8df875bbe8e67179960953d6ab54f8f49c11ab5783e90e5c31f6b8e8022ecf1074439083341cbdf9c40dce070c102d29bb947dd148b362f1dabdfc6a6
data/CHANGELOG.md CHANGED
@@ -6,6 +6,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.5.2] - 2024-09-20
10
+ ### Changed
11
+ - Fixed nanoid of differing length error
12
+
13
+ ## [1.5.1] - 2024-09-20
14
+ ### Changed
15
+ - Use after commit on create instead of after create
16
+
9
17
  ## [1.5.0] - 2024-09-20
10
18
  ### Added
11
19
  - Added uuid version option
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lite-uxid (1.5.0)
4
+ lite-uxid (1.5.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -126,7 +126,15 @@ Passable options are:
126
126
  Add the following attribute to all corresponding tables.
127
127
 
128
128
  ```ruby
129
- t.string :uxid, index: { unique: true }
129
+ # NOTE: null: true has to be set for HashID's
130
+ # since an ID must exist before it gets created.
131
+ t.string :uxid, null: false, index: { unique: true }
132
+ ```
133
+
134
+ If using UUID and your database supports it:
135
+
136
+ ```ruby
137
+ t.uuid :uxid, null: false, index: { unique: true }
130
138
  ```
131
139
 
132
140
  **Setup**
@@ -8,4 +8,5 @@ Lite::Uxid.configure do |config|
8
8
  config.nanoid_size = 21
9
9
  config.ulid_charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
10
10
  config.ulid_size = 26
11
+ config.uuid_version = 4
11
12
  end
@@ -44,10 +44,6 @@ module Lite
44
44
  opts.delete(key) || Lite::Uxid.configuration.send(sym_key)
45
45
  end
46
46
 
47
- def coder_bytes
48
- @coder_bytes ||= SecureRandom.random_bytes(coder_size).bytes
49
- end
50
-
51
47
  def coder_charset
52
48
  @coder_charset ||= coder_value_for(:charset)
53
49
  end
@@ -5,13 +5,38 @@ module Lite
5
5
  class Nanoid < Base::Irreversible
6
6
 
7
7
  def encode
8
- uxid = (0...coder_size).each_with_object(+"") do |i, str|
9
- str << coder_charset[coder_bytes[i] & 63]
8
+ uxid = +""
9
+
10
+ loop do
11
+ cached_bytes = bytes
12
+
13
+ (0...step).each do |idx|
14
+ byte = cached_bytes[idx] & mask
15
+ char = byte && coder_charset[byte]
16
+ next unless char
17
+
18
+ uxid << char
19
+ return uxid if uxid.size == coder_size
20
+ end
10
21
  end
11
22
 
12
23
  "#{coder_prefix}#{uxid}"
13
24
  end
14
25
 
26
+ private
27
+
28
+ def bytes
29
+ SecureRandom.random_bytes(coder_size).bytes
30
+ end
31
+
32
+ def mask
33
+ @mask ||= (2 << (Math.log(coder_length - 1) / Math.log(2))) - 1
34
+ end
35
+
36
+ def step
37
+ @step = (1.6 * mask * coder_size / coder_length).ceil
38
+ end
39
+
15
40
  end
16
41
  end
17
42
  end
@@ -10,7 +10,9 @@ module Lite
10
10
  extend ActiveSupport::Concern
11
11
 
12
12
  included do
13
- after_create :callback_generate_uxid!, if: proc { respond_to?(:uxid) && !uxid? }
13
+ after_commit :callback_generate_uxid!,
14
+ if: proc { respond_to?(:uxid) && !uxid? },
15
+ on: :create
14
16
  end
15
17
 
16
18
  class_methods do
@@ -10,7 +10,8 @@ module Lite
10
10
  extend ActiveSupport::Concern
11
11
 
12
12
  included do
13
- before_create :callback_generate_uxid!, if: proc { respond_to?(:uxid) && !uxid? }
13
+ before_create :callback_generate_uxid!,
14
+ if: proc { respond_to?(:uxid) && !uxid? }
14
15
  end
15
16
 
16
17
  def uxid_prefix
@@ -10,7 +10,8 @@ module Lite
10
10
  extend ActiveSupport::Concern
11
11
 
12
12
  included do
13
- before_create :callback_generate_uxid!, if: proc { respond_to?(:uxid) && !uxid? }
13
+ before_create :callback_generate_uxid!,
14
+ if: proc { respond_to?(:uxid) && !uxid? }
14
15
  end
15
16
 
16
17
  private
@@ -10,7 +10,8 @@ module Lite
10
10
  extend ActiveSupport::Concern
11
11
 
12
12
  included do
13
- before_create :callback_generate_uxid!, if: proc { respond_to?(:uxid) && !uxid? }
13
+ before_create :callback_generate_uxid!,
14
+ if: proc { respond_to?(:uxid) && !uxid? }
14
15
  end
15
16
 
16
17
  private
@@ -3,7 +3,7 @@
3
3
  module Lite
4
4
  module Uxid
5
5
 
6
- VERSION = "1.5.0"
6
+ VERSION = "1.5.2"
7
7
 
8
8
  end
9
9
  end
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: 1.5.0
4
+ version: 1.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Gomez