railbus 0.1.1 → 0.1.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 +5 -0
- data/README.md +10 -3
- data/lib/generators/railbus/install_generator.rb +22 -0
- data/lib/railbus/templates/js.erb +19 -86
- data/lib/railbus/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eca04d46928b46af6ee37969c8cd9e34ffa535ae8295b9a3efba843c4a1fbe32
|
4
|
+
data.tar.gz: a708f98d5b39524baf0888bd96f458df8a6dbc63e97a1827447fd2423ffeb03a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b3f9a587e3d6658f6cacda733db67d37af4d8b2d8316e9d63f11f0a0899e54ad24b2d124a4f8750536786a923faa0200dd6a1c3025f926230d2257a8f3a6cca3
|
7
|
+
data.tar.gz: 35964ef3fd6e599cfca9aee232abc332d9ebf86ba072b1efde5fd5ad43aef1ad5c8670f268bef98ff3f4d2796cb25091a14357605bbc70647691ae7cba3f1001
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -22,8 +22,15 @@ Or install it yourself as:
|
|
22
22
|
|
23
23
|
$ gem install railbus
|
24
24
|
|
25
|
-
|
26
|
-
|
25
|
+
You may call this to generate example file and install JavaScript dependencies:
|
26
|
+
|
27
|
+
$ rails g railbus:install
|
28
|
+
|
29
|
+
Or do it manually:
|
30
|
+
|
31
|
+
1. Run `yarn add @crosspath/yambus`.
|
32
|
+
2. Create `*.js.erb` file in `app/javascript` (e.g. `lib/routes.js.erb`)
|
33
|
+
to use it with Webpack:
|
27
34
|
|
28
35
|
```erb
|
29
36
|
/* rails-erb-loader-dependencies ../config/routes */
|
@@ -63,7 +70,7 @@ Here `String or Number, ...` represents values used in paths, e.g.
|
|
63
70
|
And `...path_params` means hash-like object with values for paths, e.g.
|
64
71
|
`{id: 123, category_id: 56}` (zero, one or more params).
|
65
72
|
|
66
|
-
`data` means request body (payload), it can be hash-like object, `FormData` and so on, its allowed types depend on XHR library.
|
73
|
+
`data` means request body (payload), it can be hash-like object, `FormData` and so on, its allowed types depend on XHR library or request function.
|
67
74
|
|
68
75
|
All arguments are optional.
|
69
76
|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'rails/generators/base'
|
2
|
+
|
3
|
+
module Railbus
|
4
|
+
module Generators
|
5
|
+
class InstallGenerator < ::Rails::Generators::Base
|
6
|
+
desc 'Install dependencies and example file with routes'
|
7
|
+
|
8
|
+
def install
|
9
|
+
exit unless run 'yarn add @crosspath/yambus axios'
|
10
|
+
|
11
|
+
create_file('app/javascript/lib/routes.js.erb') do |f|
|
12
|
+
<<-LINE
|
13
|
+
/* rails-erb-loader-dependencies ../config/routes */
|
14
|
+
<%= Railbus.generate %>
|
15
|
+
LINE
|
16
|
+
end
|
17
|
+
|
18
|
+
puts 'Railbus installed!'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -1,92 +1,25 @@
|
|
1
|
-
|
1
|
+
import yambus from '@crosspath/yambus'
|
2
2
|
|
3
3
|
<% if client == 'axios' %>
|
4
4
|
import axios from 'axios'
|
5
|
-
|
6
|
-
function request(route, args) {
|
7
|
-
const params = build_request_options(route, args)
|
8
|
-
return axios.request({
|
9
|
-
url: params.path,
|
10
|
-
method: route.verb,
|
11
|
-
params: params.url_options,
|
12
|
-
data: params.data
|
13
|
-
})
|
14
|
-
}
|
15
|
-
<% else %>
|
16
|
-
function request(route, args) {
|
17
|
-
const params = build_request_options(route, args)
|
18
|
-
return <%= client %>(route, params)
|
19
|
-
}
|
20
5
|
<% end %>
|
21
6
|
|
22
|
-
const
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
)
|
37
|
-
|
38
|
-
export default Object.assign({}, request_functions, path_functions)
|
39
|
-
|
40
|
-
function split_args(route, args) {
|
41
|
-
const required_params = route.required
|
42
|
-
let path_params = {}, url_options = {}, data = {}
|
43
|
-
for (let index in args) {
|
44
|
-
const arg = args[index]
|
45
|
-
if (['string', 'number'].includes(typeof arg)) {
|
46
|
-
path_params[required_params[index]] = arg
|
47
|
-
} else {
|
48
|
-
break
|
49
|
-
}
|
7
|
+
const routes = <%= routes_json.html_safe %>
|
8
|
+
|
9
|
+
const route_functions = yambus.generate_route_functions(
|
10
|
+
routes,
|
11
|
+
(route, args) => {
|
12
|
+
const params = yambus.build_request_options(route, args)
|
13
|
+
<% if client == 'axios' %>
|
14
|
+
return axios.request({
|
15
|
+
url: params.path,
|
16
|
+
method: route.verb,
|
17
|
+
params: params.url_options,
|
18
|
+
data: params.data
|
19
|
+
})
|
20
|
+
<% else %>
|
21
|
+
return <%= client %>(route, params)
|
22
|
+
<% end %>
|
50
23
|
}
|
51
|
-
|
52
|
-
|
53
|
-
if (typeof options !== 'object')
|
54
|
-
options = {}
|
55
|
-
if (typeof data !== 'object')
|
56
|
-
data = {}
|
57
|
-
for (let param of required_params) {
|
58
|
-
if (!(param in path_params)) {
|
59
|
-
if (param in options) {
|
60
|
-
path_params[param] = options[param]
|
61
|
-
} else {
|
62
|
-
throw new Error(required_param(route, param))
|
63
|
-
}
|
64
|
-
}
|
65
|
-
}
|
66
|
-
const format = presence(options.format)
|
67
|
-
const extracted = required_params.concat(['format'])
|
68
|
-
url_options = Object.fromEntries(
|
69
|
-
Object.entries(options).filter(pair => !extracted.includes(pair[0]))
|
70
|
-
)
|
71
|
-
return {path_params, format, url_options, data}
|
72
|
-
}
|
73
|
-
|
74
|
-
function presence(v) {
|
75
|
-
return (v != null && v !== '') ? v : null
|
76
|
-
}
|
77
|
-
|
78
|
-
function required_param(route, param) {
|
79
|
-
return `Cannot find "${param}" in passed URL options. `+
|
80
|
-
`This value is required for route "${route.name}" (${route.path}).`;
|
81
|
-
}
|
82
|
-
|
83
|
-
function build_request_options(route, args) {
|
84
|
-
const params = split_args(route, args)
|
85
|
-
let path = route.parts.
|
86
|
-
map(v => typeof v === 'string' ? v : params.path_params[v.a]).join('')
|
87
|
-
if (params.format)
|
88
|
-
path += `.${params.format}`
|
89
|
-
if (['get', 'delete'].includes(route.verb))
|
90
|
-
params.data = null
|
91
|
-
return {path: path, url_options: params.url_options, data: params.data}
|
92
|
-
}
|
24
|
+
)
|
25
|
+
export default route_functions
|
data/lib/railbus/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: railbus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Evgeniy Nochevnov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -69,6 +69,7 @@ files:
|
|
69
69
|
- Rakefile
|
70
70
|
- bin/console
|
71
71
|
- bin/setup
|
72
|
+
- lib/generators/railbus/install_generator.rb
|
72
73
|
- lib/railbus.rb
|
73
74
|
- lib/railbus/route_set.rb
|
74
75
|
- lib/railbus/route_set_presenter.rb
|