js_rails_routes 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Gem](https://img.shields.io/gem/v/js_rails_routes.svg?maxAge=2592000)](https://rubygems.org/gems/js_rails_routes) [![Build Status](https://travis-ci.org/yuku-t/js_rails_routes.svg?branch=master)](https://travis-ci.org/yuku-t/js_rails_routes) [![Code Climate](https://codeclimate.com/github/yuku-t/js_rails_routes/badges/gpa.svg)](https://codeclimate.com/github/yuku-t/js_rails_routes) [![Test Coverage](https://codeclimate.com/github/yuku-t/js_rails_routes/badges/coverage.svg)](https://codeclimate.com/github/yuku-t/js_rails_routes/coverage) [![license](https://img.shields.io/github/license/yuku-t/js_rails_routes.svg?maxAge=2592000)](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
|