js_from_routes 1.0.1 โ 1.0.2
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/CHANGELOG.md +13 -0
- data/README.md +40 -11
- data/lib/js_from_routes/template.js.erb +22 -0
- data/lib/js_from_routes/version.rb +1 -1
- data/spec/js_from_routes/js_from_routes_spec.rb +1 -1
- metadata +8 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8202e9323cb738556cdc4e126c7c343eaae6b01d52a72bdff00eb93b7ab925af
|
4
|
+
data.tar.gz: 3caa18595ef98a85e8dd7f162e0f530d708a464c2bcc1fd823b4cfbaea947af7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3bba34efe8b9a91114708326e556dcdfe7549231d61aeb366bb16759471615f8aedb87692eab8420b0039695b359e02da5be4f974c604a535a4ae19efa131ecc
|
7
|
+
data.tar.gz: f54793177eb17df4e42548775f1dbd935b366f838d49488947100f606008eefc48d96b6ad38c0611d95bc5d267c52a24aead758856ddfdd0c87adc3b745e46bf
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
## JsFromRoutes 1.0.2 (2021-03-10) ##
|
2
|
+
|
3
|
+
* Ensure a default `template.js.erb` ships with the gem.
|
4
|
+
|
5
|
+
|
6
|
+
## JsFromRoutes 1.0.1 (2020-06-21) ##
|
7
|
+
|
8
|
+
* Expose `export_setting` in the `Route` API, to support custom workflows.
|
9
|
+
|
10
|
+
|
11
|
+
## JsFromRoutes 1.0.0 (2020-06-21) ##
|
12
|
+
|
13
|
+
* Initial Release.
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@ JS From Rails Routes
|
|
4
4
|
<a href="https://travis-ci.org/ElMassimo/js_from_routes"><img alt="Build Status" src="https://travis-ci.org/ElMassimo/js_from_routes.svg"/></a>
|
5
5
|
<a href="http://inch-ci.org/github/ElMassimo/js_from_routes"><img alt="Inline docs" src="http://inch-ci.org/github/ElMassimo/js_from_routes.svg"/></a>
|
6
6
|
<a href="https://codeclimate.com/github/ElMassimo/js_from_routes"><img alt="Maintainability" src="https://codeclimate.com/github/ElMassimo/js_from_routes/badges/gpa.svg"/></a>
|
7
|
-
<a href="https://codeclimate.com/github/ElMassimo/js_from_routes"><img alt="Test Coverage" src="https://codeclimate.com/github/ElMassimo/
|
7
|
+
<a href="https://codeclimate.com/github/ElMassimo/js_from_routes"><img alt="Test Coverage" src="https://codeclimate.com/github/ElMassimo/js_from_routes/badges/coverage.svg"/></a>
|
8
8
|
<a href="https://rubygems.org/gems/js_from_routes"><img alt="Gem Version" src="https://img.shields.io/gem/v/js_from_routes.svg?colorB=e9573f"/></a>
|
9
9
|
<a href="https://github.com/ElMassimo/js_from_routes/blob/master/LICENSE.txt"><img alt="License" src="https://img.shields.io/badge/license-MIT-428F7E.svg"/></a>
|
10
10
|
</p>
|
@@ -14,6 +14,8 @@ _JS from Routes_ helps you by automatically generating path and API helpers from
|
|
14
14
|
Rails route definitions, allowing you to save development effort and focus on
|
15
15
|
the things that matter.
|
16
16
|
|
17
|
+
Check out [this pull request](https://github.com/ElMassimo/pingcrm-vite/pull/2) to get a sense of how flexible it can be.
|
18
|
+
|
17
19
|
### Why? ๐ค
|
18
20
|
|
19
21
|
Path helpers in Rails are useful, and make it easier to build urls, avoiding
|
@@ -26,10 +28,12 @@ With this library, it's possible the enjoy the same benefits in JS:
|
|
26
28
|
an error that is easier to detect than a 404.
|
27
29
|
- We can embed the the HTTP verb in the helper. Changing the verb in the route causes the JS
|
28
30
|
code to be regenerated, no need to update the consumer!
|
31
|
+
|
32
|
+
Read more about it in the [blog announcement](https://maximomussini.com/posts/js-from-routes/).
|
29
33
|
|
30
34
|
### Installation ๐ฟ
|
31
35
|
|
32
|
-
Add this line to your application's Gemfile:
|
36
|
+
Add this line to your application's Gemfile in the `development` group:
|
33
37
|
|
34
38
|
```ruby
|
35
39
|
gem 'js_from_routes'
|
@@ -71,16 +75,37 @@ you can use a rake task instead:
|
|
71
75
|
bin/rake js_from_routes:generate
|
72
76
|
```
|
73
77
|
|
78
|
+
which can generate code such as:
|
79
|
+
|
80
|
+
```js
|
81
|
+
import { formatUrl } from '@helpers/UrlHelper'
|
82
|
+
import { request } from '@services/ApiService'
|
83
|
+
|
84
|
+
export default {
|
85
|
+
downloadPath: options =>
|
86
|
+
formatUrl('/video_clips/:id/download', options),
|
87
|
+
|
88
|
+
get: options =>
|
89
|
+
request('get', '/video_clips/:id', options),
|
90
|
+
|
91
|
+
update: options =>
|
92
|
+
request('patch', '/video_clips/:id', options),
|
93
|
+
}
|
94
|
+
```
|
95
|
+
|
74
96
|
#### 3. Use the generated code in your JS application
|
75
97
|
|
76
|
-
This can happen in many [different ways](https://github.com/ElMassimo/js_from_routes/blob/master/spec/support/sample_app/app/javascript/Videos.vue#L10), but to illustrate using the example above
|
98
|
+
This can happen in many [different ways](https://github.com/ElMassimo/js_from_routes/blob/master/spec/support/sample_app/app/javascript/Videos.vue#L10), but to illustrate using the example above, in combination with [`axios`](https://github.com/axios/axios) or `fetch`:
|
77
99
|
|
78
100
|
```js
|
79
101
|
import VideoClipsRequests from '@requests/VideoClipsRequests'
|
80
102
|
|
81
|
-
VideoClipsRequests.get({ id: 'oHg5SJYRHA0' }).then(
|
103
|
+
VideoClipsRequests.get({ id: 'oHg5SJYRHA0' }).then(data => { this.video = data })
|
82
104
|
|
83
|
-
const
|
105
|
+
const newVideo = { ...this.video, format: '.mp4' }
|
106
|
+
VideoClipsRequests.update(newVideo)
|
107
|
+
|
108
|
+
const path = VideoClipsRequests.downloadPath(newVideo)
|
84
109
|
```
|
85
110
|
|
86
111
|
Check the [examples](https://github.com/ElMassimo/js_from_routes/blob/master/spec/support/sample_app/app/javascript/Videos.vue) for ideas on how to [use it](https://github.com/ElMassimo/js_from_routes/blob/master/spec/support/sample_app/app/javascript/Videos.vue), and how you can [configure](https://github.com/ElMassimo/js_from_routes/blob/master/spec/support/sample_app/config/webpack/aliases.js#L11) Webpack to your convenience.
|
@@ -97,7 +122,7 @@ The following [settings](https://github.com/ElMassimo/js_from_routes/blob/master
|
|
97
122
|
##### [`file_suffix`](https://github.com/ElMassimo/js_from_routes/blob/master/lib/js_from_routes/generator.rb#L77), default: `Requests.js`
|
98
123
|
|
99
124
|
This suffix is added by default to all generated files. You can modify it to
|
100
|
-
if you prefer a different convention.
|
125
|
+
if you prefer a different convention, or if you use it to generate TypeScript.
|
101
126
|
|
102
127
|
##### [`helper_mappings`](https://github.com/ElMassimo/js_from_routes/blob/master/lib/js_from_routes/generator.rb#L80)
|
103
128
|
|
@@ -118,8 +143,10 @@ You will probably want to use a custom template, such as:
|
|
118
143
|
|
119
144
|
```ruby
|
120
145
|
# config/initializers/js_from_routes.rb
|
121
|
-
|
122
|
-
config
|
146
|
+
if Rails.env.development?
|
147
|
+
JsFromRoutes.config do |config|
|
148
|
+
config.template_path = Rails.root.join('app', 'views', 'custom_js_from_routes.js.erb')
|
149
|
+
end
|
123
150
|
end
|
124
151
|
```
|
125
152
|
|
@@ -144,9 +171,11 @@ request methods or path helpers ๐
|
|
144
171
|
|
145
172
|
### Take this idea ๐ก
|
146
173
|
|
147
|
-
|
174
|
+
While the original use cases intended to generate code that targes a custom `ApiService`,
|
175
|
+
it can be tweaked to generate TypeScript, [target jQuery](https://gist.github.com/ElMassimo/cab56e64e20ff797f3054b661a883646),
|
176
|
+
or use it only to generate [path helpers](https://github.com/ElMassimo/js_from_routes/blob/master/spec/support/sample_app/app/javascript/requests/UserPreferencesRequests.js#L11-L15).
|
177
|
+
|
178
|
+
There are plenty of other opportunities for automatic code generation, such as keeping
|
148
179
|
enums in sync between Ruby and JS.
|
149
180
|
|
150
181
|
Let me know if you come up with new or creative ways to use this technique ๐
|
151
|
-
|
152
|
-
|
@@ -0,0 +1,22 @@
|
|
1
|
+
//
|
2
|
+
// DO NOT MODIFY: This file was automatically generated by JsFromRoutes.
|
3
|
+
<%
|
4
|
+
if routes.any?(&:path_only?)
|
5
|
+
%>import { formatUrl } from '@/helpers/UrlHelper'<%
|
6
|
+
end
|
7
|
+
%><% if routes.any?(&:path_only?) && routes.any?(&:request_method?) %><%= "\n" %><% end %><%
|
8
|
+
if routes.any?(&:request_method?)
|
9
|
+
%>import { request } from '@/services/ApiService'<%
|
10
|
+
end
|
11
|
+
%>
|
12
|
+
|
13
|
+
export default {
|
14
|
+
<% routes.each_with_index do |route, index| %>
|
15
|
+
<% if index > 0 %><%= "\n" %><% end
|
16
|
+
%> <%= route.helper %>: options =>
|
17
|
+
<% if route.path_only?
|
18
|
+
%>formatUrl(<% else
|
19
|
+
%>request('<%= route.verb %>', <% end
|
20
|
+
%>'<%= route.path %>', options),
|
21
|
+
<% end %>
|
22
|
+
}
|
@@ -7,7 +7,7 @@ describe JsFromRoutes do
|
|
7
7
|
|
8
8
|
let(:output_dir) { Pathname.new File.expand_path('../support/generated', __dir__) }
|
9
9
|
let(:sample_dir) { Rails.root.join('app', 'javascript', 'requests') }
|
10
|
-
let(:different_template_path) { File.expand_path('../support/
|
10
|
+
let(:different_template_path) { File.expand_path('../support/jquery_template.js.erb', __dir__) }
|
11
11
|
let(:controllers_with_exported_routes) { %w[Comments UserPreferences VideoClips] }
|
12
12
|
|
13
13
|
def file_for(dir, name)
|
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: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mรกximo Mussini
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -62,10 +62,12 @@ extensions: []
|
|
62
62
|
extra_rdoc_files:
|
63
63
|
- README.md
|
64
64
|
files:
|
65
|
+
- CHANGELOG.md
|
65
66
|
- README.md
|
66
67
|
- lib/js_from_routes.rb
|
67
68
|
- lib/js_from_routes/generator.rb
|
68
69
|
- lib/js_from_routes/railtie.rb
|
70
|
+
- lib/js_from_routes/template.js.erb
|
69
71
|
- lib/js_from_routes/version.rb
|
70
72
|
- spec/js_from_routes/js_from_routes_spec.rb
|
71
73
|
- spec/spec_helper.rb
|
@@ -96,7 +98,7 @@ homepage: https://github.com/ElMassimo/js_from_routes
|
|
96
98
|
licenses:
|
97
99
|
- MIT
|
98
100
|
metadata: {}
|
99
|
-
post_install_message:
|
101
|
+
post_install_message:
|
100
102
|
rdoc_options: []
|
101
103
|
require_paths:
|
102
104
|
- lib
|
@@ -111,8 +113,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
113
|
- !ruby/object:Gem::Version
|
112
114
|
version: '0'
|
113
115
|
requirements: []
|
114
|
-
rubygems_version: 3.1.
|
115
|
-
signing_key:
|
116
|
+
rubygems_version: 3.1.4
|
117
|
+
signing_key:
|
116
118
|
specification_version: 4
|
117
119
|
summary: Generate JS automatically from Rails routes.
|
118
120
|
test_files:
|