js_rails_routes 0.2.1 → 0.3.0
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/.codeclimate.yml +16 -0
- data/.gitignore +1 -0
- data/.rspec +2 -0
- data/.rubocop.yml +14 -0
- data/.travis.yml +5 -0
- data/CHANGELOG.md +9 -0
- data/Gemfile +2 -0
- data/README.md +39 -22
- data/Rakefile +7 -0
- data/js_rails_routes.gemspec +4 -2
- data/lib/js_rails_routes/generator.rb +28 -34
- data/lib/js_rails_routes/version.rb +1 -1
- data/lib/js_rails_routes.rb +8 -0
- data/lib/tasks/js_rails_routes.rake +6 -7
- data/spec/js_rails_routes/generator_spec.rb +62 -0
- data/spec/js_rails_routes_spec.rb +7 -0
- data/spec/spec_helper.rb +38 -0
- metadata +39 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6542396accf937692fb966d1cea9e13b037059fc
|
4
|
+
data.tar.gz: 2fabec2ed3c39d5b12c9735e0a2e84aaaa39e640
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d0df45754906758a9266abbc7382dc07390e5ad0b06a564883fdf21e3569da2d92797496789dc72331566c3ba76308c427b3430d7cb837a1819ca375cbb7ea2
|
7
|
+
data.tar.gz: 160bf9a51331d3ecb1809f6f229aff92748d7a3853f3047920d608bdc28c4260fa194c8ce870dd2cb27773f79e4bd00b19812a3a1c8de54d608067a9bb651354
|
data/.codeclimate.yml
ADDED
data/.gitignore
CHANGED
data/.rspec
ADDED
data/.rubocop.yml
ADDED
data/.travis.yml
ADDED
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
|
5
5
|
This change log adheres to [keepachangelog.com](http://keepachangelog.com).
|
6
6
|
|
7
|
+
## [0.3.0]
|
8
|
+
### Added
|
9
|
+
- Enable to configure through Ruby interface
|
10
|
+
|
11
|
+
### Changed
|
12
|
+
- Depend on rails >= 3.2
|
13
|
+
- Remove rake command line parameter from js file
|
14
|
+
|
7
15
|
## [0.2.1] - 2016-06-24
|
8
16
|
### Fixed
|
9
17
|
- Make sure that js file ends with a new line char
|
@@ -16,6 +24,7 @@ This change log adheres to [keepachangelog.com](http://keepachangelog.com).
|
|
16
24
|
### Added
|
17
25
|
- Implement "js:rails:routes" task
|
18
26
|
|
27
|
+
[0.3.0]: https://github.com/yuku-t/js_rails_routes/compare/v0.2.1...v0.3.0
|
19
28
|
[0.2.1]: https://github.com/yuku-t/js_rails_routes/compare/v0.2.0...v0.2.1
|
20
29
|
[0.2.0]: https://github.com/yuku-t/js_rails_routes/compare/v0.1.0...v0.2.0
|
21
30
|
[0.1.0]: https://github.com/yuku-t/js_rails_routes/compare/033b945...v0.1.0
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# rake js:routes
|
2
2
|
|
3
|
+
[](https://rubygems.org/gems/js_rails_routes) [](https://travis-ci.org/yuku-t/js_rails_routes) [](https://codeclimate.com/github/yuku-t/js_rails_routes) [](https://codeclimate.com/github/yuku-t/js_rails_routes/coverage) [](https://github.com/yuku-t/js_rails_routes/blob/master/LICENSE)
|
4
|
+
|
3
5
|
Generate a ES6 module that contains Rails routes.
|
4
6
|
|
5
7
|
## Description
|
@@ -7,7 +9,7 @@ Generate a ES6 module that contains Rails routes.
|
|
7
9
|
This gem provides "js:routes" rake task.
|
8
10
|
It generates a ES6 requirable module with exports url helper functions defined by your Rails application.
|
9
11
|
|
10
|
-
Suppose
|
12
|
+
Suppose a Rails app has some routes:
|
11
13
|
|
12
14
|
```rb
|
13
15
|
# == Route Map
|
@@ -26,14 +28,14 @@ Rails.application.routes.draw do
|
|
26
28
|
end
|
27
29
|
```
|
28
30
|
|
29
|
-
|
31
|
+
This gem generates a JS file looks like this:
|
30
32
|
|
31
33
|
```js
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
34
|
+
// Don't edit manually. `rake js:routes` generates this file.
|
35
|
+
export function article_path(params) { return '/articles/' + params.id + ''; }
|
36
|
+
export function articles_path(params) { return '/articles'; }
|
37
|
+
export function edit_article_path(params) { return '/articles/' + params.id + '/edit'; }
|
38
|
+
export function new_article_path(params) { return '/articles/new'; }
|
37
39
|
```
|
38
40
|
|
39
41
|
## VS.
|
@@ -44,38 +46,53 @@ This gem uses ES6 modules.
|
|
44
46
|
|
45
47
|
## Requirement
|
46
48
|
|
47
|
-
- Rails >= 3.
|
49
|
+
- Rails >= 3.2
|
48
50
|
|
49
51
|
## Usage
|
50
52
|
|
51
|
-
|
53
|
+
Generate routes file.
|
52
54
|
|
53
|
-
```
|
55
|
+
```bash
|
54
56
|
rake js:routes
|
55
57
|
```
|
56
58
|
|
57
|
-
|
59
|
+
### Configuration
|
58
60
|
|
59
|
-
|
60
|
-
rake js:routes path='client/src/rails-routes.js'
|
61
|
-
```
|
61
|
+
JSRailsRoutes supports several parameters:
|
62
62
|
|
63
|
-
|
63
|
+
Name | Type | Description | Default
|
64
|
+
-----------|----------|-----------------------------------------|----------------------------------------
|
65
|
+
`includes` | `Regexp` | routes match to the regexp are included | `/.*/`
|
66
|
+
`excludes` | `Regexp` | routes match to the regexp are excluded | `/^$/`
|
67
|
+
`path` | `String` | JS file path | `"app/assets/javascripts/rails-routes.js"`
|
64
68
|
|
65
|
-
|
66
|
-
rake js:routes excludes='^/(rails|sidekiq)/'
|
67
|
-
```
|
68
|
-
Generate routes start with "/articles/" only:
|
69
|
+
You can configure via `JSRailsRoutes.configure`.
|
69
70
|
|
71
|
+
```rb
|
72
|
+
# Rakefile
|
73
|
+
JSRailsRoutes.configure |c|
|
74
|
+
c.excludes = %r{^/(rails|sidekiq)}
|
75
|
+
c.path = 'path/to/rails-routes.js'
|
76
|
+
end
|
70
77
|
```
|
71
|
-
|
78
|
+
|
79
|
+
Now `rake js:routes` ignores paths starting with "/rails" or "/sidekiq".
|
80
|
+
|
81
|
+
### Command line parameters
|
82
|
+
|
83
|
+
You can override the coniguration via command line parameters:
|
84
|
+
|
85
|
+
```bash
|
86
|
+
rake js:routes excludes='^/rails'
|
72
87
|
```
|
73
88
|
|
89
|
+
The command still ignores "/rails" but includes "/sidekiq".
|
90
|
+
|
74
91
|
## Install
|
75
92
|
|
76
93
|
Your Rails Gemfile:
|
77
94
|
|
78
|
-
```
|
95
|
+
```rb
|
79
96
|
gem 'js_rails_routes', group: :development
|
80
97
|
```
|
81
98
|
|
@@ -87,4 +104,4 @@ gem 'js_rails_routes', group: :development
|
|
87
104
|
|
88
105
|
[mizchi](https://github.com/mizchi) wrote "js:routes" task with referencing [mtrpcic/js-routes](https://github.com/mtrpcic/js-routes).
|
89
106
|
|
90
|
-
[yuku-t](https://yuku-t.com)
|
107
|
+
[yuku-t](https://yuku-t.com) refactored and improved the mizchi's script and published to [rubygems](https://rubygems.org/gems/js_rails_routes).
|
data/Rakefile
CHANGED
data/js_rails_routes.gemspec
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
$LOAD_PATH << File.expand_path('../lib', __FILE__)
|
2
2
|
|
3
3
|
require 'js_rails_routes/version'
|
4
4
|
|
@@ -12,7 +12,9 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.license = 'MIT'
|
13
13
|
spec.files = `git ls-files -z`.split("\x0")
|
14
14
|
spec.require_paths = ['lib']
|
15
|
-
spec.add_dependency 'rails', '>= 3'
|
15
|
+
spec.add_dependency 'rails', '>= 3.2'
|
16
16
|
spec.add_development_dependency 'bundler', '~> 1.7'
|
17
17
|
spec.add_development_dependency 'rake', '~> 10.0'
|
18
|
+
spec.add_development_dependency 'rspec', '~> 3.4.0'
|
19
|
+
spec.add_development_dependency 'rubocop', '~> 0.40.0'
|
18
20
|
end
|
@@ -1,57 +1,51 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
|
1
3
|
module JSRailsRoutes
|
2
4
|
class Generator
|
3
|
-
COMPARE_REGEXP =
|
5
|
+
COMPARE_REGEXP = %r{:(.*?)(/|$)}
|
6
|
+
|
7
|
+
include Singleton
|
4
8
|
|
5
|
-
|
6
|
-
|
7
|
-
|
9
|
+
attr_accessor :includes, :excludes, :path
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
self.includes = /.*/
|
13
|
+
self.excludes = /^$/
|
14
|
+
self.path = Rails.root.join('app', 'assets', 'javascripts', 'rails-routes.js')
|
8
15
|
Rails.application.reload_routes!
|
9
16
|
end
|
10
17
|
|
11
|
-
def generate(task
|
12
|
-
lines = ["// Don't edit manually. `rake #{task}
|
13
|
-
lines += routes.map do |
|
14
|
-
handle_route(
|
18
|
+
def generate(task)
|
19
|
+
lines = ["// Don't edit manually. `rake #{task}` generates this file."]
|
20
|
+
lines += routes.map do |route_name, route_path|
|
21
|
+
handle_route(route_name, route_path) if match?(route_name, route_path)
|
15
22
|
end.compact
|
16
|
-
lines += '' # End with new line
|
17
|
-
|
23
|
+
lines += [''] # End with new line
|
24
|
+
write(lines.join("\n"))
|
18
25
|
end
|
19
26
|
|
20
27
|
private
|
21
28
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
@includes_regexp ||= Regexp.new(includes)
|
26
|
-
end
|
27
|
-
|
28
|
-
def excludes_regexp
|
29
|
-
@excludes_regexp ||= Regexp.new(excludes)
|
30
|
-
end
|
31
|
-
|
32
|
-
def match?(name, path)
|
33
|
-
return false if includes && includes_regexp !~ path
|
34
|
-
return false if excludes && excludes_regexp =~ path
|
29
|
+
def match?(_route_name, route_path)
|
30
|
+
return false if includes !~ route_path
|
31
|
+
return false if excludes =~ route_path
|
35
32
|
true
|
36
33
|
end
|
37
34
|
|
38
|
-
def handle_route(
|
39
|
-
|
40
|
-
"export function #{
|
35
|
+
def handle_route(route_name, route_path)
|
36
|
+
route_path.sub!(COMPARE_REGEXP, "' + params.#{$1} + '#{$2}") while route_path =~ COMPARE_REGEXP
|
37
|
+
"export function #{route_name}_path(params) { return '#{route_path}'; }"
|
41
38
|
end
|
42
39
|
|
43
40
|
def routes
|
44
41
|
@routes ||= Rails.application.routes.routes
|
45
|
-
|
46
|
-
|
47
|
-
|
42
|
+
.select(&:name)
|
43
|
+
.map { |r| [r.name, r.path.spec.to_s.split('(')[0]] }
|
44
|
+
.sort { |a, b| a[0] <=> b[0] }
|
48
45
|
end
|
49
46
|
|
50
|
-
def
|
51
|
-
|
52
|
-
result << "includes='#{includes}'" if includes
|
53
|
-
result << "excludes='#{excludes}'" if excludes
|
54
|
-
result.empty? ? '' : ' ' + result.join(' ')
|
47
|
+
def write(string)
|
48
|
+
File.open(path, 'w') { |f| f.write(string) }
|
55
49
|
end
|
56
50
|
end
|
57
51
|
end
|
data/lib/js_rails_routes.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
desc 'Generate a ES6 module that contains Rails routes'
|
2
2
|
namespace :js do
|
3
3
|
task routes: :environment do |task|
|
4
|
-
|
5
|
-
generator =
|
6
|
-
|
7
|
-
|
8
|
-
)
|
9
|
-
generator.
|
10
|
-
puts "Routes saved to #{path}."
|
4
|
+
generator = JSRailsRoutes::Generator.instance
|
5
|
+
generator.includes = Regexp.new(ENV['includes']) if ENV['includes']
|
6
|
+
generator.excludes = Regexp.new(ENV['excludes']) if ENV['excludes']
|
7
|
+
generator.path = ENV['path'] if ENV['path']
|
8
|
+
generator.generate(task)
|
9
|
+
puts "Routes saved to #{generator.path}."
|
11
10
|
end
|
12
11
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
RSpec.describe JSRailsRoutes::Generator do
|
2
|
+
let(:generator) do
|
3
|
+
described_class.clone.instance
|
4
|
+
end
|
5
|
+
|
6
|
+
it { expect(described_class).to include(Singleton) }
|
7
|
+
|
8
|
+
describe '#generate' do
|
9
|
+
subject do
|
10
|
+
generator.generate(task)
|
11
|
+
end
|
12
|
+
|
13
|
+
let(:task) do
|
14
|
+
'js:routes'
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'writes a JS file' do
|
18
|
+
expect(generator).to receive(:write).with(a_string_including("rake #{task}"))
|
19
|
+
subject
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'when includes is given' do
|
23
|
+
before do
|
24
|
+
generator.includes = Regexp.new(includes)
|
25
|
+
end
|
26
|
+
|
27
|
+
let(:includes) do
|
28
|
+
'/new'
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'writes paths matching with the parameter' do
|
32
|
+
expect(generator).to receive(:write).with(a_kind_of(String)) do |arg|
|
33
|
+
paths = arg.split("\n")[1..-1]
|
34
|
+
expect(paths).not_to be_empty
|
35
|
+
expect(paths).to all(a_string_including(includes))
|
36
|
+
end
|
37
|
+
subject
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'when excludes is given' do
|
42
|
+
before do
|
43
|
+
generator.excludes = Regexp.new(excludes)
|
44
|
+
end
|
45
|
+
|
46
|
+
let(:excludes) do
|
47
|
+
'/new'
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'writes paths not matching with the parameter' do
|
51
|
+
expect(generator).to receive(:write).with(a_kind_of(String)) do |arg|
|
52
|
+
paths = arg.split("\n")[1..-1]
|
53
|
+
expect(paths).not_to be_empty
|
54
|
+
paths.each do |path|
|
55
|
+
expect(path).to_not include(excludes)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
subject
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
$LOAD_PATH << File.expand_path('../../lib', __FILE__)
|
2
|
+
|
3
|
+
require 'codeclimate-test-reporter'
|
4
|
+
CodeClimate::TestReporter.start
|
5
|
+
|
6
|
+
require 'rails/all'
|
7
|
+
require 'js_rails_routes'
|
8
|
+
|
9
|
+
class TestApp < Rails::Application
|
10
|
+
config.root = File.expand_path('../test_app', __FILE__)
|
11
|
+
end
|
12
|
+
|
13
|
+
RSpec.configure do |config|
|
14
|
+
config.before :all do
|
15
|
+
TestApp.routes.draw do
|
16
|
+
resources :apps
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
config.expect_with :rspec do |expectations|
|
21
|
+
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
22
|
+
end
|
23
|
+
|
24
|
+
config.mock_with :rspec do |mocks|
|
25
|
+
mocks.verify_partial_doubles = true
|
26
|
+
end
|
27
|
+
|
28
|
+
config.filter_run :focus
|
29
|
+
config.run_all_when_everything_filtered = true
|
30
|
+
config.example_status_persistence_file_path = 'spec/examples.txt'
|
31
|
+
config.disable_monkey_patching!
|
32
|
+
|
33
|
+
config.default_formatter = 'doc' if config.files_to_run.one?
|
34
|
+
|
35
|
+
config.profile_examples = 10
|
36
|
+
config.order = :random
|
37
|
+
Kernel.srand config.seed
|
38
|
+
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.3.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: 2016-06-
|
11
|
+
date: 2016-06-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '3'
|
19
|
+
version: '3.2'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '3'
|
26
|
+
version: '3.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +52,34 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 3.4.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 3.4.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.40.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.40.0
|
55
83
|
description:
|
56
84
|
email:
|
57
85
|
- taka84u9@gmail.com
|
@@ -59,7 +87,11 @@ executables: []
|
|
59
87
|
extensions: []
|
60
88
|
extra_rdoc_files: []
|
61
89
|
files:
|
90
|
+
- ".codeclimate.yml"
|
62
91
|
- ".gitignore"
|
92
|
+
- ".rspec"
|
93
|
+
- ".rubocop.yml"
|
94
|
+
- ".travis.yml"
|
63
95
|
- CHANGELOG.md
|
64
96
|
- Gemfile
|
65
97
|
- LICENSE
|
@@ -71,6 +103,9 @@ files:
|
|
71
103
|
- lib/js_rails_routes/generator.rb
|
72
104
|
- lib/js_rails_routes/version.rb
|
73
105
|
- lib/tasks/js_rails_routes.rake
|
106
|
+
- spec/js_rails_routes/generator_spec.rb
|
107
|
+
- spec/js_rails_routes_spec.rb
|
108
|
+
- spec/spec_helper.rb
|
74
109
|
homepage: https://github.com/yuku-t/js_rails_routes
|
75
110
|
licenses:
|
76
111
|
- MIT
|