js_from_routes 3.0.2 → 4.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +18 -0
- data/lib/js_from_routes/generator.rb +39 -15
- data/lib/js_from_routes/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0638fb2569cd2fb42213161ed2ac0f850edf79a3d383b067fbfef9ba28c91635'
|
4
|
+
data.tar.gz: 5dc8afb64a0ba08b94ac23f253c7934e485690d67af2811a0aff123ff97acb3e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7df240239621acee87a8c216218dbd6aa138cf49b117929930da3153da651b4d242ec4cc27c2e0a734fee796fb632e5005a60f56848de807a8dd93faf84d0636
|
7
|
+
data.tar.gz: 4e179ae1663a0e77f300e7f6875246e58ad120f1d2fb9b4620a1f148621d9489d2f2897982e792a1f904b896650d7537caf6763ce363390e51b7a94533004053
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
## [4.0.1](https://github.com/ElMassimo/js_from_routes/compare/js_from_routes@4.0.0...js_from_routes@4.0.1) (2024-11-08)
|
2
|
+
|
3
|
+
|
4
|
+
### Features
|
5
|
+
|
6
|
+
* allow using with rails 8 ([ffcefb9](https://github.com/ElMassimo/js_from_routes/commit/ffcefb9c4eda530cec107b0e74e71d318f6e76a0)), closes [#53](https://github.com/ElMassimo/js_from_routes/issues/53)
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
# [4.0.0](https://github.com/ElMassimo/js_from_routes/compare/js_from_routes@3.0.2...js_from_routes@4.0.0) (2024-10-11)
|
11
|
+
|
12
|
+
|
13
|
+
### Features
|
14
|
+
|
15
|
+
* allow customizing the namespace for path helpers ([#50](https://github.com/ElMassimo/js_from_routes/issues/50)) ([9d38c83](https://github.com/ElMassimo/js_from_routes/commit/9d38c8312ef1275b3b8c18c1129bc936da08bcd0))
|
16
|
+
|
17
|
+
|
18
|
+
|
1
19
|
## [3.0.2](https://github.com/ElMassimo/js_from_routes/compare/js_from_routes@3.0.1...js_from_routes@3.0.2) (2024-09-25)
|
2
20
|
|
3
21
|
|
@@ -15,8 +15,13 @@ module JsFromRoutes
|
|
15
15
|
def initialize(controller, routes, config)
|
16
16
|
@controller, @config = controller, config
|
17
17
|
@routes = routes
|
18
|
-
.
|
19
|
-
.
|
18
|
+
.reject { |route| route.requirements[:action] == "update" && route.verb == "PUT" }
|
19
|
+
.group_by { |route| route.requirements.fetch(:action) }
|
20
|
+
.flat_map { |action, routes|
|
21
|
+
routes.each_with_index.map { |route, index|
|
22
|
+
Route.new(route, mappings: config.helper_mappings, index:, controller:)
|
23
|
+
}
|
24
|
+
}
|
20
25
|
end
|
21
26
|
|
22
27
|
# Public: Used to check whether the file should be generated again, changes
|
@@ -53,8 +58,8 @@ module JsFromRoutes
|
|
53
58
|
|
54
59
|
# Internal: A presenter for an individual Rails action.
|
55
60
|
class Route
|
56
|
-
def initialize(route, mappings
|
57
|
-
@route, @mappings = route, mappings
|
61
|
+
def initialize(route, mappings:, controller:, index: 0)
|
62
|
+
@route, @mappings, @controller, @index = route, mappings, controller, index
|
58
63
|
end
|
59
64
|
|
60
65
|
# Public: The `export` setting specified for the action.
|
@@ -64,7 +69,7 @@ module JsFromRoutes
|
|
64
69
|
|
65
70
|
# Public: The HTTP verb for the action. Example: 'patch'
|
66
71
|
def verb
|
67
|
-
@route.verb.downcase
|
72
|
+
@route.verb.split("|").last.downcase
|
68
73
|
end
|
69
74
|
|
70
75
|
# Public: The path for the action. Example: '/users/:id/edit'
|
@@ -74,8 +79,12 @@ module JsFromRoutes
|
|
74
79
|
|
75
80
|
# Public: The name of the JS helper for the action. Example: 'destroyAll'
|
76
81
|
def helper
|
77
|
-
action = @route.requirements.fetch(:action)
|
78
|
-
@
|
82
|
+
action = @route.requirements.fetch(:action)
|
83
|
+
if @index > 0
|
84
|
+
action = @route.name&.sub(@controller.tr(":/", "_"), "") || "#{action}#{verb.titleize}"
|
85
|
+
end
|
86
|
+
helper = action.camelize(:lower)
|
87
|
+
@mappings.fetch(helper, helper)
|
79
88
|
end
|
80
89
|
|
81
90
|
# Internal: Useful as a cache key for the route, and for debugging purposes.
|
@@ -145,6 +154,16 @@ module JsFromRoutes
|
|
145
154
|
end
|
146
155
|
end
|
147
156
|
|
157
|
+
class TemplateConfig
|
158
|
+
attr_reader :cache_key, :filename, :helpers
|
159
|
+
|
160
|
+
def initialize(cache_key:, filename:, helpers: nil)
|
161
|
+
@cache_key = cache_key
|
162
|
+
@filename = filename
|
163
|
+
@helpers = helpers
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
148
167
|
class << self
|
149
168
|
# Public: Configuration of the code generator.
|
150
169
|
def config
|
@@ -164,7 +183,8 @@ module JsFromRoutes
|
|
164
183
|
|
165
184
|
def generate_files(exported_routes)
|
166
185
|
template = Template.new(config.template_path)
|
167
|
-
generate_file_for_all exported_routes.
|
186
|
+
generate_file_for_all exported_routes.filter_map { |controller, routes|
|
187
|
+
next unless controller
|
168
188
|
ControllerRoutes.new(controller, routes, config).tap do |routes|
|
169
189
|
template.write_if_changed routes
|
170
190
|
end
|
@@ -177,24 +197,28 @@ module JsFromRoutes
|
|
177
197
|
preferred_extension = File.extname(config.file_suffix)
|
178
198
|
index_file = (config.all_helpers_file == true) ? "index#{preferred_extension}" : config.all_helpers_file
|
179
199
|
|
180
|
-
Template.new(config.template_all_path).write_if_changed
|
200
|
+
Template.new(config.template_all_path).write_if_changed TemplateConfig.new(
|
181
201
|
cache_key: routes.map(&:import_filename).join + File.read(config.template_all_path),
|
182
202
|
filename: config.output_folder.join("all#{preferred_extension}"),
|
183
203
|
helpers: routes,
|
184
204
|
)
|
185
|
-
Template.new(config.template_index_path).write_if_changed
|
205
|
+
Template.new(config.template_index_path).write_if_changed TemplateConfig.new(
|
186
206
|
cache_key: File.read(config.template_index_path),
|
187
207
|
filename: config.output_folder.join(index_file),
|
188
208
|
)
|
189
209
|
end
|
190
210
|
|
211
|
+
def namespace_for_route(route)
|
212
|
+
if (export = route.defaults[:export]).is_a?(Hash)
|
213
|
+
export[:namespace]
|
214
|
+
end || route.requirements[:controller]
|
215
|
+
end
|
216
|
+
|
191
217
|
# Internal: Returns exported routes grouped by controller name.
|
192
218
|
def exported_routes_by_controller(routes)
|
193
|
-
routes
|
194
|
-
config.export_if.call(route)
|
195
|
-
|
196
|
-
route.requirements.fetch(:controller)
|
197
|
-
}
|
219
|
+
routes
|
220
|
+
.select { |route| config.export_if.call(route) }
|
221
|
+
.group_by { |route| namespace_for_route(route)&.to_s }
|
198
222
|
end
|
199
223
|
end
|
200
224
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: js_from_routes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Máximo Mussini
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: '5.1'
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '9'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: '5.1'
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '9'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: bundler
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|