encoded_id-rails 0.5.0 → 0.6.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.
Potentially problematic release.
This version of encoded_id-rails might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +27 -1
- data/README.md +44 -19
- data/Steepfile +1 -1
- data/lib/encoded_id/rails/{with_encoded_id.rb → model.rb} +1 -1
- data/lib/encoded_id/rails/path_param.rb +14 -0
- data/lib/encoded_id/rails/slugged_path_param.rb +14 -0
- data/lib/encoded_id/rails/version.rb +1 -1
- data/lib/encoded_id/rails.rb +6 -2
- data/sig/encoded_id/rails.rbs +30 -16
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 599b4c236c59881b00eefbe0feaf4fa6f1a04015573ba5d807f041ba2932e602
|
4
|
+
data.tar.gz: ff6ee760d956606accfb98a75be00cf04a545695e0dcce56e9eb271b1d824fee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f176effb4bc926a4aa61dcbb7d0ca0e88b972186438ffe03a96b68d5e78e1eb0b6a485efcad924aff2070097356b8ced016fb1da0253b38f1d9e80eef21e18e
|
7
|
+
data.tar.gz: 2f318e0a04cbd5a45fc3edca02c1a8e053590b70963f4b851f8aac150ea465018aea6f21d3f5951bf4c8f7e31bd650a05a8a46328c2ce0812e8e26d2d4e92099
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,31 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
-
## [0.
|
3
|
+
## [0.6.0] - 2022-12-21
|
4
|
+
|
5
|
+
- Rename mixin to `Model`
|
6
|
+
- Introduce optional mixins for overriding `#to_param`
|
7
|
+
|
8
|
+
## [0.5.0] - 2022-12-21
|
9
|
+
|
10
|
+
- `name_for_encoded_id_slug` no longer uses the return value from name but rather just uses the `class` `name`.
|
11
|
+
- If you want to change the name used in the slug, override `name_for_encoded_id_slug`
|
12
|
+
|
13
|
+
## [0.4.0] - 2022-12-18
|
14
|
+
|
15
|
+
- Refactor internals, remove any methods not actually related to creating `encoded_id`, (eg `slugged_id` was removed).
|
16
|
+
|
17
|
+
## [0.3.1] - 2022-12-15
|
18
|
+
|
19
|
+
- Fix default config
|
20
|
+
|
21
|
+
## [0.3.0] - 2022-12-15
|
22
|
+
|
23
|
+
- Updates gem `encoded_id` dependency and fixes configuration
|
24
|
+
|
25
|
+
## [0.2.0] - 2022-12-14
|
26
|
+
|
27
|
+
- No notes...
|
28
|
+
|
29
|
+
## [0.1.0] - 2022-11-17
|
4
30
|
|
5
31
|
- Initial release
|
data/README.md
CHANGED
@@ -6,16 +6,16 @@ EncodedID lets you turn numeric or hex IDs into reversible and human friendly ob
|
|
6
6
|
|
7
7
|
```ruby
|
8
8
|
class User < ApplicationRecord
|
9
|
-
include EncodedId::
|
10
|
-
|
9
|
+
include EncodedId::Model
|
10
|
+
|
11
11
|
def name_for_encoded_id_slug
|
12
|
-
full_name
|
12
|
+
full_name
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
user = User.find_by_encoded_id("p5w9-z27j")
|
17
|
-
user.encoded_id
|
18
|
-
user.slugged_encoded_id
|
16
|
+
user = User.find_by_encoded_id("p5w9-z27j") # => #<User id: 78>
|
17
|
+
user.encoded_id # => "p5w9-z27j"
|
18
|
+
user.slugged_encoded_id # => "bob-smith--p5w9-z27j"
|
19
19
|
```
|
20
20
|
|
21
21
|
# Features
|
@@ -85,21 +85,45 @@ You can configure:
|
|
85
85
|
|
86
86
|
### ActiveRecord model setup
|
87
87
|
|
88
|
-
Include `EncodedId::
|
88
|
+
Include `EncodedId::Model` in your model and optionally specify a encoded id salt (or not if using a global one):
|
89
89
|
|
90
90
|
```ruby
|
91
91
|
class User < ApplicationRecord
|
92
|
-
include EncodedId::
|
93
|
-
|
92
|
+
include EncodedId::Model
|
93
|
+
|
94
94
|
# and optionally the model's salt
|
95
95
|
def encoded_id_salt
|
96
96
|
"my-user-model-salt"
|
97
97
|
end
|
98
|
-
|
98
|
+
|
99
99
|
# ...
|
100
100
|
end
|
101
101
|
```
|
102
102
|
|
103
|
+
### Optional mixins
|
104
|
+
|
105
|
+
You can optionally include one of the following mixins to add default overrides to `#to_param`.
|
106
|
+
|
107
|
+
- `EncodedId::PathParam`
|
108
|
+
- `EncodedId::SluggedPathParam`
|
109
|
+
|
110
|
+
This is so that an instance of the model can be used in path helpers and
|
111
|
+
return the encoded ID string instead of the record ID by default.
|
112
|
+
|
113
|
+
```ruby
|
114
|
+
class User < ApplicationRecord
|
115
|
+
include EncodedId::Model
|
116
|
+
include EncodedId::SluggedPathParam
|
117
|
+
|
118
|
+
def name_for_encoded_id_slug
|
119
|
+
full_name
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
user = User.create(full_name: "Bob Smith")
|
124
|
+
Rails.application.routes.url_helpers.user_path(user) # => "/users/bob-smith--p5w9-z27j"
|
125
|
+
```
|
126
|
+
|
103
127
|
## Documentation
|
104
128
|
|
105
129
|
### `.find_by_encoded_id`
|
@@ -164,12 +188,13 @@ Otherwise override this method to return a salt specific to the model.
|
|
164
188
|
|
165
189
|
```ruby
|
166
190
|
class User < ApplicationRecord
|
167
|
-
include EncodedId::
|
168
|
-
|
191
|
+
include EncodedId::Model
|
192
|
+
|
169
193
|
def encoded_id_salt
|
170
194
|
"my-user-model-salt"
|
171
195
|
end
|
172
196
|
end
|
197
|
+
|
173
198
|
User.encoded_id_salt # => "my-user-model-salt"
|
174
199
|
```
|
175
200
|
|
@@ -201,8 +226,8 @@ By default it calls `#name` on the instance, or if the instance does not respond
|
|
201
226
|
|
202
227
|
```ruby
|
203
228
|
class User < ApplicationRecord
|
204
|
-
include EncodedId::
|
205
|
-
|
229
|
+
include EncodedId::Model
|
230
|
+
|
206
231
|
# If User has an attribute `name`, that will be used for the slug,
|
207
232
|
# otherwise `user` will be used as determined by the class name.
|
208
233
|
end
|
@@ -217,8 +242,8 @@ You can optionally override this method to define your own slug:
|
|
217
242
|
|
218
243
|
```ruby
|
219
244
|
class User < ApplicationRecord
|
220
|
-
include EncodedId::
|
221
|
-
|
245
|
+
include EncodedId::Model
|
246
|
+
|
222
247
|
def name_for_encoded_id_slug
|
223
248
|
superhero_name
|
224
249
|
end
|
@@ -232,11 +257,11 @@ user.slugged_encoded_id # => "super-dev--37nw-8nh7"
|
|
232
257
|
|
233
258
|
Simply add the mixin to your `ApplicationRecord`:
|
234
259
|
|
235
|
-
```ruby
|
260
|
+
```ruby
|
236
261
|
class ApplicationRecord < ActiveRecord::Base
|
237
262
|
self.abstract_class = true
|
238
|
-
include EncodedId::
|
239
|
-
|
263
|
+
include EncodedId::Model
|
264
|
+
|
240
265
|
...
|
241
266
|
end
|
242
267
|
```
|
data/Steepfile
CHANGED
data/lib/encoded_id/rails.rb
CHANGED
@@ -9,7 +9,9 @@ require_relative "rails/salt"
|
|
9
9
|
require_relative "rails/encoder_methods"
|
10
10
|
require_relative "rails/query_methods"
|
11
11
|
require_relative "rails/finder_methods"
|
12
|
-
require_relative "rails/
|
12
|
+
require_relative "rails/path_param"
|
13
|
+
require_relative "rails/slugged_path_param"
|
14
|
+
require_relative "rails/model"
|
13
15
|
|
14
16
|
module EncodedId
|
15
17
|
module Rails
|
@@ -27,5 +29,7 @@ module EncodedId
|
|
27
29
|
end
|
28
30
|
|
29
31
|
# Expose directly on EncodedId
|
30
|
-
|
32
|
+
Model = Rails::Model
|
33
|
+
PathParam = Rails::PathParam
|
34
|
+
SluggedPathParam = Rails::SluggedPathParam
|
31
35
|
end
|
data/sig/encoded_id/rails.rbs
CHANGED
@@ -2,6 +2,21 @@ module EncodedId
|
|
2
2
|
module Rails
|
3
3
|
VERSION: ::String
|
4
4
|
|
5
|
+
class Configuration
|
6
|
+
attr_accessor salt: ::String
|
7
|
+
attr_accessor group_separator: ::String
|
8
|
+
attr_accessor character_group_size: ::Integer
|
9
|
+
attr_accessor alphabet: ::EncodedId::Alphabet
|
10
|
+
attr_accessor id_length: ::Integer
|
11
|
+
attr_accessor slugged_id_separator: ::String
|
12
|
+
|
13
|
+
def initialize: () -> void
|
14
|
+
end
|
15
|
+
|
16
|
+
attr_reader self.configuration: Configuration
|
17
|
+
|
18
|
+
def self.configure: () { (Configuration config) -> void } -> void
|
19
|
+
|
5
20
|
class Coder
|
6
21
|
def initialize: (salt: ::String, id_length: ::Integer, character_group_size: ::Integer, separator: ::String, alphabet: ::EncodedId::Alphabet) -> void
|
7
22
|
def encode: (::Integer | ::Array[::Integer]) -> String
|
@@ -18,17 +33,6 @@ module EncodedId
|
|
18
33
|
def coder: -> ::EncodedId::ReversibleId
|
19
34
|
end
|
20
35
|
|
21
|
-
class Configuration
|
22
|
-
attr_accessor salt: ::String
|
23
|
-
attr_accessor group_separator: ::String
|
24
|
-
attr_accessor character_group_size: ::Integer
|
25
|
-
attr_accessor alphabet: ::EncodedId::Alphabet
|
26
|
-
attr_accessor id_length: ::Integer
|
27
|
-
attr_accessor slugged_id_separator: ::String
|
28
|
-
|
29
|
-
def initialize: () -> void
|
30
|
-
end
|
31
|
-
|
32
36
|
class Salt
|
33
37
|
def initialize: (Class klass, ::String salt) -> void
|
34
38
|
|
@@ -56,10 +60,6 @@ module EncodedId
|
|
56
60
|
attr_reader id: ::String?
|
57
61
|
end
|
58
62
|
|
59
|
-
attr_reader self.configuration: Configuration
|
60
|
-
|
61
|
-
def self.configure: () { (Configuration config) -> void } -> void
|
62
|
-
|
63
63
|
module EncoderMethods
|
64
64
|
def encode_encoded_id: (untyped id, ?::Hash[::Symbol, untyped] options) -> ::String
|
65
65
|
def decode_encoded_id: (::String slugged_encoded_id, ?::Hash[::Symbol, untyped] options) -> ::Array[::Integer]?
|
@@ -85,7 +85,7 @@ module EncodedId
|
|
85
85
|
def where_encoded_id: (::String slugged_encoded_id) -> untyped
|
86
86
|
end
|
87
87
|
|
88
|
-
module
|
88
|
+
module Model : ActiveRecord::Base
|
89
89
|
extend ActiveRecord::FinderMethods
|
90
90
|
extend ActiveRecord::QueryMethods
|
91
91
|
|
@@ -100,5 +100,19 @@ module EncodedId
|
|
100
100
|
def slugged_encoded_id: (?with: ::Symbol) -> ::String
|
101
101
|
def name_for_encoded_id_slug: () -> ::String
|
102
102
|
end
|
103
|
+
|
104
|
+
interface _ActiveRecordToParam
|
105
|
+
def to_param: () -> ::String
|
106
|
+
end
|
107
|
+
|
108
|
+
module PathParam : Model, _ActiveRecordToParam
|
109
|
+
end
|
110
|
+
|
111
|
+
module SluggedPathParam : Model, _ActiveRecordToParam
|
112
|
+
end
|
103
113
|
end
|
114
|
+
|
115
|
+
Model: singleton(Rails::Model)
|
116
|
+
PathParam: singleton(Rails::PathParam)
|
117
|
+
SluggedPathParam: singleton(Rails::SluggedPathParam)
|
104
118
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: encoded_id-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen Ierodiaconou
|
@@ -86,12 +86,14 @@ files:
|
|
86
86
|
- lib/encoded_id/rails/configuration.rb
|
87
87
|
- lib/encoded_id/rails/encoder_methods.rb
|
88
88
|
- lib/encoded_id/rails/finder_methods.rb
|
89
|
+
- lib/encoded_id/rails/model.rb
|
90
|
+
- lib/encoded_id/rails/path_param.rb
|
89
91
|
- lib/encoded_id/rails/query_methods.rb
|
90
92
|
- lib/encoded_id/rails/salt.rb
|
91
93
|
- lib/encoded_id/rails/slugged_id.rb
|
92
94
|
- lib/encoded_id/rails/slugged_id_parser.rb
|
95
|
+
- lib/encoded_id/rails/slugged_path_param.rb
|
93
96
|
- lib/encoded_id/rails/version.rb
|
94
|
-
- lib/encoded_id/rails/with_encoded_id.rb
|
95
97
|
- lib/generators/encoded_id/rails/USAGE
|
96
98
|
- lib/generators/encoded_id/rails/install_generator.rb
|
97
99
|
- lib/generators/encoded_id/rails/templates/encoded_id.rb
|