lite-uxid 1.0.1 → 1.0.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: d41dbcc7942d92f457acf001b75e40564c26245df724cc581b3b7c61ea258acd
4
- data.tar.gz: 6a68ad1a07b79b5d38cb91ffb6280bc95a9df1a986300cd2bf226c1c762992ac
3
+ metadata.gz: 3a8f42192c67ad0638ff6b3001a5887b5c5fc1bd9e05cb7e6a757c53d11ce15d
4
+ data.tar.gz: '058af68572f76f3c6227f2a437e254b25e783e9495e86bddd57b5bf2295b5446'
5
5
  SHA512:
6
- metadata.gz: def1639ce2619b031236a560de63eaa6175a718b7a780ee013b106b26893740ae9301214341e2ac379caaba38007649ff2f1d866977209a4947155482332c157
7
- data.tar.gz: 40f56b1b334ffe41e62b28698a0ee3fdc190e74cefe6a1c8b26d772057e554f03629cfe5f5b7454c6113388e5ca1468a6305c965d2a82965630251ae71436699
6
+ metadata.gz: c29f1a9f5cd7721cf67f07b5f4077ed1e0aa312bcf7fa095ebaf4a51d4c0ec4b518ab719bd32b3ece0f431c248f1f27ef3aaeb2f60f99d6f197dba8375248539
7
+ data.tar.gz: d476f672216ee1ee7e136ffe1dd335c3a6ebd15ab29a7ade8d7f1fed7e74416fd3109067d5e1af6ce70fea240b11c6af4a88d59c7f8fed81d620d72178dbd281
data/CHANGELOG.md CHANGED
@@ -6,8 +6,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
- ## [1.0.1] - 2019-06-25
9
+ ## [1.0.2] - 2019-07-30
10
10
  ### Added
11
+ - Added nanoid
12
+
13
+ ## [1.0.1] - 2019-06-25
14
+ ### Removed
11
15
  - Remove unused activesupport dependency
12
16
 
13
17
  ## [1.0.0] - 2019-06-25
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lite-uxid (1.0.1)
4
+ lite-uxid (1.0.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -39,7 +39,7 @@ GEM
39
39
  database_cleaner (1.7.0)
40
40
  diff-lcs (1.3)
41
41
  erubi (1.8.0)
42
- fasterer (0.5.1)
42
+ fasterer (0.6.0)
43
43
  colorize (~> 0.7)
44
44
  ruby_parser (>= 3.13.0)
45
45
  generator_spec (0.9.4)
@@ -74,12 +74,12 @@ GEM
74
74
  rake (>= 0.8.7)
75
75
  thor (>= 0.19.0, < 2.0)
76
76
  rainbow (3.0.0)
77
- rake (12.3.2)
77
+ rake (12.3.3)
78
78
  rspec (3.8.0)
79
79
  rspec-core (~> 3.8.0)
80
80
  rspec-expectations (~> 3.8.0)
81
81
  rspec-mocks (~> 3.8.0)
82
- rspec-core (3.8.1)
82
+ rspec-core (3.8.2)
83
83
  rspec-support (~> 3.8.0)
84
84
  rspec-expectations (3.8.4)
85
85
  diff-lcs (>= 1.2.0, < 2.0)
@@ -88,16 +88,16 @@ GEM
88
88
  diff-lcs (>= 1.2.0, < 2.0)
89
89
  rspec-support (~> 3.8.0)
90
90
  rspec-support (3.8.2)
91
- rubocop (0.72.0)
91
+ rubocop (0.73.0)
92
92
  jaro_winkler (~> 1.5.1)
93
93
  parallel (~> 1.10)
94
94
  parser (>= 2.6)
95
95
  rainbow (>= 2.2.2, < 4.0)
96
96
  ruby-progressbar (~> 1.7)
97
97
  unicode-display_width (>= 1.4.0, < 1.7)
98
- rubocop-performance (1.4.0)
98
+ rubocop-performance (1.4.1)
99
99
  rubocop (>= 0.71.0)
100
- rubocop-rspec (1.33.0)
100
+ rubocop-rspec (1.34.0)
101
101
  rubocop (>= 0.60.0)
102
102
  ruby-progressbar (1.10.1)
103
103
  ruby_parser (3.13.1)
data/README.md CHANGED
@@ -28,6 +28,7 @@ Or install it yourself as:
28
28
 
29
29
  * [Configuration](#configuration)
30
30
  * [Hash](#hash)
31
+ * [NanoID](#nanoid)
31
32
  * [ULID](#ulid)
32
33
  * [ActiveRecord](#active_record)
33
34
  * [Port](#port)
@@ -54,15 +55,23 @@ Lite::Uxid::Hash.encode(10) #=> 'q5D8inm0'
54
55
  Lite::Uxid::Hash.decode('q5D8inm0') #=> 10
55
56
  ```
56
57
 
58
+ ## NanoID
59
+
60
+ NanoID are not reversible and are the most performant random ID's but while unlikely can produce collisions.
61
+
62
+ ```ruby
63
+ Lite::Uxid::Nanoid.encode #=> '0bmHjB5Gx8FTBqJekX6dS6XIXf'
64
+ ```
65
+
57
66
  ## ULID
58
67
 
59
- ULID are not reversible and more performant than Hash Id's.
68
+ ULID are not reversible and more performant than Hash ID's.
60
69
 
61
70
  ```ruby
62
71
  Lite::Uxid::Ulid.encode #=> '1mqfg9qa96s8s5f02o1ucf8lcc'
63
72
  ```
64
73
 
65
- ## ActiveRecord
74
+ #### ActiveRecord
66
75
 
67
76
  **Table**
68
77
 
@@ -70,19 +79,23 @@ Add the following attribute to all corresponding tables.
70
79
 
71
80
  ```ruby
72
81
  # omitted
73
- t.binary :uxid, limit: 16, index: { unique: true }
82
+ t.binary :uxid, limit: 26, index: { unique: true }
74
83
  # omitted
75
84
  ```
76
85
 
77
86
  **Setup**
78
87
 
79
- All `uxid` attributes will be automatically generated and applied when the record is created.
88
+ All `nanoid` and `uxid` attributes will be automatically generated and applied when the record is created.
80
89
 
81
90
  ```ruby
82
91
  class User < ActiveRecord::Base
83
92
  include Lite::Uxid::Record::Hash
84
93
 
85
- # Or
94
+ # - or -
95
+
96
+ include Lite::Uxid::Record::Nanoid
97
+
98
+ # - or -
86
99
 
87
100
  include Lite::Uxid::Record::Ulid
88
101
  end
@@ -93,19 +106,18 @@ end
93
106
  The following methods are for Hash based Uxid's.
94
107
 
95
108
  ```ruby
96
- User.find_by_uxid('x123') #=> Find record by uxid
97
- User.find_by_uxid!('x123') #=> Raises an ActiveRecord::RecordNotFound error if not found
109
+ User.find_by_ulid('x123') #=> Find record by uxid
110
+ User.find_by_ulid!('x123') #=> Raises an ActiveRecord::RecordNotFound error if not found
98
111
 
99
112
  user = User.new
100
- user.uxid_to_id #=> Decodes the records uxid to id (only for Hash based Id's)
113
+ user.hash_to_id #=> Decodes the records uxid to id (only for Hash based Id's)
101
114
  ```
102
115
 
103
116
  ## Port
104
117
 
105
- `Lite::Uxid` is compatible port of [ActiveUxid](https://github.com/drexed/active_uxid).
118
+ `Lite::Uxid` is a compatible port of [ActiveUxid](https://github.com/drexed/active_uxid).
106
119
 
107
- Switching is as easy as renaming `ActiveUxid::Hash` to `Lite::Uxid::Hash`
108
- and `ActiveUxid::Ulid` to `Lite::Uxid::Ulid`.
120
+ Switching is as easy as renaming `ActiveUxid` to `Lite::Uxid`.
109
121
 
110
122
  ## Development
111
123
 
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ module Lite
6
+ module Uxid
7
+ class Nanoid < Lite::Uxid::Base
8
+
9
+ class << self
10
+
11
+ def encode
12
+ klass = new
13
+ klass.nanoid_encode
14
+ end
15
+
16
+ end
17
+
18
+ def nanoid_encode
19
+ encoding_length.times.with_object('') do |_i, str|
20
+ str + encoding_chars[(SecureRandom.rand * encoding_base).floor]
21
+ end
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_record'
4
+ require 'active_support'
5
+
6
+ module Lite
7
+ module Uxid
8
+ module Record
9
+ module Nanoid
10
+
11
+ extend ActiveSupport::Concern
12
+
13
+ included do
14
+ before_create :callback_generate_uxid!, if: proc { respond_to?(:uxid) }
15
+
16
+ def self.find_by_uxid(uxid)
17
+ find_by(uxid: uxid)
18
+ end
19
+
20
+ def self.find_by_uxid!(uxid)
21
+ record = find_by_uxid(uxid)
22
+ return record unless record.nil?
23
+
24
+ raise ActiveRecord::RecordNotFound
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def callback_generate_uxid!
31
+ self.uxid = Lite::Uxid::Nanoid.encode
32
+ end
33
+
34
+ end
35
+ end
36
+ end
37
+ end
@@ -3,7 +3,7 @@
3
3
  module Lite
4
4
  module Uxid
5
5
 
6
- VERSION ||= '1.0.1'
6
+ VERSION ||= '1.0.2'
7
7
 
8
8
  end
9
9
  end
data/lib/lite/uxid.rb CHANGED
@@ -4,7 +4,7 @@
4
4
  require "lite/uxid/#{name}"
5
5
  end
6
6
 
7
- %w[hash ulid].each do |name|
7
+ %w[hash nanoid ulid].each do |name|
8
8
  require "lite/uxid/record/#{name}"
9
9
  require "lite/uxid/#{name}"
10
10
  end
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.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Gomez
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-06-25 00:00:00.000000000 Z
11
+ date: 2019-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -192,7 +192,9 @@ files:
192
192
  - lib/lite/uxid/base.rb
193
193
  - lib/lite/uxid/configuration.rb
194
194
  - lib/lite/uxid/hash.rb
195
+ - lib/lite/uxid/nanoid.rb
195
196
  - lib/lite/uxid/record/hash.rb
197
+ - lib/lite/uxid/record/nanoid.rb
196
198
  - lib/lite/uxid/record/ulid.rb
197
199
  - lib/lite/uxid/ulid.rb
198
200
  - lib/lite/uxid/version.rb