lite-uxid 1.5.0 → 1.5.2

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