js_rails_routes 0.8.1 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -1
- data/lib/js_rails_routes/language/typescript.rb +6 -3
- data/lib/js_rails_routes/version.rb +1 -1
- data/spec/js_rails_routes/language/typescript_spec.rb +24 -22
- data/spec/js_rails_routes_spec.rb +21 -21
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff931b1b9f29b4a86444a8613d653a32961bc378e86d44fdc25cf319bcd9cc86
|
4
|
+
data.tar.gz: ce054504cf1e89cde6d76bca05f5fb03834740e8ff0a2e9acdea76326ef3e8ce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 932d0666655cf343988cdd19730ed038b662d6efa86c36a1e97c63a9f98a7c1cbe51a4abdc5a14903814f6a578e597a123e782ebb85a5c3dfa9e0807f7fbca25
|
7
|
+
data.tar.gz: b6c2ad6c62c1c95b6db17386468801a1fc543c60fed064b253a36458c3b14cb3614b9928c495a1f26d53e02946735a452106388ad5f46ebd8af96b494b5578a6
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,10 @@ This change log adheres to [keepachangelog.com](http://keepachangelog.com).
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [0.9.0] - 2018-08-24
|
10
|
+
### Added
|
11
|
+
- Improved TypeScript params typing support
|
12
|
+
|
9
13
|
## [0.8.1] - 2018-08-21
|
10
14
|
### Fixed
|
11
15
|
- Camelize `params` keys as `camelize` option
|
@@ -66,7 +70,8 @@ This change log adheres to [keepachangelog.com](http://keepachangelog.com).
|
|
66
70
|
### Added
|
67
71
|
- Implement "js:rails:routes" task
|
68
72
|
|
69
|
-
[Unreleased]: https://github.com/yuku-t/js_rails_routes/compare/v0.
|
73
|
+
[Unreleased]: https://github.com/yuku-t/js_rails_routes/compare/v0.9.0...HEAD
|
74
|
+
[0.9.0]: https://github.com/yuku-t/js_rails_routes/compare/v0.8.1...v0.9.0
|
70
75
|
[0.8.1]: https://github.com/yuku-t/js_rails_routes/compare/v0.8.0...v0.8.1
|
71
76
|
[0.8.0]: https://github.com/yuku-t/js_rails_routes/compare/v0.7.1...v0.8.0
|
72
77
|
[0.7.1]: https://github.com/yuku-t/js_rails_routes/compare/v0.7.0...v0.7.1
|
@@ -7,8 +7,10 @@ module JSRailsRoutes
|
|
7
7
|
module Language
|
8
8
|
class TypeScript < JavaScript
|
9
9
|
PROCESS_FUNC = <<~TYPESCRIPT
|
10
|
-
type
|
11
|
-
|
10
|
+
type Value = string | number
|
11
|
+
type Params<Keys extends string> = { [key in Keys]: Value } & Record<string, Value>
|
12
|
+
function process(route: string, params: Record<string, Value> | undefined, keys: string[]): string {
|
13
|
+
if (!params) return route
|
12
14
|
var query = [];
|
13
15
|
for (var param in params) if (params.hasOwnProperty(param)) {
|
14
16
|
if (keys.indexOf(param) === -1) {
|
@@ -24,7 +26,8 @@ module JSRailsRoutes
|
|
24
26
|
def handle_route(route)
|
25
27
|
path, keys = parse(route.path)
|
26
28
|
name = function_name(route.name)
|
27
|
-
|
29
|
+
params = keys.empty? ? 'params?: Record<string, Value>' : "params: Params<#{keys.join(' | ')}>"
|
30
|
+
"export function #{name}(#{params}) { return process('#{path}', params, [#{keys.join(',')}]); }"
|
28
31
|
end
|
29
32
|
|
30
33
|
# @note Implementation for {JSRailsRoutes::Language::Base#ext}
|
@@ -10,8 +10,10 @@ RSpec.describe JSRailsRoutes::Language::TypeScript do
|
|
10
10
|
|
11
11
|
it 'returns a typescript function' do
|
12
12
|
is_expected.to eq <<~TYPESCRIPT
|
13
|
-
type
|
14
|
-
|
13
|
+
type Value = string | number
|
14
|
+
type Params<Keys extends string> = { [key in Keys]: Value } & Record<string, Value>
|
15
|
+
function process(route: string, params: Record<string, Value> | undefined, keys: string[]): string {
|
16
|
+
if (!params) return route
|
15
17
|
var query = [];
|
16
18
|
for (var param in params) if (params.hasOwnProperty(param)) {
|
17
19
|
if (keys.indexOf(param) === -1) {
|
@@ -40,10 +42,10 @@ RSpec.describe JSRailsRoutes::Language::TypeScript do
|
|
40
42
|
it 'returns a typescript with snake_case functions' do
|
41
43
|
is_expected.to eq <<~TYPESCRIPT
|
42
44
|
#{described_class::PROCESS_FUNC}
|
43
|
-
export function articles_path(params
|
44
|
-
export function new_article_path(params
|
45
|
-
export function edit_article_path(params: Params) { return process('/articles/' + params.id + '/edit', params, ['id']); }
|
46
|
-
export function article_path(params: Params) { return process('/articles/' + params.id + '', params, ['id']); }
|
45
|
+
export function articles_path(params?: Record<string, Value>) { return process('/articles', params, []); }
|
46
|
+
export function new_article_path(params?: Record<string, Value>) { return process('/articles/new', params, []); }
|
47
|
+
export function edit_article_path(params: Params<'id'>) { return process('/articles/' + params.id + '/edit', params, ['id']); }
|
48
|
+
export function article_path(params: Params<'id'>) { return process('/articles/' + params.id + '', params, ['id']); }
|
47
49
|
TYPESCRIPT
|
48
50
|
end
|
49
51
|
end
|
@@ -58,10 +60,10 @@ RSpec.describe JSRailsRoutes::Language::TypeScript do
|
|
58
60
|
it 'returns a javascript with lowerCamelCase functions' do
|
59
61
|
is_expected.to eq <<~TYPESCRIPT
|
60
62
|
#{described_class::PROCESS_FUNC}
|
61
|
-
export function articlesPath(params
|
62
|
-
export function newArticlePath(params
|
63
|
-
export function editArticlePath(params: Params) { return process('/articles/' + params.id + '/edit', params, ['id']); }
|
64
|
-
export function articlePath(params: Params) { return process('/articles/' + params.id + '', params, ['id']); }
|
63
|
+
export function articlesPath(params?: Record<string, Value>) { return process('/articles', params, []); }
|
64
|
+
export function newArticlePath(params?: Record<string, Value>) { return process('/articles/new', params, []); }
|
65
|
+
export function editArticlePath(params: Params<'id'>) { return process('/articles/' + params.id + '/edit', params, ['id']); }
|
66
|
+
export function articlePath(params: Params<'id'>) { return process('/articles/' + params.id + '', params, ['id']); }
|
65
67
|
TYPESCRIPT
|
66
68
|
end
|
67
69
|
end
|
@@ -76,10 +78,10 @@ RSpec.describe JSRailsRoutes::Language::TypeScript do
|
|
76
78
|
it 'returns a javascript with UpperCamelCase functions' do
|
77
79
|
is_expected.to eq <<~TYPESCRIPT
|
78
80
|
#{described_class::PROCESS_FUNC}
|
79
|
-
export function ArticlesPath(params
|
80
|
-
export function NewArticlePath(params
|
81
|
-
export function EditArticlePath(params: Params) { return process('/articles/' + params.Id + '/edit', params, ['Id']); }
|
82
|
-
export function ArticlePath(params: Params) { return process('/articles/' + params.Id + '', params, ['Id']); }
|
81
|
+
export function ArticlesPath(params?: Record<string, Value>) { return process('/articles', params, []); }
|
82
|
+
export function NewArticlePath(params?: Record<string, Value>) { return process('/articles/new', params, []); }
|
83
|
+
export function EditArticlePath(params: Params<'Id'>) { return process('/articles/' + params.Id + '/edit', params, ['Id']); }
|
84
|
+
export function ArticlePath(params: Params<'Id'>) { return process('/articles/' + params.Id + '', params, ['Id']); }
|
83
85
|
TYPESCRIPT
|
84
86
|
end
|
85
87
|
end
|
@@ -94,7 +96,7 @@ RSpec.describe JSRailsRoutes::Language::TypeScript do
|
|
94
96
|
it 'returns a javascript matching to the regexp' do
|
95
97
|
is_expected.to eq <<~TYPESCRIPT
|
96
98
|
#{described_class::PROCESS_FUNC}
|
97
|
-
export function new_article_path(params
|
99
|
+
export function new_article_path(params?: Record<string, Value>) { return process('/articles/new', params, []); }
|
98
100
|
TYPESCRIPT
|
99
101
|
end
|
100
102
|
end
|
@@ -109,9 +111,9 @@ RSpec.describe JSRailsRoutes::Language::TypeScript do
|
|
109
111
|
it 'returns a javascript not matching to the regexp' do
|
110
112
|
is_expected.to eq <<~TYPESCRIPT
|
111
113
|
#{described_class::PROCESS_FUNC}
|
112
|
-
export function articles_path(params
|
113
|
-
export function edit_article_path(params: Params) { return process('/articles/' + params.id + '/edit', params, ['id']); }
|
114
|
-
export function article_path(params: Params) { return process('/articles/' + params.id + '', params, ['id']); }
|
114
|
+
export function articles_path(params?: Record<string, Value>) { return process('/articles', params, []); }
|
115
|
+
export function edit_article_path(params: Params<'id'>) { return process('/articles/' + params.id + '/edit', params, ['id']); }
|
116
|
+
export function article_path(params: Params<'id'>) { return process('/articles/' + params.id + '', params, ['id']); }
|
115
117
|
TYPESCRIPT
|
116
118
|
end
|
117
119
|
end
|
@@ -126,7 +128,7 @@ RSpec.describe JSRailsRoutes::Language::TypeScript do
|
|
126
128
|
it 'returns a javascript matching to the regexp' do
|
127
129
|
is_expected.to eq <<~TYPESCRIPT
|
128
130
|
#{described_class::PROCESS_FUNC}
|
129
|
-
export function new_article_path(params
|
131
|
+
export function new_article_path(params?: Record<string, Value>) { return process('/articles/new', params, []); }
|
130
132
|
TYPESCRIPT
|
131
133
|
end
|
132
134
|
end
|
@@ -141,9 +143,9 @@ RSpec.describe JSRailsRoutes::Language::TypeScript do
|
|
141
143
|
it 'returns a javascript not matching to the regexp' do
|
142
144
|
is_expected.to eq <<~TYPESCRIPT
|
143
145
|
#{described_class::PROCESS_FUNC}
|
144
|
-
export function articles_path(params
|
145
|
-
export function edit_article_path(params: Params) { return process('/articles/' + params.id + '/edit', params, ['id']); }
|
146
|
-
export function article_path(params: Params) { return process('/articles/' + params.id + '', params, ['id']); }
|
146
|
+
export function articles_path(params?: Record<string, Value>) { return process('/articles', params, []); }
|
147
|
+
export function edit_article_path(params: Params<'id'>) { return process('/articles/' + params.id + '/edit', params, ['id']); }
|
148
|
+
export function article_path(params: Params<'id'>) { return process('/articles/' + params.id + '', params, ['id']); }
|
147
149
|
TYPESCRIPT
|
148
150
|
end
|
149
151
|
end
|
@@ -93,31 +93,31 @@ RSpec.describe JSRailsRoutes do
|
|
93
93
|
it 'generates typescript files' do
|
94
94
|
subject
|
95
95
|
|
96
|
-
expect(File.read(app_root.join('app/assets/javascripts/rails-routes.ts'))).to eq <<~
|
96
|
+
expect(File.read(app_root.join('app/assets/javascripts/rails-routes.ts'))).to eq <<~TYPESCRIPT
|
97
97
|
// Don't edit manually. `rake #{task}` generates this file.
|
98
98
|
#{JSRailsRoutes::Language::TypeScript::PROCESS_FUNC}
|
99
|
-
export function blogs_path(params
|
100
|
-
export function new_blog_path(params
|
101
|
-
export function edit_blog_path(params: Params) { return process('/blogs/' + params.id + '/edit', params, ['id']); }
|
102
|
-
export function blog_path(params: Params) { return process('/blogs/' + params.id + '', params, ['id']); }
|
103
|
-
export function users_path(params
|
104
|
-
export function new_user_path(params
|
105
|
-
export function edit_user_path(params: Params) { return process('/users/' + params.id + '/edit', params, ['id']); }
|
106
|
-
export function user_path(params: Params) { return process('/users/' + params.id + '', params, ['id']); }
|
107
|
-
|
108
|
-
|
109
|
-
expect(File.read(app_root.join('app/assets/javascripts/admin-routes.ts'))).to eq <<~
|
99
|
+
export function blogs_path(params?: Record<string, Value>) { return process('/blogs', params, []); }
|
100
|
+
export function new_blog_path(params?: Record<string, Value>) { return process('/blogs/new', params, []); }
|
101
|
+
export function edit_blog_path(params: Params<'id'>) { return process('/blogs/' + params.id + '/edit', params, ['id']); }
|
102
|
+
export function blog_path(params: Params<'id'>) { return process('/blogs/' + params.id + '', params, ['id']); }
|
103
|
+
export function users_path(params?: Record<string, Value>) { return process('/users', params, []); }
|
104
|
+
export function new_user_path(params?: Record<string, Value>) { return process('/users/new', params, []); }
|
105
|
+
export function edit_user_path(params: Params<'id'>) { return process('/users/' + params.id + '/edit', params, ['id']); }
|
106
|
+
export function user_path(params: Params<'id'>) { return process('/users/' + params.id + '', params, ['id']); }
|
107
|
+
TYPESCRIPT
|
108
|
+
|
109
|
+
expect(File.read(app_root.join('app/assets/javascripts/admin-routes.ts'))).to eq <<~TYPESCRIPT
|
110
110
|
// Don't edit manually. `rake #{task}` generates this file.
|
111
111
|
#{JSRailsRoutes::Language::TypeScript::PROCESS_FUNC}
|
112
|
-
export function notes_path(params
|
113
|
-
export function new_note_path(params
|
114
|
-
export function edit_note_path(params: Params) { return process('/notes/' + params.id + '/edit', params, ['id']); }
|
115
|
-
export function note_path(params: Params) { return process('/notes/' + params.id + '', params, ['id']); }
|
116
|
-
export function photos_path(params
|
117
|
-
export function new_photo_path(params
|
118
|
-
export function edit_photo_path(params: Params) { return process('/photos/' + params.id + '/edit', params, ['id']); }
|
119
|
-
export function photo_path(params: Params) { return process('/photos/' + params.id + '', params, ['id']); }
|
120
|
-
|
112
|
+
export function notes_path(params?: Record<string, Value>) { return process('/notes', params, []); }
|
113
|
+
export function new_note_path(params?: Record<string, Value>) { return process('/notes/new', params, []); }
|
114
|
+
export function edit_note_path(params: Params<'id'>) { return process('/notes/' + params.id + '/edit', params, ['id']); }
|
115
|
+
export function note_path(params: Params<'id'>) { return process('/notes/' + params.id + '', params, ['id']); }
|
116
|
+
export function photos_path(params?: Record<string, Value>) { return process('/photos', params, []); }
|
117
|
+
export function new_photo_path(params?: Record<string, Value>) { return process('/photos/new', params, []); }
|
118
|
+
export function edit_photo_path(params: Params<'id'>) { return process('/photos/' + params.id + '/edit', params, ['id']); }
|
119
|
+
export function photo_path(params: Params<'id'>) { return process('/photos/' + params.id + '', params, ['id']); }
|
120
|
+
TYPESCRIPT
|
121
121
|
end
|
122
122
|
end
|
123
123
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: js_rails_routes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuku Takahashi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|