cool_id 0.1.8 → 0.1.9
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 +4 -4
- data/README.md +17 -0
- data/lib/cool_id/version.rb +1 -1
- data/lib/cool_id.rb +18 -7
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 07011e094fb16385d448b80b4461b0e579d29efc0b4273fff4b41dd1df350a64
|
4
|
+
data.tar.gz: 11d8a83f95a7fce11598df98d1b7175c26b00f8a0d19d6af18ebaa35b8ddfa0b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f98ab9a494119599b383cc41bc9fdb797f68e793f626b07759899fee06ded282b6b8fe4f98d8ab82425127c64f4daac2511b8645f61458625e8356c8a428efe0
|
7
|
+
data.tar.gz: 6002ff50f083a330ad2fcdb582df9e12d9aea31d26e1d7f737dcd20650c0fa7454e2eb43a7f88c84e47bcdb5f9965557433d97acfca13b0afa854032c4de28fa
|
data/README.md
CHANGED
@@ -35,9 +35,26 @@ and generate ids without creating a record
|
|
35
35
|
# generate an id, e.g. for batch inserts or upserts
|
36
36
|
User.generate_cool_id
|
37
37
|
# => "usr_vktd1b5v84lr"
|
38
|
+
```
|
39
|
+
|
40
|
+
you can use cool_id with a separate field, keeping the default primary key:
|
41
|
+
|
42
|
+
```ruby
|
43
|
+
class Product < ActiveRecord::Base
|
44
|
+
include CoolId::Model
|
45
|
+
cool_id prefix: "prd", id_field: :public_id
|
46
|
+
end
|
38
47
|
|
48
|
+
product = Product.create!(name: "Cool Product")
|
49
|
+
product.id # => 1 (or another integer)
|
50
|
+
product.public_id # => "prd_vktd1b5v84lr"
|
51
|
+
|
52
|
+
# You can still use CoolId.locate with the public_id
|
53
|
+
CoolId.locate("prd_vktd1b5v84lr") # => #<Product id: 1, public_id: "prd_vktd1b5v84lr", name: "Cool Product">
|
39
54
|
```
|
40
55
|
|
56
|
+
this approach allows you to keep your primary key as an auto-incrementing integer while still benefiting from CoolId's functionality. it's particularly useful when you want to expose a public identifier that's separate from your internal primary key.
|
57
|
+
|
41
58
|
it takes parameters to change the alphabet or length
|
42
59
|
|
43
60
|
```ruby
|
data/lib/cool_id/version.rb
CHANGED
data/lib/cool_id.rb
CHANGED
@@ -15,10 +15,10 @@ module CoolId
|
|
15
15
|
DEFAULT_LENGTH = 12
|
16
16
|
DEFAULT_MAX_RETRIES = 1000
|
17
17
|
|
18
|
-
Id = Struct.new(:key, :prefix, :id, :model_class)
|
18
|
+
Id = Struct.new(:key, :prefix, :id, :model_class, :id_field)
|
19
19
|
|
20
20
|
class << self
|
21
|
-
attr_accessor :separator, :alphabet, :length, :max_retries
|
21
|
+
attr_accessor :separator, :alphabet, :length, :max_retries, :id_field
|
22
22
|
|
23
23
|
def configure
|
24
24
|
yield self
|
@@ -29,6 +29,7 @@ module CoolId
|
|
29
29
|
self.alphabet = DEFAULT_ALPHABET
|
30
30
|
self.length = DEFAULT_LENGTH
|
31
31
|
self.max_retries = DEFAULT_MAX_RETRIES
|
32
|
+
self.id_field = nil
|
32
33
|
end
|
33
34
|
|
34
35
|
def registry
|
@@ -54,6 +55,10 @@ module CoolId
|
|
54
55
|
end
|
55
56
|
end
|
56
57
|
end
|
58
|
+
|
59
|
+
def resolve_cool_id_field(model_class)
|
60
|
+
model_class.cool_id_config&.id_field || CoolId.id_field || model_class.primary_key
|
61
|
+
end
|
57
62
|
end
|
58
63
|
|
59
64
|
self.separator = DEFAULT_SEPARATOR
|
@@ -72,26 +77,31 @@ module CoolId
|
|
72
77
|
|
73
78
|
def locate(id)
|
74
79
|
parsed = parse(id)
|
75
|
-
parsed
|
80
|
+
return nil unless parsed
|
81
|
+
|
82
|
+
id_field = CoolId.resolve_cool_id_field(parsed.model_class)
|
83
|
+
parsed.model_class.find_by(id_field => id)
|
76
84
|
end
|
77
85
|
|
78
86
|
def parse(id)
|
79
87
|
prefix, key = id.split(CoolId.separator, 2)
|
80
88
|
model_class = @prefix_map[prefix]
|
81
89
|
return nil unless model_class
|
82
|
-
|
90
|
+
id_field = CoolId.resolve_cool_id_field(model_class)
|
91
|
+
Id.new(key, prefix, id, model_class, id_field)
|
83
92
|
end
|
84
93
|
end
|
85
94
|
|
86
95
|
class Config
|
87
|
-
attr_reader :prefix, :length, :alphabet, :max_retries, :model_class
|
96
|
+
attr_reader :prefix, :length, :alphabet, :max_retries, :model_class, :id_field
|
88
97
|
|
89
|
-
def initialize(prefix:, model_class:, length: nil, alphabet: nil, max_retries: nil)
|
98
|
+
def initialize(prefix:, model_class:, length: nil, alphabet: nil, max_retries: nil, id_field: nil)
|
90
99
|
@length = length
|
91
100
|
@prefix = validate_prefix(prefix)
|
92
101
|
@alphabet = validate_alphabet(alphabet)
|
93
102
|
@max_retries = max_retries
|
94
103
|
@model_class = model_class
|
104
|
+
@id_field = id_field
|
95
105
|
end
|
96
106
|
|
97
107
|
private
|
@@ -148,7 +158,8 @@ module CoolId
|
|
148
158
|
private
|
149
159
|
|
150
160
|
def set_cool_id
|
151
|
-
|
161
|
+
id_field = CoolId.resolve_cool_id_field(self.class)
|
162
|
+
self[id_field] = self.class.generate_cool_id if self[id_field].blank?
|
152
163
|
end
|
153
164
|
|
154
165
|
def ensure_cool_id_configured
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cool_id
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Schilling
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-08-
|
11
|
+
date: 2024-08-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nanoid
|