js-routes 1.2.6 → 1.2.7
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/.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
|