js-routes 1.2.6 → 1.2.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +16 -2
- data/Appraisals +1 -1
- data/CHANGELOG.md +7 -0
- data/app/assets/javascripts/js-routes.js.erb +0 -1
- data/gemfiles/rails50.gemfile +8 -0
- data/gemfiles/rails50_sprockets3.gemfile +8 -0
- data/js-routes.gemspec +1 -3
- data/lib/js_routes.rb +15 -11
- data/lib/js_routes/engine.rb +19 -7
- data/lib/js_routes/version.rb +1 -1
- data/lib/routes.js +20 -2
- data/lib/routes.js.coffee +9 -3
- data/spec/js_routes/generated_javascript_spec.rb +0 -4
- data/spec/js_routes/options_spec.rb +1 -8
- data/spec/js_routes/rails_routes_compatibility_spec.rb +11 -0
- data/spec/spec_helper.rb +3 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 673824b92c317dcd831dba31a576e63c057569fc
|
4
|
+
data.tar.gz: 3bde0b614cb515193e7b2166adeb6be99e8d0bf8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 999966b93d59c45104dfd2a24d9ebd7d891df7924430cb7fb2d4a1438e84e229a901043cf4b27ab1da279f74ae33a2c09b1b6c68005a72d33be76ac8430ea9b0
|
7
|
+
data.tar.gz: a2ece0a5892d4762c26a5a74f130806c90d82a1c04ec2f528b42f2e3f15172033fa1073b99852bb9b897e21af4d3964e76133128448e23f84372121b6b5801d2
|
data/.travis.yml
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
language: ruby
|
2
2
|
cache: bundler
|
3
3
|
|
4
|
+
before_install:
|
5
|
+
- gem install bundler # need for jruby and ruby-head
|
6
|
+
|
4
7
|
rvm:
|
5
|
-
- 1.9.3
|
6
8
|
- 2.0
|
7
9
|
- 2.1
|
8
|
-
- 2.2
|
10
|
+
- 2.2.5
|
9
11
|
- 2.3.1
|
10
12
|
- jruby-19mode
|
11
13
|
- ruby-head
|
@@ -19,6 +21,8 @@ gemfile:
|
|
19
21
|
- gemfiles/rails41_sprockets3.gemfile
|
20
22
|
- gemfiles/rails42.gemfile
|
21
23
|
- gemfiles/rails42_sprockets3.gemfile
|
24
|
+
- gemfiles/rails50.gemfile
|
25
|
+
- gemfiles/rails50_sprockets3.gemfile
|
22
26
|
|
23
27
|
sudo: false
|
24
28
|
|
@@ -35,3 +39,13 @@ matrix:
|
|
35
39
|
- rvm: jruby-19mode
|
36
40
|
- rvm: ruby-head
|
37
41
|
- rvm: jruby-head
|
42
|
+
- gemfile: gemfiles/rails50.gemfile
|
43
|
+
exclude:
|
44
|
+
- rvm: 2.0
|
45
|
+
gemfile: gemfiles/rails50.gemfile
|
46
|
+
- rvm: 2.0
|
47
|
+
gemfile: gemfiles/rails50_sprockets3.gemfile
|
48
|
+
- rvm: 2.1
|
49
|
+
gemfile: gemfiles/rails50.gemfile
|
50
|
+
- rvm: 2.1
|
51
|
+
gemfile: gemfiles/rails50_sprockets3.gemfile
|
data/Appraisals
CHANGED
@@ -3,7 +3,7 @@ appraise "rails32" do
|
|
3
3
|
gem 'tzinfo'
|
4
4
|
end
|
5
5
|
|
6
|
-
{rails40: '4.0.5', rails41: '4.1.1', rails42: '4.2.1'}.each do |rails, version|
|
6
|
+
{rails40: '4.0.5', rails41: '4.1.1', rails42: '4.2.1', rails50: '5.0.0'}.each do |rails, version|
|
7
7
|
appraise "#{rails}" do
|
8
8
|
gem "railties", "~> #{version}"
|
9
9
|
gem "sprockets", "< 3"
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
## master
|
2
2
|
|
3
|
+
## v1.2.7
|
4
|
+
|
5
|
+
* Drop support 1.9.3
|
6
|
+
* Add helper for indexOf, if no native implementation in JS engine
|
7
|
+
* Add sprockets3 compatibility
|
8
|
+
* Bugfix domain defaults to path #197
|
9
|
+
|
3
10
|
## v1.2.6
|
4
11
|
|
5
12
|
* Use default prefix from `Rails.application.config.relative_url_root` #186
|
data/js-routes.gemspec
CHANGED
@@ -29,9 +29,7 @@ Gem::Specification.new do |s|
|
|
29
29
|
if defined?(JRUBY_VERSION)
|
30
30
|
s.add_development_dependency(%q<therubyrhino>, [">= 2.0.4"])
|
31
31
|
else
|
32
|
-
|
33
|
-
s.add_development_dependency(%q<byebug>)
|
34
|
-
end
|
32
|
+
s.add_development_dependency(%q<byebug>)
|
35
33
|
s.add_development_dependency(%q<therubyracer>, [">= 0.12.1"])
|
36
34
|
end
|
37
35
|
end
|
data/lib/js_routes.rb
CHANGED
@@ -36,6 +36,7 @@ class JsRoutes
|
|
36
36
|
|
37
37
|
LAST_OPTIONS_KEY = "options".freeze
|
38
38
|
FILTERED_DEFAULT_PARTS = [:controller, :action, :subdomain]
|
39
|
+
URL_OPTIONS = [:protocol, :domain, :host, :port, :subdomain]
|
39
40
|
|
40
41
|
class Options < Struct.new(*DEFAULTS.keys)
|
41
42
|
def to_hash
|
@@ -151,19 +152,22 @@ class JsRoutes
|
|
151
152
|
|
152
153
|
def js_routes
|
153
154
|
js_routes = Rails.application.routes.named_routes.to_a.sort_by(&:first).flat_map do |_, route|
|
154
|
-
|
155
|
-
if rails_engine_app.respond_to?(:superclass) && rails_engine_app.superclass == Rails::Engine && !route.path.anchored
|
156
|
-
rails_engine_app.routes.named_routes.map do |_, engine_route|
|
157
|
-
build_route_if_match(engine_route, route)
|
158
|
-
end
|
159
|
-
else
|
160
|
-
build_route_if_match(route)
|
161
|
-
end
|
155
|
+
[build_route_if_match(route)] + mounted_app_routes(route)
|
162
156
|
end.compact
|
163
|
-
|
164
157
|
"{\n" + js_routes.join(",\n") + "}\n"
|
165
158
|
end
|
166
159
|
|
160
|
+
def mounted_app_routes(route)
|
161
|
+
rails_engine_app = get_app_from_route(route)
|
162
|
+
if rails_engine_app.respond_to?(:superclass) && rails_engine_app.superclass == Rails::Engine && !route.path.anchored
|
163
|
+
rails_engine_app.routes.named_routes.map do |_, engine_route|
|
164
|
+
build_route_if_match(engine_route, route)
|
165
|
+
end
|
166
|
+
else
|
167
|
+
[]
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
167
171
|
def get_app_from_route(route)
|
168
172
|
# rails engine in Rails 4.2 use additional ActionDispatch::Routing::Mapper::Constraints, which contain app
|
169
173
|
if route.app.respond_to?(:app) && route.app.respond_to?(:constraints)
|
@@ -204,8 +208,8 @@ class JsRoutes
|
|
204
208
|
def route_js_arguments(route, parent_spec)
|
205
209
|
required_parts = route.required_parts.clone
|
206
210
|
optional_parts = route.parts - required_parts
|
207
|
-
default_parts = route.defaults.
|
208
|
-
FILTERED_DEFAULT_PARTS.include?(part)
|
211
|
+
default_parts = route.defaults.select do |part, _|
|
212
|
+
FILTERED_DEFAULT_PARTS.exclude?(part) && URL_OPTIONS.include?(part) || required_parts.include?(part)
|
209
213
|
end
|
210
214
|
[
|
211
215
|
required_parts, optional_parts, serialize(route.path.spec, parent_spec), default_parts
|
data/lib/js_routes/engine.rb
CHANGED
@@ -4,15 +4,27 @@ class JsRoutes
|
|
4
4
|
SPROCKETS3 = Gem::Version.new(Sprockets::VERSION) >= Gem::Version.new('3.0.0')
|
5
5
|
class Engine < ::Rails::Engine
|
6
6
|
|
7
|
-
|
7
|
+
if SPROCKETS3
|
8
|
+
initializer 'js-routes.dependent_on_routes', after: :engines_blank_point, before: :finisher_hook do
|
9
|
+
Rails.application.config.assets.configure do |config|
|
10
|
+
routes = Rails.root.join('config', 'routes.rb').to_s
|
11
|
+
config.register_preprocessor 'application/javascript', :'js-routes_dependent_on_routes' do |ctx,data|
|
12
|
+
ctx.depend_on(routes) if ctx.logical_path == 'js-routes'
|
13
|
+
data
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
else
|
18
|
+
initializer 'js-routes.dependent_on_routes', after: "sprockets.environment" do
|
8
19
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
20
|
+
if Rails.application.assets.respond_to?(:register_preprocessor)
|
21
|
+
routes = Rails.root.join('config', 'routes.rb').to_s
|
22
|
+
Rails.application.assets.register_preprocessor 'application/javascript', :'js-routes_dependent_on_routes' do |ctx,data|
|
23
|
+
ctx.depend_on(routes) if ctx.logical_path == 'js-routes'
|
24
|
+
data
|
25
|
+
end
|
14
26
|
end
|
15
27
|
end
|
16
|
-
end
|
28
|
+
end
|
17
29
|
end
|
18
30
|
end
|
data/lib/js_routes/version.rb
CHANGED
data/lib/routes.js
CHANGED
@@ -173,7 +173,7 @@ Based on Rails routes of APP_CLASS
|
|
173
173
|
for (key in options) {
|
174
174
|
if (!hasProp.call(options, key)) continue;
|
175
175
|
value = options[key];
|
176
|
-
if (
|
176
|
+
if (this.indexOf(ReservedOptions, key) >= 0) {
|
177
177
|
result[key] = value;
|
178
178
|
} else {
|
179
179
|
url_parameters[key] = value;
|
@@ -245,7 +245,7 @@ Based on Rails routes of APP_CLASS
|
|
245
245
|
}
|
246
246
|
},
|
247
247
|
is_optional_node: function(node) {
|
248
|
-
return
|
248
|
+
return this.indexOf([NodeTypes.STAR, NodeTypes.SYMBOL, NodeTypes.CAT], node) >= 0;
|
249
249
|
},
|
250
250
|
build_path_spec: function(route, wildcard) {
|
251
251
|
var left, right, type;
|
@@ -375,6 +375,24 @@ Based on Rails routes of APP_CLASS
|
|
375
375
|
} else {
|
376
376
|
return typeof obj;
|
377
377
|
}
|
378
|
+
},
|
379
|
+
indexOf: function(array, element) {
|
380
|
+
if (Array.prototype.indexOf) {
|
381
|
+
return array.indexOf(element);
|
382
|
+
} else {
|
383
|
+
return this.indexOfImplementation(array, element);
|
384
|
+
}
|
385
|
+
},
|
386
|
+
indexOfImplementation: function(array, element) {
|
387
|
+
var el, i, j, len, result;
|
388
|
+
result = -1;
|
389
|
+
for (i = j = 0, len = array.length; j < len; i = ++j) {
|
390
|
+
el = array[i];
|
391
|
+
if (el === element) {
|
392
|
+
result = i;
|
393
|
+
}
|
394
|
+
}
|
395
|
+
return result;
|
378
396
|
}
|
379
397
|
};
|
380
398
|
|
data/lib/routes.js.coffee
CHANGED
@@ -109,7 +109,7 @@ Utils =
|
|
109
109
|
url_parameters = {}
|
110
110
|
result['url_parameters'] = url_parameters
|
111
111
|
for own key, value of options
|
112
|
-
if
|
112
|
+
if @indexOf(ReservedOptions, key) >= 0
|
113
113
|
result[key] = value
|
114
114
|
else
|
115
115
|
url_parameters[key] = value
|
@@ -183,8 +183,7 @@ Utils =
|
|
183
183
|
throw new Error("Unknown Rails node type")
|
184
184
|
|
185
185
|
|
186
|
-
is_optional_node: (node) ->
|
187
|
-
node == NodeTypes.STAR or node == NodeTypes.SYMBOL or node == NodeTypes.CAT
|
186
|
+
is_optional_node: (node) -> @indexOf([NodeTypes.STAR, NodeTypes.SYMBOL, NodeTypes.CAT], node) >= 0
|
188
187
|
|
189
188
|
#
|
190
189
|
# This method build spec for route
|
@@ -311,6 +310,13 @@ Utils =
|
|
311
310
|
return "#{obj}" unless obj?
|
312
311
|
(if typeof obj is "object" or typeof obj is "function" then @_classToType()[Object::toString.call(obj)] or "object" else typeof obj)
|
313
312
|
|
313
|
+
# indexOf helper
|
314
|
+
indexOf: (array, element) -> if Array::indexOf then array.indexOf(element) else @indexOfImplementation(array, element)
|
315
|
+
indexOfImplementation: (array, element) ->
|
316
|
+
result = -1
|
317
|
+
(result = i for el, i in array when el is element)
|
318
|
+
result
|
319
|
+
|
314
320
|
# globalJsObject
|
315
321
|
createGlobalJsRoutesObject = ->
|
316
322
|
# namespace function, private
|
@@ -75,10 +75,6 @@ describe JsRoutes do
|
|
75
75
|
end
|
76
76
|
|
77
77
|
describe "compiled javascript asset" do
|
78
|
-
if JsRoutes::SPROCKETS3
|
79
|
-
let(:routes_path){ "#{Rails.root.join 'config', 'routes.rb'}" }
|
80
|
-
before { expect(self).to receive(:depend_on).with routes_path }
|
81
|
-
end
|
82
78
|
subject { ERB.new(File.read("app/assets/javascripts/js-routes.js.erb")).result(binding) }
|
83
79
|
it "should have js routes code" do
|
84
80
|
is_expected.to include("inbox_message_path: Utils.route([\"inbox_id\",\"id\"]")
|
@@ -421,14 +421,7 @@ describe JsRoutes, "options" do
|
|
421
421
|
end
|
422
422
|
|
423
423
|
before do
|
424
|
-
jscontext
|
425
|
-
:location => {
|
426
|
-
:protocol => current_protocol,
|
427
|
-
:hostname => current_hostname,
|
428
|
-
:port => current_port,
|
429
|
-
:host => current_host
|
430
|
-
}
|
431
|
-
}
|
424
|
+
jscontext.eval("window = {'location': {'protocol': '#{current_protocol}', 'hostname': '#{current_hostname}', 'port': '#{current_port}', 'host': '#{current_host}'}}")
|
432
425
|
end
|
433
426
|
|
434
427
|
context "without specifying a default host" do
|
@@ -67,12 +67,19 @@ describe JsRoutes, "compatibility with Rails" do
|
|
67
67
|
end
|
68
68
|
|
69
69
|
it 'should support route default subdomain' do
|
70
|
+
# root inside namespace is broken
|
71
|
+
# https://github.com/rails/rails/pull/23235
|
72
|
+
pending if Rails.version == '5.0.0'
|
70
73
|
expect(evaljs("Routes.backend_root_path()")).to eq(routes.backend_root_path)
|
71
74
|
end
|
72
75
|
|
73
76
|
it "should support default format override" do
|
74
77
|
expect(evaljs("Routes.api_purchases_path({format: 'xml'})")).to eq(routes.api_purchases_path(format: 'xml'))
|
75
78
|
end
|
79
|
+
|
80
|
+
it "doesn't apply defaults to path" do
|
81
|
+
expect(evaljs("Routes.with_defaults_path()")).to eq(routes.with_defaults_path)
|
82
|
+
end
|
76
83
|
end
|
77
84
|
|
78
85
|
context "with rails engines" do
|
@@ -80,6 +87,10 @@ describe JsRoutes, "compatibility with Rails" do
|
|
80
87
|
expect(evaljs("Routes.blog_app_posts_path()")).to eq(blog_routes.posts_path())
|
81
88
|
end
|
82
89
|
|
90
|
+
it "should support root route" do
|
91
|
+
expect(evaljs("Routes.blog_app_path()")).to eq(routes.blog_app_path())
|
92
|
+
end
|
93
|
+
|
83
94
|
it "should support route with parameters" do
|
84
95
|
expect(evaljs("Routes.blog_app_post_path(1)")).to eq(blog_routes.post_path(1))
|
85
96
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -14,7 +14,7 @@ if defined?(JRUBY_VERSION)
|
|
14
14
|
require 'rhino'
|
15
15
|
JS_LIB_CLASS = Rhino
|
16
16
|
else
|
17
|
-
require
|
17
|
+
require 'v8'
|
18
18
|
JS_LIB_CLASS = V8
|
19
19
|
end
|
20
20
|
|
@@ -124,6 +124,8 @@ def draw_routes
|
|
124
124
|
|
125
125
|
resources :portals, :port => 8080
|
126
126
|
|
127
|
+
get '/with_defaults' => 'foo#foo', defaults: { bar: 'tested', format: :json }, format: :true
|
128
|
+
|
127
129
|
namespace :api, format: true, defaults: {format: 'json'} do
|
128
130
|
get "/purchases" => "purchases#index"
|
129
131
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: js-routes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bogdan Gusiev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -148,6 +148,8 @@ files:
|
|
148
148
|
- gemfiles/rails41_sprockets3.gemfile
|
149
149
|
- gemfiles/rails42.gemfile
|
150
150
|
- gemfiles/rails42_sprockets3.gemfile
|
151
|
+
- gemfiles/rails50.gemfile
|
152
|
+
- gemfiles/rails50_sprockets3.gemfile
|
151
153
|
- js-routes.gemspec
|
152
154
|
- lib/js-routes.rb
|
153
155
|
- lib/js_routes.rb
|