human_routes 0.0.4 → 0.0.7
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/.rubocop.yml +1 -0
- data/README.md +49 -0
- data/lib/human_routes/context.rb +33 -9
- data/lib/human_routes/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b141f9a399978068f28f1756d0a575a893aaeb48d998ce3aecb641bb0648fb57
|
4
|
+
data.tar.gz: cf69b4906f02fad6d251ec3210e902961f27cea5e9f1e1757a947d8aca34ae9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4023dccdbcfbd1be66d10124df81e4b1f75fb3daf354d309ce391b90fd4762701e33a28baa18a930bd0a56617729b656d020fad65d045828691f3e4d95913ac1
|
7
|
+
data.tar.gz: 4f4708fe090019fff8a630aa403b76a66d38480feccb26856cfb21559b3cda61a7fdced5d077cd896bdd0aaf48c9044d1d5c0bd0115bf149b119c29facd3c680
|
data/.rubocop.yml
CHANGED
data/README.md
CHANGED
@@ -120,6 +120,7 @@ Rails.application.routes.draw do
|
|
120
120
|
# This will generate the following routes:
|
121
121
|
#
|
122
122
|
# GET /profile profile_path
|
123
|
+
# GET /profile/new new_profile_path
|
123
124
|
# POST /profile/new
|
124
125
|
# GET /profile/edit edit_profile_path
|
125
126
|
# POST /profile/edit
|
@@ -128,6 +129,21 @@ Rails.application.routes.draw do
|
|
128
129
|
route "profile" do
|
129
130
|
all
|
130
131
|
end
|
132
|
+
|
133
|
+
# You can use `resource: true` when you want a plural route but need a
|
134
|
+
# singular resource.
|
135
|
+
#
|
136
|
+
# GET /settings settings_path
|
137
|
+
# GET /settings/new new_settings_path
|
138
|
+
# POST /settings/new
|
139
|
+
# GET /settings/edit edit_settings_path
|
140
|
+
# POST /settings/edit
|
141
|
+
# GET /settings/remove remove_settings_path
|
142
|
+
# POST /settings/remove
|
143
|
+
#
|
144
|
+
route "settings", resource: true do
|
145
|
+
all
|
146
|
+
end
|
131
147
|
end
|
132
148
|
```
|
133
149
|
|
@@ -159,6 +175,39 @@ Rails.application.routes.draw do
|
|
159
175
|
end
|
160
176
|
```
|
161
177
|
|
178
|
+
For nested paths, you can use `:prefix`:
|
179
|
+
|
180
|
+
```ruby
|
181
|
+
Rails.application.routes.draw do
|
182
|
+
route :posts do
|
183
|
+
all
|
184
|
+
end
|
185
|
+
|
186
|
+
route :comments, prefix: "posts/:post_id" do
|
187
|
+
remove #=> /posts/:post_id/comments/:id/remove
|
188
|
+
list #=> /posts/:post_id/comments
|
189
|
+
|
190
|
+
# or
|
191
|
+
all
|
192
|
+
end
|
193
|
+
end
|
194
|
+
```
|
195
|
+
|
196
|
+
If you need to change the url path, but point to a different controller, then
|
197
|
+
use `:path_name`:
|
198
|
+
|
199
|
+
```ruby
|
200
|
+
Rails.application.routes.draw do
|
201
|
+
route :blogs do
|
202
|
+
all
|
203
|
+
end
|
204
|
+
|
205
|
+
route :blog_comments, path: "blogs/:blog_id", path_name: "comments" do
|
206
|
+
all
|
207
|
+
end
|
208
|
+
end
|
209
|
+
```
|
210
|
+
|
162
211
|
## Development
|
163
212
|
|
164
213
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
data/lib/human_routes/context.rb
CHANGED
@@ -16,11 +16,19 @@ module HumanRoutes
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def singular_controller_name
|
19
|
-
@singular_controller_name ||=
|
19
|
+
@singular_controller_name ||= if options[:resource]
|
20
|
+
controller_name
|
21
|
+
else
|
22
|
+
controller_name.singularize
|
23
|
+
end
|
20
24
|
end
|
21
25
|
|
22
26
|
def resource?
|
23
|
-
controller_name == singular_controller_name
|
27
|
+
options[:resource] || controller_name == singular_controller_name
|
28
|
+
end
|
29
|
+
|
30
|
+
def path_name
|
31
|
+
options[:path_name] || controller_name
|
24
32
|
end
|
25
33
|
|
26
34
|
def routes
|
@@ -129,7 +137,7 @@ module HumanRoutes
|
|
129
137
|
update
|
130
138
|
remove
|
131
139
|
show
|
132
|
-
list unless
|
140
|
+
list unless resource?
|
133
141
|
end
|
134
142
|
|
135
143
|
def get(action, *args)
|
@@ -180,9 +188,25 @@ module HumanRoutes
|
|
180
188
|
.merge(route_options)
|
181
189
|
|
182
190
|
path = args.first || path_for(segment, route_options)
|
183
|
-
|
191
|
+
|
192
|
+
path = [
|
193
|
+
route_options[:prefix].to_s.split("/"),
|
194
|
+
path.to_s.split("/")
|
195
|
+
].flatten.compact
|
196
|
+
|
197
|
+
path = path.map do |s|
|
198
|
+
s.start_with?(":") ? s : s.dasherize
|
199
|
+
end.join("/")
|
200
|
+
|
184
201
|
name = route_options.delete(:as) { default_name.underscore.tr("/", "_") }
|
185
202
|
|
203
|
+
%i[
|
204
|
+
bare
|
205
|
+
prefix
|
206
|
+
path_name
|
207
|
+
resource
|
208
|
+
].each {|key| route_options.delete(key) }
|
209
|
+
|
186
210
|
[path, name, route_options]
|
187
211
|
end
|
188
212
|
|
@@ -205,7 +229,7 @@ module HumanRoutes
|
|
205
229
|
end
|
206
230
|
|
207
231
|
private def resource_segments(segment, _param, options)
|
208
|
-
segments = [
|
232
|
+
segments = [path_name]
|
209
233
|
segments << segment unless options[:bare]
|
210
234
|
segments
|
211
235
|
end
|
@@ -213,13 +237,13 @@ module HumanRoutes
|
|
213
237
|
private def resources_segments(segment, param, _options)
|
214
238
|
case segment
|
215
239
|
when :list
|
216
|
-
[
|
240
|
+
[path_name]
|
217
241
|
when :new
|
218
|
-
[
|
242
|
+
[path_name, segment]
|
219
243
|
when :show
|
220
|
-
[
|
244
|
+
[path_name, ":#{param}"]
|
221
245
|
else
|
222
|
-
[
|
246
|
+
[path_name, ":#{param}", segment]
|
223
247
|
end
|
224
248
|
end
|
225
249
|
end
|
data/lib/human_routes/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: human_routes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nando Vieira
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -167,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
167
167
|
- !ruby/object:Gem::Version
|
168
168
|
version: '0'
|
169
169
|
requirements: []
|
170
|
-
rubygems_version: 3.
|
170
|
+
rubygems_version: 3.3.17
|
171
171
|
signing_key:
|
172
172
|
specification_version: 4
|
173
173
|
summary: I say no to REST for client-facing urls.
|