cool_id 0.1.8 → 0.2.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: a13030502ed2121afaaa78cd0443dc8c199c8ac0608080400ad5624947ed4a5a
4
- data.tar.gz: a626eeead1ca380bebf7a172eb46bc2e683073f8fd353c5ad9ecfe6721589e46
3
+ metadata.gz: bc42cbe218faf0128cc6e5c4f35c1b5eb2726dc0f1fcdf28cf5815593b34f5dd
4
+ data.tar.gz: df7b2bafa9b1981727109d9eed23041c32e010df7e6a578f90594727606d45be
5
5
  SHA512:
6
- metadata.gz: b22b2cd792877343af3f1e9b3aa51fcf8e5f6920fc1fa79407e9149c4b43acbea3c9bbd10959c46810f2cb4fc0a25c5d538211d274f10adc18ee8c5583f1040e
7
- data.tar.gz: 44d27992a9c89ba415db43cc31ee3c590037107135a5bc58dcf542f0b7fda702ae965798c39b01448c8a74fad3b43618b64ae1545a53ad85c85386770ce954fd
6
+ metadata.gz: 3d0fc47f2c3d94877fc3c79480e674b2c57a585623c0ed9d6fecb8d72cb3b3770062304055c794ccb012e34c00aef2a9bd9f7941ff8031198fd73eaaa9949a4c
7
+ data.tar.gz: 071f5e82664f7915b95f1be643da9dd10b89c81830d71a41d31bc302e4e156482ab38595c69ca9f0d53632987024a91a715423ec54eb2c4bbb3fc407893c98eb
data/.yardopts ADDED
@@ -0,0 +1,5 @@
1
+ --no-private
2
+ --markup=markdown
3
+ --readme=README.md
4
+ --title='cool_id api documentation'
5
+ 'lib/**/*.rb' - '*.md' LICENSE
data/README.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # cool id
2
2
 
3
- gem for rails apps to generates string ids with a prefix, followed by a [nanoid](https://zelark.github.io/nano-id-cc/). similar to the ids you see in stripe's api. also able to lookup any record by id, similar to rails' globalid.
3
+ gem for rails apps to generate string ids with a prefix, followed by a [nanoid](https://zelark.github.io/nano-id-cc/). similar to the ids you see in stripe's api. also able to lookup any record by id, similar to rails' globalid. there's an [introductory blog post](https://schpet.com/note/cool-id) explaining why i made this.
4
+
5
+ ## usage
6
+
7
+ ### basic id generation
4
8
 
5
9
  ```ruby
6
10
  class User < ActiveRecord::Base
@@ -12,14 +16,23 @@ User.create!(name: "...").id
12
16
  # => "usr_vktd1b5v84lr"
13
17
  ```
14
18
 
15
- lookup any record by its id
19
+ ### locate records
16
20
 
17
21
  ```ruby
18
22
  CoolId.locate("usr_vktd1b5v84lr")
19
23
  # => #<User id: "usr_vktd1b5v84lr", name: "John Doe">
20
24
  ```
21
25
 
22
- and parse ids
26
+ ### generate ids
27
+
28
+ e.g. for batch inserts or upserts
29
+
30
+ ```ruby
31
+ User.generate_cool_id
32
+ # => "usr_vktd1b5v84lr"
33
+ ```
34
+
35
+ ### parsing ids
23
36
 
24
37
  ```ruby
25
38
  parsed = CoolId.parse("usr_vktd1b5v84lr")
@@ -29,14 +42,7 @@ parsed.model_class
29
42
  # => User
30
43
  ```
31
44
 
32
- and generate ids without creating a record
33
-
34
- ```ruby
35
- # generate an id, e.g. for batch inserts or upserts
36
- User.generate_cool_id
37
- # => "usr_vktd1b5v84lr"
38
-
39
- ```
45
+ ### configuration options
40
46
 
41
47
  it takes parameters to change the alphabet or length
42
48
 
@@ -60,6 +66,27 @@ CoolId.configure do |config|
60
66
  end
61
67
  ```
62
68
 
69
+ #### using a different id field
70
+
71
+ you can use cool_id with a separate field, keeping the default primary key:
72
+
73
+ ```ruby
74
+ class Product < ActiveRecord::Base
75
+ include CoolId::Model
76
+ cool_id prefix: "prd", id_field: :public_id
77
+ end
78
+
79
+ product = Product.create!(name: "Cool Product")
80
+ product.id # => 1 (or a uuid or whatever primary key you like)
81
+ product.public_id # => "prd_vktd1b5v84lr"
82
+
83
+ # locate will find this
84
+ CoolId.locate("prd_vktd1b5v84lr") # => #<Product id: 1, public_id: "prd_vktd1b5v84lr", ...>
85
+ ```
86
+
87
+ this approach allows you to avoid exposing your primary keys, read David Bryant Copeland's [Create public-facing unique keys alongside your primary keys](https://naildrivin5.com/blog/2024/08/26/create-public-facing-unique-keys-alongside-your-primary-keys.html) to learn why you might want to do this. it also allows you to adopt cool_id more easily in a project that already has some data.
88
+
89
+
63
90
  ## installation
64
91
 
65
92
  add cool_id to your Gemfile:
@@ -72,6 +99,13 @@ bundle add cool_id
72
99
  gem "cool_id"
73
100
  ```
74
101
 
102
+ don't want to deal with a dependency? copy it into your project:
103
+
104
+ ```
105
+ mkdir -p app/lib
106
+ curl https://raw.githubusercontent.com/schpet/cool_id/main/lib/cool_id.rb -o app/lib/cool_id.rb
107
+ ```
108
+
75
109
  ### adding cool_id to a single model
76
110
 
77
111
  use string ids when creating a table
@@ -91,6 +125,8 @@ class User < ActiveRecord::Base
91
125
  end
92
126
  ```
93
127
 
128
+ note: if you prefer more traditional primary keys (like bigints or uuids) you can use the `id_field` on a different column.
129
+
94
130
  ### using cool_id on all models
95
131
 
96
132
  you have drank the coolaid. setup rails to use string ids on all new generated migrations
@@ -117,7 +153,6 @@ end
117
153
 
118
154
  if you use the graphql ruby node interface, you can implement [object identification](https://graphql-ruby.org/schema/object_identification)
119
155
 
120
-
121
156
  ```ruby
122
157
  # app/graphql/app_schema.rb
123
158
  class AppSchema < GraphQL::Schema
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CoolId
4
- VERSION = "0.1.8"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/cool_id.rb CHANGED
@@ -1,40 +1,76 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "cool_id/version"
4
- require "nanoid"
4
+ require "securerandom"
5
5
  require "active_support/concern"
6
6
 
7
+ # The CoolId module provides functionality for generating and managing unique identifiers.
7
8
  module CoolId
9
+ # Error raised when CoolId is not configured for a model.
8
10
  class NotConfiguredError < StandardError; end
9
11
 
12
+ # Error raised when the maximum number of retries is exceeded while generating a unique ID.
10
13
  class MaxRetriesExceededError < StandardError; end
11
14
 
12
- # defaults based on https://planetscale.com/blog/why-we-chose-nanoids-for-planetscales-api
15
+ # Default separator used in generated IDs.
13
16
  DEFAULT_SEPARATOR = "_"
17
+
18
+ # Default alphabet used for generating IDs.
14
19
  DEFAULT_ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyz"
20
+
21
+ # Default length of the generated ID (excluding prefix and separator).
15
22
  DEFAULT_LENGTH = 12
23
+
24
+ # Default maximum number of retries when generating a unique ID.
16
25
  DEFAULT_MAX_RETRIES = 1000
17
26
 
18
- Id = Struct.new(:key, :prefix, :id, :model_class)
27
+ # Struct representing a parsed CoolId.
28
+ # @attr [String] key The unique part of the ID (excluding prefix and separator).
29
+ # @attr [String] prefix The prefix of the ID.
30
+ # @attr [String] id The full ID (prefix + separator + key).
31
+ # @attr [Class] model_class The ActiveRecord model class associated with this ID.
32
+ # @attr [Symbol] id_field The field in the model used to store the ID.
33
+ Id = Struct.new(:key, :prefix, :id, :model_class, :id_field)
19
34
 
20
35
  class << self
21
- attr_accessor :separator, :alphabet, :length, :max_retries
22
-
36
+ # @!attribute [rw] separator
37
+ # @return [String] The separator used in generated IDs.
38
+ # @!attribute [rw] alphabet
39
+ # @return [String] The alphabet used for generating IDs.
40
+ # @!attribute [rw] length
41
+ # @return [Integer] The length of the generated ID (excluding prefix and separator).
42
+ # @!attribute [rw] max_retries
43
+ # @return [Integer] The maximum number of retries when generating a unique ID.
44
+ # @!attribute [rw] id_field
45
+ # @return [Symbol, nil] The default field to use for storing the ID in models.
46
+ attr_accessor :separator, :alphabet, :length, :max_retries, :id_field
47
+
48
+ # Configures the CoolId module.
49
+ # @yield [self] Gives itself to the block.
50
+ # @return [void]
23
51
  def configure
24
52
  yield self
25
53
  end
26
54
 
55
+ # Resets the configuration to default values.
56
+ # @return [void]
27
57
  def reset_configuration
28
58
  self.separator = DEFAULT_SEPARATOR
29
59
  self.alphabet = DEFAULT_ALPHABET
30
60
  self.length = DEFAULT_LENGTH
31
61
  self.max_retries = DEFAULT_MAX_RETRIES
62
+ self.id_field = nil
32
63
  end
33
64
 
65
+ # @return [Registry] The default registry that keeps track of which prefixes are associated with which model classes.
34
66
  def registry
35
67
  @prefix_map ||= Registry.new
36
68
  end
37
69
 
70
+ # Generates a unique ID based on the given configuration.
71
+ # @param config [Config] The configuration for ID generation.
72
+ # @return [String] A unique ID.
73
+ # @raise [MaxRetriesExceededError] If unable to generate a unique ID within the maximum number of retries.
38
74
  def generate_id(config)
39
75
  alphabet = config.alphabet || @alphabet
40
76
  length = config.length || @length
@@ -42,7 +78,7 @@ module CoolId
42
78
 
43
79
  retries = 0
44
80
  loop do
45
- nano_id = Nanoid.generate(size: length, alphabet: alphabet)
81
+ nano_id = SecureRandom.alphanumeric(length, chars: alphabet.chars)
46
82
  full_id = "#{config.prefix}#{separator}#{nano_id}"
47
83
  if !config.model_class.exists?(id: full_id)
48
84
  return full_id
@@ -54,6 +90,13 @@ module CoolId
54
90
  end
55
91
  end
56
92
  end
93
+
94
+ # Resolves the field (column) to use for storing the CoolId in a model.
95
+ # @param model_class [Class] The ActiveRecord model class.
96
+ # @return [Symbol] The field to use for storing the CoolId.
97
+ def resolve_cool_id_field(model_class)
98
+ model_class.cool_id_config&.id_field || CoolId.id_field || model_class.primary_key
99
+ end
57
100
  end
58
101
 
59
102
  self.separator = DEFAULT_SEPARATOR
@@ -61,47 +104,95 @@ module CoolId
61
104
  self.length = DEFAULT_LENGTH
62
105
  self.max_retries = DEFAULT_MAX_RETRIES
63
106
 
107
+ # Registry for managing prefixes and model classes.
64
108
  class Registry
65
109
  def initialize
66
110
  @prefix_map = {}
67
111
  end
68
112
 
113
+ # Registers a prefix with a model class.
114
+ # @param prefix [String] The prefix to register.
115
+ # @param model_class [Class] The ActiveRecord model class to associate with the prefix.
116
+ # @return [void]
69
117
  def register(prefix, model_class)
70
118
  @prefix_map[prefix] = model_class
71
119
  end
72
120
 
121
+ # Locates a record by its CoolId.
122
+ # @param id [String] The CoolId to look up.
123
+ # @return [ActiveRecord::Base, nil] The found record, or nil if not found.
73
124
  def locate(id)
74
125
  parsed = parse(id)
75
- parsed&.model_class&.find_by(id: id)
126
+ return nil unless parsed
127
+
128
+ id_field = CoolId.resolve_cool_id_field(parsed.model_class)
129
+ parsed.model_class.find_by(id_field => id)
76
130
  end
77
131
 
132
+ # Parses a CoolId into its components.
133
+ # @param id [String] The CoolId to parse.
134
+ # @return [Id, nil] The parsed Id object, or nil if parsing fails.
78
135
  def parse(id)
79
136
  prefix, key = id.split(CoolId.separator, 2)
80
137
  model_class = @prefix_map[prefix]
81
138
  return nil unless model_class
82
- Id.new(key, prefix, id, model_class)
139
+ id_field = CoolId.resolve_cool_id_field(model_class)
140
+ Id.new(key, prefix, id, model_class, id_field)
83
141
  end
84
142
  end
85
143
 
144
+ # Configuration class for CoolId generation.
86
145
  class Config
87
- attr_reader :prefix, :length, :alphabet, :max_retries, :model_class
146
+ # @return [String] The prefix for generated IDs.
147
+ attr_reader :prefix
88
148
 
89
- def initialize(prefix:, model_class:, length: nil, alphabet: nil, max_retries: nil)
90
- @length = length
149
+ # @return [Integer, nil] The length of the generated ID (excluding prefix and separator).
150
+ attr_reader :length
151
+
152
+ # @return [String, nil] The alphabet to use for generating IDs.
153
+ attr_reader :alphabet
154
+
155
+ # @return [Integer, nil] The maximum number of retries when generating a unique ID.
156
+ attr_reader :max_retries
157
+
158
+ # @return [Class] The ActiveRecord model class associated with this configuration.
159
+ attr_reader :model_class
160
+
161
+ # @return [Symbol, nil] The field to use for storing the ID in the model.
162
+ attr_reader :id_field
163
+
164
+ # Initializes a new Config instance.
165
+ # @param prefix [String] The prefix for generated IDs.
166
+ # @param model_class [Class] The ActiveRecord model class.
167
+ # @param length [Integer, nil] The length of the generated ID (excluding prefix and separator).
168
+ # @param alphabet [String, nil] The alphabet to use for generating IDs.
169
+ # @param max_retries [Integer, nil] The maximum number of retries when generating a unique ID.
170
+ # @param id_field [Symbol, nil] The field to use for storing the ID in the model.
171
+ def initialize(prefix:, model_class:, length: nil, alphabet: nil, max_retries: nil, id_field: nil)
91
172
  @prefix = validate_prefix(prefix)
173
+ @length = length
92
174
  @alphabet = validate_alphabet(alphabet)
93
175
  @max_retries = max_retries
94
176
  @model_class = model_class
177
+ @id_field = id_field
95
178
  end
96
179
 
97
180
  private
98
181
 
182
+ # Validates the prefix.
183
+ # @param value [String] The prefix to validate.
184
+ # @return [String] The validated prefix.
185
+ # @raise [ArgumentError] If the prefix is nil or empty.
99
186
  def validate_prefix(value)
100
187
  raise ArgumentError, "Prefix cannot be nil" if value.nil?
101
188
  raise ArgumentError, "Prefix cannot be empty" if value.empty?
102
189
  value
103
190
  end
104
191
 
192
+ # Validates the alphabet.
193
+ # @param value [String, nil] The alphabet to validate.
194
+ # @return [String, nil] The validated alphabet.
195
+ # @raise [ArgumentError] If the alphabet includes the separator.
105
196
  def validate_alphabet(value)
106
197
  return nil if value.nil?
107
198
  raise ArgumentError, "Alphabet cannot include the separator '#{CoolId.separator}'" if value.include?(CoolId.separator)
@@ -109,30 +200,52 @@ module CoolId
109
200
  end
110
201
  end
111
202
 
203
+ # Module to be included in ActiveRecord models for CoolId functionality.
112
204
  module Model
113
205
  extend ActiveSupport::Concern
114
206
 
115
207
  class_methods do
208
+ # @!attribute [rw] cool_id_config
209
+ # @return [Config] The CoolId configuration for this model.
210
+ # @!attribute [rw] cool_id_setup_required
211
+ # @return [Boolean] Whether CoolId setup is required for this model.
116
212
  attr_accessor :cool_id_config
117
213
  attr_accessor :cool_id_setup_required
118
214
 
215
+ # Configures CoolId for this model.
216
+ # @param options [Hash] Options for configuring CoolId.
217
+ # @option options [String] :prefix The prefix for generated IDs.
218
+ # @option options [Integer] :length The length of the generated ID (excluding prefix and separator).
219
+ # @option options [String] :alphabet The alphabet to use for generating IDs.
220
+ # @option options [Integer] :max_retries The maximum number of retries when generating a unique ID.
221
+ # @option options [Symbol] :id_field The field to use for storing the ID in the model.
222
+ # @return [void]
119
223
  def cool_id(options)
120
224
  @cool_id_config = Config.new(**options, model_class: self)
121
225
  CoolId.registry.register(options[:prefix], self)
122
226
  end
123
227
 
228
+ # Generates a new CoolId for this model.
229
+ # @return [String] A new CoolId.
124
230
  def generate_cool_id
125
231
  CoolId.generate_id(@cool_id_config)
126
232
  end
127
233
 
234
+ # Enforces CoolId setup for all descendants of this model.
235
+ # @return [void]
128
236
  def enforce_cool_id_for_descendants
129
237
  @cool_id_setup_required = true
130
238
  end
131
239
 
240
+ # Skips enforcing CoolId setup for this model.
241
+ # @return [void]
132
242
  def skip_enforce_cool_id
133
243
  @cool_id_setup_required = false
134
244
  end
135
245
 
246
+ # Inherits CoolId setup requirements to subclasses.
247
+ # @param subclass [Class] The subclass inheriting from this model.
248
+ # @return [void]
136
249
  def inherited(subclass)
137
250
  super
138
251
  if @cool_id_setup_required && !subclass.instance_variable_defined?(:@cool_id_setup_required)
@@ -147,10 +260,16 @@ module CoolId
147
260
 
148
261
  private
149
262
 
263
+ # Sets the CoolId for the model instance before creation.
264
+ # @return [void]
150
265
  def set_cool_id
151
- self.id = self.class.generate_cool_id if id.blank?
266
+ id_field = CoolId.resolve_cool_id_field(self.class)
267
+ self[id_field] = self.class.generate_cool_id if self[id_field].blank?
152
268
  end
153
269
 
270
+ # Ensures that CoolId is configured for the model.
271
+ # @raise [NotConfiguredError] If CoolId is not configured and setup is required.
272
+ # @return [void]
154
273
  def ensure_cool_id_configured
155
274
  if self.class.cool_id_setup_required && self.class.cool_id_config.nil?
156
275
  suggested_prefix = self.class.name.downcase[0..2]
@@ -160,10 +279,16 @@ module CoolId
160
279
  end
161
280
  end
162
281
 
282
+ # Locates a record by its CoolId.
283
+ # @param id [String] The CoolId to look up.
284
+ # @return [ActiveRecord::Base, nil] The found record, or nil if not found.
163
285
  def self.locate(id)
164
286
  registry.locate(id)
165
287
  end
166
288
 
289
+ # Parses a CoolId into its components.
290
+ # @param id [String] The CoolId to parse.
291
+ # @return [Id, nil] The parsed Id object, or nil if parsing fails.
167
292
  def self.parse(id)
168
293
  registry.parse(id)
169
294
  end
metadata CHANGED
@@ -1,31 +1,31 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cool_id
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Schilling
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-23 00:00:00.000000000 Z
11
+ date: 2025-01-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: nanoid
14
+ name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
19
+ version: '6.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '2.0'
26
+ version: '6.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: activerecord
28
+ name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,19 +39,75 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '6.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: activesupport
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '13.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '13.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: standard
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.3'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.3'
83
+ - !ruby/object:Gem::Dependency
84
+ name: yard
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.9.28
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.9.28
97
+ - !ruby/object:Gem::Dependency
98
+ name: webrick
43
99
  requirement: !ruby/object:Gem::Requirement
44
100
  requirements:
45
101
  - - ">="
46
102
  - !ruby/object:Gem::Version
47
- version: '6.0'
48
- type: :runtime
103
+ version: '0'
104
+ type: :development
49
105
  prerelease: false
50
106
  version_requirements: !ruby/object:Gem::Requirement
51
107
  requirements:
52
108
  - - ">="
53
109
  - !ruby/object:Gem::Version
54
- version: '6.0'
110
+ version: '0'
55
111
  - !ruby/object:Gem::Dependency
56
112
  name: sqlite3
57
113
  requirement: !ruby/object:Gem::Requirement
@@ -66,30 +122,27 @@ dependencies:
66
122
  - - "~>"
67
123
  - !ruby/object:Gem::Version
68
124
  version: '1.4'
69
- description: generates primary keys using prefixed nanoids for ActiveRecord models
125
+ description: CoolId generates primary keys using prefixed nanoids for ActiveRecord
126
+ models, providing unique and readable identifiers.
70
127
  email:
71
128
  - git@schpet.com
72
129
  executables: []
73
130
  extensions: []
74
131
  extra_rdoc_files: []
75
132
  files:
76
- - ".aider.conf.yml"
77
- - ".rspec"
78
- - ".standard.yml"
133
+ - ".yardopts"
79
134
  - CHANGELOG.md
80
135
  - LICENSE
81
136
  - README.md
82
- - Rakefile
83
137
  - lib/cool_id.rb
84
138
  - lib/cool_id/version.rb
85
- - sig/cool_id.rbs
86
139
  homepage: https://github.com/schpet/cool_id
87
140
  licenses:
88
141
  - ISC
89
142
  metadata:
90
143
  homepage_uri: https://github.com/schpet/cool_id
91
144
  source_code_uri: https://github.com/schpet/cool_id
92
- changelog_uri: https://github.com/schpet/cool_id/tree/main/CHANGELOG.md
145
+ changelog_uri: https://github.com/schpet/cool_id/blob/main/CHANGELOG.md
93
146
  post_install_message:
94
147
  rdoc_options: []
95
148
  require_paths:
@@ -98,15 +151,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
98
151
  requirements:
99
152
  - - ">="
100
153
  - !ruby/object:Gem::Version
101
- version: 3.0.0
154
+ version: 3.1.0
102
155
  required_rubygems_version: !ruby/object:Gem::Requirement
103
156
  requirements:
104
157
  - - ">="
105
158
  - !ruby/object:Gem::Version
106
159
  version: '0'
107
160
  requirements: []
108
- rubygems_version: 3.5.11
161
+ rubygems_version: 3.5.22
109
162
  signing_key:
110
163
  specification_version: 4
111
- summary: generates cool ids
164
+ summary: Generates cool ids for ActiveRecord models
112
165
  test_files: []
data/.aider.conf.yml DELETED
@@ -1,9 +0,0 @@
1
- # https://aider.chat/docs/config/aider_conf.html
2
-
3
- lint-cmd: bundle exec standardrb --fix
4
- auto-lint: true
5
-
6
- test-cmd: bundle exec rspec --format progress --no-profile --no-color --fail-fast
7
- auto-test: true
8
-
9
- read: cool_id.gemspec
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --format documentation
2
- --color
3
- --require spec_helper
data/.standard.yml DELETED
@@ -1,3 +0,0 @@
1
- # For available configuration options, see:
2
- # https://github.com/standardrb/standard
3
- ruby_version: 3.0
data/Rakefile DELETED
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "bundler/gem_tasks"
4
- require "rspec/core/rake_task"
5
-
6
- RSpec::Core::RakeTask.new(:spec)
7
-
8
- require "standard/rake"
9
-
10
- task default: %i[spec standard]
data/sig/cool_id.rbs DELETED
@@ -1,4 +0,0 @@
1
- module CoolId
2
- VERSION: String
3
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
- end