lite-uxid 1.4.0 → 1.5.0

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: 1f8fdc0fac3f66d26f1fa5ed7944775912fedb7ef4a8c1d8d582ca3b8ddad11c
4
- data.tar.gz: 9e0b2729d115fab68c449034c95ce38706680eaf0327a1f46bea2e4afb654a66
3
+ metadata.gz: 750f76e67f536272728bf9234c0ad126f902dbd429a5b8d518af72f955b607dc
4
+ data.tar.gz: 5ac2699b92b9a12944d4cb83fa22b49ef63689567796fae7a563f943535ec86e
5
5
  SHA512:
6
- metadata.gz: 8cdb90bf7523761fe7fe9673195d888419ffc5fd0199c52bd353e39b779746b5e4bbe7e18232baf97a8bfd106afb0eb593e68818eac886aa5cc17cfa20a6bc56
7
- data.tar.gz: 07c960b84a617349cd65c74639dbf3fee6e82ea519d0bf64ff3f52dcb75b8e6b8ff3d06c935cd58170e5987ed06ff5b47913bce7866964e24abe935c6749b383
6
+ metadata.gz: 6b6bd1f1eae662b9a9c275f6acea8b7ca1e39d3e21614bdfdb46a648301f9da6f424655895a288eef683607ff94fd18bdcae88c346a2930f60f7748e778755fc
7
+ data.tar.gz: 6b9f3c95b1c8bbd801a50bdf8791fdb608702e3c65116af06a2be6a1f9112ceb77f8f9450ae612eb198e2c5645e4b9eaf6f38b88e45b64de431a0087bb637dfd
data/.rubocop.yml CHANGED
@@ -6,6 +6,8 @@ AllCops:
6
6
  NewCops: enable
7
7
  DisplayCopNames: true
8
8
  DisplayStyleGuide: true
9
+ Gemspec/DevelopmentDependencies:
10
+ EnforcedStyle: gemspec
9
11
  Gemspec/RequiredRubyVersion:
10
12
  Enabled: false
11
13
  Layout/EmptyLinesAroundAttributeAccessor:
@@ -33,6 +35,8 @@ Metrics/MethodLength:
33
35
  Enabled: false
34
36
  RSpec/MultipleExpectations:
35
37
  Enabled: false
38
+ RSpec/MultipleMemoizedHelpers:
39
+ Enabled: false
36
40
  Style/ArgumentsForwarding:
37
41
  Enabled: false
38
42
  Style/Documentation:
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.0] - 2024-09-20
10
+ ### Added
11
+ - Added uuid version option
12
+ - Added prefix option to hashid and nanoid
13
+ ### Changed
14
+ - Move reversible and irreversible files to base namespace
15
+ - Ruby send perf improvements
16
+
9
17
  ## [1.4.0] - 2022-11-20
10
18
  ### Changed
11
19
  - Improved global config flexibility
data/Gemfile.lock CHANGED
@@ -1,131 +1,169 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lite-uxid (1.4.0)
4
+ lite-uxid (1.5.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
- actionpack (7.0.4)
10
- actionview (= 7.0.4)
11
- activesupport (= 7.0.4)
12
- rack (~> 2.0, >= 2.2.0)
9
+ actionpack (7.2.1)
10
+ actionview (= 7.2.1)
11
+ activesupport (= 7.2.1)
12
+ nokogiri (>= 1.8.5)
13
+ racc
14
+ rack (>= 2.2.4, < 3.2)
15
+ rack-session (>= 1.0.1)
13
16
  rack-test (>= 0.6.3)
14
- rails-dom-testing (~> 2.0)
15
- rails-html-sanitizer (~> 1.0, >= 1.2.0)
16
- actionview (7.0.4)
17
- activesupport (= 7.0.4)
17
+ rails-dom-testing (~> 2.2)
18
+ rails-html-sanitizer (~> 1.6)
19
+ useragent (~> 0.16)
20
+ actionview (7.2.1)
21
+ activesupport (= 7.2.1)
18
22
  builder (~> 3.1)
19
- erubi (~> 1.4)
20
- rails-dom-testing (~> 2.0)
21
- rails-html-sanitizer (~> 1.1, >= 1.2.0)
22
- activemodel (7.0.4)
23
- activesupport (= 7.0.4)
24
- activerecord (7.0.4)
25
- activemodel (= 7.0.4)
26
- activesupport (= 7.0.4)
27
- activesupport (7.0.4)
28
- concurrent-ruby (~> 1.0, >= 1.0.2)
23
+ erubi (~> 1.11)
24
+ rails-dom-testing (~> 2.2)
25
+ rails-html-sanitizer (~> 1.6)
26
+ activemodel (7.2.1)
27
+ activesupport (= 7.2.1)
28
+ activerecord (7.2.1)
29
+ activemodel (= 7.2.1)
30
+ activesupport (= 7.2.1)
31
+ timeout (>= 0.4.0)
32
+ activesupport (7.2.1)
33
+ base64
34
+ bigdecimal
35
+ concurrent-ruby (~> 1.0, >= 1.3.1)
36
+ connection_pool (>= 2.2.5)
37
+ drb
29
38
  i18n (>= 1.6, < 2)
39
+ logger (>= 1.4.2)
30
40
  minitest (>= 5.1)
31
- tzinfo (~> 2.0)
41
+ securerandom (>= 0.3)
42
+ tzinfo (~> 2.0, >= 2.0.5)
32
43
  ast (2.4.2)
33
- builder (3.2.4)
34
- colorize (0.8.1)
35
- concurrent-ruby (1.1.10)
44
+ base64 (0.2.0)
45
+ bigdecimal (3.1.8)
46
+ builder (3.3.0)
47
+ concurrent-ruby (1.3.4)
48
+ connection_pool (2.4.1)
36
49
  crass (1.0.6)
37
- database_cleaner (2.0.1)
38
- database_cleaner-active_record (~> 2.0.0)
39
- database_cleaner-active_record (2.0.1)
50
+ database_cleaner (2.0.2)
51
+ database_cleaner-active_record (>= 2, < 3)
52
+ database_cleaner-active_record (2.2.0)
40
53
  activerecord (>= 5.a)
41
54
  database_cleaner-core (~> 2.0.0)
42
55
  database_cleaner-core (2.0.1)
43
- diff-lcs (1.5.0)
44
- erubi (1.11.0)
45
- fasterer (0.10.0)
46
- colorize (~> 0.7)
56
+ diff-lcs (1.5.1)
57
+ drb (2.2.1)
58
+ erubi (1.13.0)
59
+ fasterer (0.11.0)
47
60
  ruby_parser (>= 3.19.1)
48
- generator_spec (0.9.4)
61
+ generator_spec (0.10.0)
49
62
  activesupport (>= 3.0.0)
50
63
  railties (>= 3.0.0)
51
- i18n (1.12.0)
64
+ i18n (1.14.6)
52
65
  concurrent-ruby (~> 1.0)
53
- json (2.6.2)
54
- loofah (2.19.0)
66
+ io-console (0.7.2)
67
+ irb (1.14.0)
68
+ rdoc (>= 4.0.0)
69
+ reline (>= 0.4.2)
70
+ json (2.7.2)
71
+ language_server-protocol (3.17.0.3)
72
+ logger (1.6.1)
73
+ loofah (2.22.0)
55
74
  crass (~> 1.0.2)
56
- nokogiri (>= 1.5.9)
57
- method_source (1.0.0)
58
- mini_portile2 (2.8.0)
59
- minitest (5.16.3)
60
- nokogiri (1.13.9)
61
- mini_portile2 (~> 2.8.0)
75
+ nokogiri (>= 1.12.0)
76
+ mini_portile2 (2.8.7)
77
+ minitest (5.25.1)
78
+ nokogiri (1.16.7)
79
+ mini_portile2 (~> 2.8.2)
62
80
  racc (~> 1.4)
63
- parallel (1.22.1)
64
- parser (3.1.2.1)
81
+ parallel (1.26.3)
82
+ parser (3.3.5.0)
65
83
  ast (~> 2.4.1)
66
- racc (1.6.0)
67
- rack (2.2.4)
68
- rack-test (2.0.2)
84
+ racc
85
+ psych (5.1.2)
86
+ stringio
87
+ racc (1.8.1)
88
+ rack (3.1.7)
89
+ rack-session (2.0.0)
90
+ rack (>= 3.0.0)
91
+ rack-test (2.1.0)
69
92
  rack (>= 1.3)
70
- rails-dom-testing (2.0.3)
71
- activesupport (>= 4.2.0)
93
+ rackup (2.1.0)
94
+ rack (>= 3)
95
+ webrick (~> 1.8)
96
+ rails-dom-testing (2.2.0)
97
+ activesupport (>= 5.0.0)
98
+ minitest
72
99
  nokogiri (>= 1.6)
73
- rails-html-sanitizer (1.4.3)
74
- loofah (~> 2.3)
75
- railties (7.0.4)
76
- actionpack (= 7.0.4)
77
- activesupport (= 7.0.4)
78
- method_source
100
+ rails-html-sanitizer (1.6.0)
101
+ loofah (~> 2.21)
102
+ nokogiri (~> 1.14)
103
+ railties (7.2.1)
104
+ actionpack (= 7.2.1)
105
+ activesupport (= 7.2.1)
106
+ irb (~> 1.13)
107
+ rackup (>= 1.0.0)
79
108
  rake (>= 12.2)
80
- thor (~> 1.0)
81
- zeitwerk (~> 2.5)
109
+ thor (~> 1.0, >= 1.2.2)
110
+ zeitwerk (~> 2.6)
82
111
  rainbow (3.1.1)
83
- rake (13.0.6)
84
- regexp_parser (2.6.1)
85
- rexml (3.2.5)
86
- rspec (3.12.0)
87
- rspec-core (~> 3.12.0)
88
- rspec-expectations (~> 3.12.0)
89
- rspec-mocks (~> 3.12.0)
90
- rspec-core (3.12.0)
91
- rspec-support (~> 3.12.0)
92
- rspec-expectations (3.12.0)
112
+ rake (13.2.1)
113
+ rdoc (6.7.0)
114
+ psych (>= 4.0.0)
115
+ regexp_parser (2.9.2)
116
+ reline (0.5.10)
117
+ io-console (~> 0.5)
118
+ rspec (3.13.0)
119
+ rspec-core (~> 3.13.0)
120
+ rspec-expectations (~> 3.13.0)
121
+ rspec-mocks (~> 3.13.0)
122
+ rspec-core (3.13.1)
123
+ rspec-support (~> 3.13.0)
124
+ rspec-expectations (3.13.3)
93
125
  diff-lcs (>= 1.2.0, < 2.0)
94
- rspec-support (~> 3.12.0)
95
- rspec-mocks (3.12.0)
126
+ rspec-support (~> 3.13.0)
127
+ rspec-mocks (3.13.1)
96
128
  diff-lcs (>= 1.2.0, < 2.0)
97
- rspec-support (~> 3.12.0)
98
- rspec-support (3.12.0)
99
- rubocop (1.39.0)
129
+ rspec-support (~> 3.13.0)
130
+ rspec-support (3.13.1)
131
+ rubocop (1.66.1)
100
132
  json (~> 2.3)
133
+ language_server-protocol (>= 3.17.0)
101
134
  parallel (~> 1.10)
102
- parser (>= 3.1.2.1)
135
+ parser (>= 3.3.0.2)
103
136
  rainbow (>= 2.2.2, < 4.0)
104
- regexp_parser (>= 1.8, < 3.0)
105
- rexml (>= 3.2.5, < 4.0)
106
- rubocop-ast (>= 1.23.0, < 2.0)
137
+ regexp_parser (>= 2.4, < 3.0)
138
+ rubocop-ast (>= 1.32.2, < 2.0)
107
139
  ruby-progressbar (~> 1.7)
108
- unicode-display_width (>= 1.4.0, < 3.0)
109
- rubocop-ast (1.23.0)
110
- parser (>= 3.1.1.0)
111
- rubocop-performance (1.15.1)
112
- rubocop (>= 1.7.0, < 2.0)
113
- rubocop-ast (>= 0.4.0)
140
+ unicode-display_width (>= 2.4.0, < 3.0)
141
+ rubocop-ast (1.32.3)
142
+ parser (>= 3.3.1.0)
143
+ rubocop-performance (1.22.1)
144
+ rubocop (>= 1.48.1, < 2.0)
145
+ rubocop-ast (>= 1.31.1, < 2.0)
114
146
  rubocop-rake (0.6.0)
115
147
  rubocop (~> 1.0)
116
- rubocop-rspec (2.15.0)
117
- rubocop (~> 1.33)
118
- ruby-progressbar (1.11.0)
119
- ruby_parser (3.19.1)
148
+ rubocop-rspec (3.0.5)
149
+ rubocop (~> 1.61)
150
+ ruby-progressbar (1.13.0)
151
+ ruby_parser (3.21.1)
152
+ racc (~> 1.5)
120
153
  sexp_processor (~> 4.16)
121
- sexp_processor (4.16.1)
122
- sqlite3 (1.5.4)
154
+ securerandom (0.3.1)
155
+ sexp_processor (4.17.2)
156
+ sqlite3 (2.0.4)
123
157
  mini_portile2 (~> 2.8.0)
124
- thor (1.2.1)
125
- tzinfo (2.0.5)
158
+ stringio (3.1.1)
159
+ thor (1.3.2)
160
+ timeout (0.4.1)
161
+ tzinfo (2.0.6)
126
162
  concurrent-ruby (~> 1.0)
127
- unicode-display_width (2.3.0)
128
- zeitwerk (2.6.6)
163
+ unicode-display_width (2.6.0)
164
+ useragent (0.16.10)
165
+ webrick (1.8.1)
166
+ zeitwerk (2.6.18)
129
167
 
130
168
  PLATFORMS
131
169
  ruby
@@ -147,4 +185,4 @@ DEPENDENCIES
147
185
  sqlite3
148
186
 
149
187
  BUNDLED WITH
150
- 2.3.26
188
+ 2.5.19
data/README.md CHANGED
@@ -49,6 +49,7 @@ Lite::Uxid.configure do |config|
49
49
  config.nanoid_size = 21
50
50
  config.ulid_charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
51
51
  config.ulid_size = 26
52
+ config.uuid_version = 4
52
53
  end
53
54
  ```
54
55
 
@@ -92,7 +93,7 @@ Lite::Uxid::Ulid.encode #=> '01GJAY9KGR539EZF4QWYEJGSN7'
92
93
 
93
94
  ## UUID
94
95
 
95
- Implements v4 of the specification. [More information](https://en.wikipedia.org/wiki/Universally_unique_identifier)
96
+ Implements `v4` and `v7` of the specification. [More information](https://en.wikipedia.org/wiki/Universally_unique_identifier)
96
97
 
97
98
  ```ruby
98
99
  Lite::Uxid::Uuid.encode #=> '4376a67e-1189-44b3-a599-7f7566bf105b'
@@ -103,7 +104,19 @@ Lite::Uxid::Uuid.encode #=> '4376a67e-1189-44b3-a599-7f7566bf105b'
103
104
  Local options can be passed to override global options.
104
105
 
105
106
  ```ruby
106
- Lite::Uxid::Ulid.encode(chars: 'abc123', size: 12) #=> 'a3b12c12c3ca'
107
+ Lite::Uxid::Ulid.encode(charset: 'abc123', size: 12) #=> 'a3b12c12c3ca'
108
+ ```
109
+
110
+ Passable options are:
111
+
112
+ ```ruby
113
+ {
114
+ charset: 'string', # Available for: hashid, nanoid, ulid
115
+ salt: 'string', # Available for: hashid
116
+ size: 'integer', # Available for: hashid, nanoid, ulid
117
+ version: 'integer', # Available for: uuid
118
+ prefix: 'string' # Available for: hashid, nanoid
119
+ }
107
120
  ```
108
121
 
109
122
  ## ActiveRecord
@@ -148,6 +161,18 @@ class User < ActiveRecord::Base
148
161
  end
149
162
  ```
150
163
 
164
+ Add a prefix to `hashid` and `nanoid` record types by adding a `uxid_prefix` method.
165
+
166
+ ```ruby
167
+ class User < ActiveRecord::Base
168
+ include Lite::Uxid::Record::Hashid
169
+
170
+ def uxid_prefix
171
+ "sub_"
172
+ end
173
+ end
174
+ ```
175
+
151
176
  **Usage**
152
177
 
153
178
  Using one of the mixins above provides a handy method to find records by uxid.
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "securerandom" unless defined?(SecureRandom)
4
+
5
+ module Lite
6
+ module Uxid
7
+ module Base
8
+ class Irreversible
9
+
10
+ attr_reader :opts
11
+
12
+ def initialize(opts = {})
13
+ @opts = opts
14
+ end
15
+
16
+ class << self
17
+
18
+ def encode(opts = {})
19
+ klass = new(opts)
20
+ klass.encode
21
+ end
22
+
23
+ def decode(opts = {})
24
+ klass = new(opts)
25
+ klass.decode
26
+ end
27
+
28
+ end
29
+
30
+ def encode
31
+ raise NotImplementedError, "override method in #{coder_class}"
32
+ end
33
+
34
+ def decode
35
+ raise NotImplementedError, "coder does not support decoding"
36
+ end
37
+
38
+ private
39
+
40
+ def coder_value_for(key)
41
+ sym_key = :"#{coder_class.downcase}_#{key}"
42
+ return unless Lite::Uxid.configuration.respond_to?(sym_key)
43
+
44
+ opts.delete(key) || Lite::Uxid.configuration.send(sym_key)
45
+ end
46
+
47
+ def coder_bytes
48
+ @coder_bytes ||= SecureRandom.random_bytes(coder_size).bytes
49
+ end
50
+
51
+ def coder_charset
52
+ @coder_charset ||= coder_value_for(:charset)
53
+ end
54
+
55
+ def coder_class
56
+ @coder_class ||= self.class.name.split("::").last
57
+ end
58
+
59
+ def coder_length
60
+ @coder_length ||= coder_charset.size
61
+ end
62
+
63
+ def coder_prefix
64
+ @coder_prefix ||= opts.delete(:prefix)
65
+ end
66
+
67
+ def coder_salt
68
+ @coder_salt ||= coder_value_for(:salt)
69
+ end
70
+
71
+ def coder_size
72
+ @coder_size ||= coder_value_for(:size)
73
+ end
74
+
75
+ def coder_version
76
+ @coder_version ||= coder_value_for(:version)
77
+ end
78
+
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Uxid
5
+ module Base
6
+ class Reversible < Irreversible
7
+
8
+ attr_reader :id
9
+
10
+ def initialize(id, opts = {})
11
+ @id = id
12
+ super(opts)
13
+ end
14
+
15
+ class << self
16
+
17
+ def encode(id, opts = {})
18
+ klass = new(id, opts)
19
+ klass.encode
20
+ end
21
+
22
+ def decode(id, opts = {})
23
+ klass = new(id, opts)
24
+ klass.decode
25
+ end
26
+
27
+ end
28
+
29
+ def decode
30
+ raise NotImplementedError, "override method in #{coder_class}"
31
+ end
32
+
33
+ end
34
+ end
35
+ end
36
+ end
@@ -5,7 +5,10 @@ module Lite
5
5
 
6
6
  class Configuration
7
7
 
8
- attr_accessor :hashid_charset, :hashid_salt, :hashid_size, :nanoid_charset, :nanoid_size, :ulid_charset, :ulid_size
8
+ attr_accessor :hashid_charset, :hashid_size, :hashid_salt,
9
+ :nanoid_charset, :nanoid_size,
10
+ :ulid_charset, :ulid_size,
11
+ :uuid_version
9
12
 
10
13
  def initialize
11
14
  @hashid_charset = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
@@ -15,6 +18,7 @@ module Lite
15
18
  @nanoid_size = 21
16
19
  @ulid_charset = "0123456789ABCDEFGHJKMNPQRSTVWXYZ"
17
20
  @ulid_size = 26
21
+ @uuid_version = 4
18
22
  end
19
23
 
20
24
  end
@@ -2,14 +2,16 @@
2
2
 
3
3
  module Lite
4
4
  module Uxid
5
- class Hashid < Reversible
5
+ class Hashid < Base::Reversible
6
6
 
7
7
  def encode
8
- encode_chars((id + coder_salt) << coder_size)
8
+ uxid = encode_chars((id + coder_salt) << coder_size)
9
+ "#{coder_prefix}#{uxid}"
9
10
  end
10
11
 
11
12
  def decode
12
- (decode_chars(id) >> coder_size) - coder_salt
13
+ uxid = id.delete_prefix(coder_prefix.to_s)
14
+ (decode_chars(uxid) >> coder_size) - coder_salt
13
15
  end
14
16
 
15
17
  private
@@ -2,12 +2,14 @@
2
2
 
3
3
  module Lite
4
4
  module Uxid
5
- class Nanoid < Irreversible
5
+ class Nanoid < Base::Irreversible
6
6
 
7
7
  def encode
8
- (0...coder_size).each_with_object(+"") do |i, str|
8
+ uxid = (0...coder_size).each_with_object(+"") do |i, str|
9
9
  str << coder_charset[coder_bytes[i] & 63]
10
10
  end
11
+
12
+ "#{coder_prefix}#{uxid}"
11
13
  end
12
14
 
13
15
  end
@@ -15,7 +15,7 @@ module Lite
15
15
 
16
16
  class_methods do
17
17
  def find_by_uxid(uxid)
18
- decoded_id = Lite::Uxid::Hashid.decode(uxid)
18
+ decoded_id = Lite::Uxid::Hashid.decode(uxid, prefix: new.uxid_prefix)
19
19
  find_by(id: decoded_id)
20
20
  end
21
21
 
@@ -30,13 +30,17 @@ module Lite
30
30
  def id_to_uxid
31
31
  return unless respond_to?(:uxid)
32
32
 
33
- Lite::Uxid::Hashid.encode(id)
33
+ Lite::Uxid::Hashid.encode(id, prefix: uxid_prefix)
34
34
  end
35
35
 
36
36
  def uxid_to_id
37
37
  return unless respond_to?(:uxid)
38
38
 
39
- Lite::Uxid::Hashid.decode(uxid)
39
+ Lite::Uxid::Hashid.decode(uxid, prefix: uxid_prefix)
40
+ end
41
+
42
+ def uxid_prefix
43
+ nil
40
44
  end
41
45
 
42
46
  private
@@ -13,13 +13,17 @@ module Lite
13
13
  before_create :callback_generate_uxid!, if: proc { respond_to?(:uxid) && !uxid? }
14
14
  end
15
15
 
16
+ def uxid_prefix
17
+ nil
18
+ end
19
+
16
20
  private
17
21
 
18
22
  def callback_generate_uxid!
19
23
  random_nanoid = nil
20
24
 
21
25
  loop do
22
- random_nanoid = Lite::Uxid::Nanoid.encode
26
+ random_nanoid = Lite::Uxid::Nanoid.encode(prefix: uxid_prefix)
23
27
  break unless self.class.exists?(uxid: random_nanoid)
24
28
  end
25
29
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Lite
4
4
  module Uxid
5
- class Ulid < Irreversible
5
+ class Ulid < Base::Irreversible
6
6
 
7
7
  MASK = 0x1f
8
8
 
@@ -2,10 +2,15 @@
2
2
 
3
3
  module Lite
4
4
  module Uxid
5
- class Uuid < Irreversible
5
+ class Uuid < Base::Irreversible
6
6
 
7
7
  def encode
8
- SecureRandom.uuid
8
+ case coder_version
9
+ when 7
10
+ SecureRandom.uuid_v7
11
+ else
12
+ SecureRandom.uuid
13
+ end
9
14
  end
10
15
 
11
16
  end
@@ -3,7 +3,7 @@
3
3
  module Lite
4
4
  module Uxid
5
5
 
6
- VERSION = "1.4.0"
6
+ VERSION = "1.5.0"
7
7
 
8
8
  end
9
9
  end
data/lib/lite/uxid.rb CHANGED
@@ -4,8 +4,8 @@ require "generators/lite/uxid/install_generator" if defined?(Rails::Generators)
4
4
 
5
5
  require "lite/uxid/version"
6
6
  require "lite/uxid/configuration"
7
- require "lite/uxid/irreversible"
8
- require "lite/uxid/reversible"
7
+ require "lite/uxid/base/irreversible"
8
+ require "lite/uxid/base/reversible"
9
9
  require "lite/uxid/record/hashid"
10
10
  require "lite/uxid/record/nanoid"
11
11
  require "lite/uxid/record/ulid"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lite-uxid
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Gomez
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-11-20 00:00:00.000000000 Z
11
+ date: 2024-09-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -217,15 +217,15 @@ files:
217
217
  - lib/generators/lite/uxid/install_generator.rb
218
218
  - lib/generators/lite/uxid/templates/install.rb
219
219
  - lib/lite/uxid.rb
220
+ - lib/lite/uxid/base/irreversible.rb
221
+ - lib/lite/uxid/base/reversible.rb
220
222
  - lib/lite/uxid/configuration.rb
221
223
  - lib/lite/uxid/hashid.rb
222
- - lib/lite/uxid/irreversible.rb
223
224
  - lib/lite/uxid/nanoid.rb
224
225
  - lib/lite/uxid/record/hashid.rb
225
226
  - lib/lite/uxid/record/nanoid.rb
226
227
  - lib/lite/uxid/record/ulid.rb
227
228
  - lib/lite/uxid/record/uuid.rb
228
- - lib/lite/uxid/reversible.rb
229
229
  - lib/lite/uxid/ulid.rb
230
230
  - lib/lite/uxid/uuid.rb
231
231
  - lib/lite/uxid/version.rb
@@ -254,7 +254,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
254
254
  - !ruby/object:Gem::Version
255
255
  version: '0'
256
256
  requirements: []
257
- rubygems_version: 3.3.26
257
+ rubygems_version: 3.5.19
258
258
  signing_key:
259
259
  specification_version: 4
260
260
  summary: Generate or obfuscate Id's using different patterns
@@ -1,71 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "securerandom" unless defined?(SecureRandom)
4
-
5
- module Lite
6
- module Uxid
7
- class Irreversible
8
-
9
- attr_reader :opts
10
-
11
- def initialize(opts = {})
12
- @opts = opts
13
- end
14
-
15
- class << self
16
-
17
- def encode(opts = {})
18
- klass = new(opts)
19
- klass.encode
20
- end
21
-
22
- def decode(opts = {})
23
- klass = new(opts)
24
- klass.decode
25
- end
26
-
27
- end
28
-
29
- def encode
30
- raise NotImplementedError, "override method in #{coder_class}"
31
- end
32
-
33
- def decode
34
- raise NotImplementedError, "coder does not support decoding"
35
- end
36
-
37
- private
38
-
39
- def coder_bytes
40
- @coder_bytes ||= SecureRandom.random_bytes(coder_size).bytes
41
- end
42
-
43
- def coder_charset
44
- @coder_charset ||=
45
- opts.delete(:charset) ||
46
- Lite::Uxid.configuration.send("#{coder_class.downcase}_charset")
47
- end
48
-
49
- def coder_class
50
- @coder_class ||= self.class.name.split("::").last
51
- end
52
-
53
- def coder_length
54
- @coder_length ||= coder_charset.size
55
- end
56
-
57
- def coder_salt
58
- @coder_salt ||=
59
- opts.delete(:salt) ||
60
- Lite::Uxid.configuration.send("#{coder_class.downcase}_salt")
61
- end
62
-
63
- def coder_size
64
- @coder_size ||=
65
- opts.delete(:size) ||
66
- Lite::Uxid.configuration.send("#{coder_class.downcase}_size")
67
- end
68
-
69
- end
70
- end
71
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lite
4
- module Uxid
5
- class Reversible < Irreversible
6
-
7
- attr_reader :id
8
-
9
- def initialize(id, opts = {})
10
- @id = id
11
- super(opts)
12
- end
13
-
14
- class << self
15
-
16
- def encode(id, opts = {})
17
- klass = new(id, opts)
18
- klass.encode
19
- end
20
-
21
- def decode(id, opts = {})
22
- klass = new(id, opts)
23
- klass.decode
24
- end
25
-
26
- end
27
-
28
- def decode
29
- raise NotImplementedError, "override method in #{coder_class}"
30
- end
31
-
32
- end
33
- end
34
- end