js-routes 1.0.1 → 1.1.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/.travis.yml +7 -2
- data/Appraisals +6 -1
- data/CHANGELOG.md +13 -0
- data/Readme.md +5 -1
- data/gemfiles/rails42.gemfile +1 -1
- data/gemfiles/rails42_sprockets3.gemfile +1 -1
- data/gemfiles/rails_edge.gemfile +8 -0
- data/js-routes.gemspec +3 -0
- data/lib/js_routes.rb +14 -5
- data/lib/js_routes/engine.rb +1 -1
- data/lib/js_routes/version.rb +1 -1
- data/lib/routes.js +23 -8
- data/lib/routes.js.coffee +17 -8
- data/spec/js_routes/default_serializer_spec.rb +13 -0
- data/spec/js_routes/generated_javascript_spec.rb +12 -0
- data/spec/js_routes/options_spec.rb +21 -6
- data/spec/js_routes/rails_routes_compatibility_spec.rb +0 -45
- data/spec/spec_helper.rb +3 -1
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d01616a12162f3955743143d09ce4e4e0297284a
|
4
|
+
data.tar.gz: b515223e7fa4122852861fbe5e6cddbe927aadec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 847807d48bf2c431609b98eeb940d0c8da008bbebf8a04d5c857b02aeab54e9c3648c3d7039bfcdc508a367ae05be86d77db153950270ccce0f68461d7a30ad7
|
7
|
+
data.tar.gz: d72dc26e1a9a7ac2cfeb1795cad81567a7a3885ed9ad9f6e6f9121cf444fa2371a77da7cd2505994010e9f0521be78a55033f9bd9ec1858a871d42545646ba93
|
data/.travis.yml
CHANGED
@@ -13,10 +13,10 @@ rvm:
|
|
13
13
|
gemfile:
|
14
14
|
- gemfiles/rails32.gemfile
|
15
15
|
- gemfiles/rails40.gemfile
|
16
|
-
- gemfiles/rails41.gemfile
|
17
|
-
- gemfiles/rails42.gemfile
|
18
16
|
- gemfiles/rails40_sprockets3.gemfile
|
17
|
+
- gemfiles/rails41.gemfile
|
19
18
|
- gemfiles/rails41_sprockets3.gemfile
|
19
|
+
- gemfiles/rails42.gemfile
|
20
20
|
- gemfiles/rails42_sprockets3.gemfile
|
21
21
|
|
22
22
|
sudo: false
|
@@ -30,7 +30,12 @@ branches:
|
|
30
30
|
- master
|
31
31
|
|
32
32
|
matrix:
|
33
|
+
include:
|
34
|
+
- gemfile: gemfiles/rails_edge.gemfile
|
35
|
+
rvm: 2.2
|
33
36
|
allow_failures:
|
34
37
|
- rvm: jruby-19mode
|
35
38
|
- rvm: ruby-head
|
36
39
|
- rvm: jruby-head
|
40
|
+
- gemfile: gemfiles/rails_edge.gemfile
|
41
|
+
rvm: 2.2
|
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.
|
6
|
+
{rails40: '4.0.5', rails41: '4.1.1', rails42: '4.2.1'}.each do |rails, version|
|
7
7
|
appraise "#{rails}" do
|
8
8
|
gem "railties", "~> #{version}"
|
9
9
|
gem "sprockets", "< 3"
|
@@ -14,3 +14,8 @@ end
|
|
14
14
|
gem "sprockets", "~> 3.0"
|
15
15
|
end
|
16
16
|
end
|
17
|
+
|
18
|
+
appraise "rails-edge" do
|
19
|
+
gem "railties", github: 'rails/rails'
|
20
|
+
gem "sprockets", "~> 3.0"
|
21
|
+
end
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
## master
|
2
2
|
|
3
|
+
## v1.1.0
|
4
|
+
|
5
|
+
* Ensure routes are loaded, prior to generating them [#148](https://github.com/railsware/js-routes/pull/148)
|
6
|
+
* Use `flat_map` rather than `map{...}.flatten` [#149](https://github.com/railsware/js-routes/pull/149)
|
7
|
+
* URL escape routes.rb url to fix bad URI(is not URI?) error [#150](https://github.com/railsware/js-routes/pull/150)
|
8
|
+
* Fix for rails 5 - test rails-edge on travis allowing failure [#151](https://github.com/railsware/js-routes/pull/151)
|
9
|
+
* Adds `serializer` option [#155](https://github.com/railsware/js-routes/pull/155/files)
|
10
|
+
|
11
|
+
## v1.0.1
|
12
|
+
|
13
|
+
* Support sprockets-3
|
14
|
+
* Performance optimization of include/exclude options
|
15
|
+
|
3
16
|
## v1.0.0
|
4
17
|
|
5
18
|
* Add the compact mode [#125](https://github.com/railsware/js-routes/pull/125)
|
data/Readme.md
CHANGED
@@ -69,6 +69,10 @@ Available options:
|
|
69
69
|
* `compact` (version > 0.9.9) - Remove `_path` suffix in path routes(`*_url` routes stay untouched if they were enabled)
|
70
70
|
* Default: false
|
71
71
|
* Sample route call when option is set to true: Routes.users() => `/users`
|
72
|
+
* `serializer` (version >= 1.1.0) - Puts a JS function here that serializes a Javascript Hash object into URL paramters: `{a: 1, b: 2} => "a=1&b=2"`.
|
73
|
+
* Default: `nil`. Uses built-in serializer
|
74
|
+
* Example: `jQuery.param` - use jQuery's serializer algorithm. You can attach serialize function from your favorite AJAX framework.
|
75
|
+
* Example: `MyApp.custom_serialize` - use completely custom serializer of your application.
|
72
76
|
|
73
77
|
### Very Advanced Setup
|
74
78
|
|
@@ -91,7 +95,7 @@ If your application has an `admin` and an `application` namespace for example:
|
|
91
95
|
#= require application/routes
|
92
96
|
```
|
93
97
|
|
94
|
-
In order to generate the routes to a string:
|
98
|
+
In order to generate the routes JS code to a string:
|
95
99
|
|
96
100
|
```ruby
|
97
101
|
routes_js = JsRoutes.generate(options)
|
data/gemfiles/rails42.gemfile
CHANGED
data/js-routes.gemspec
CHANGED
@@ -30,6 +30,9 @@ Gem::Specification.new do |s|
|
|
30
30
|
if defined?(JRUBY_VERSION)
|
31
31
|
s.add_development_dependency(%q<therubyrhino>, [">= 2.0.4"])
|
32
32
|
else
|
33
|
+
if RUBY_VERSION >= "2.0.0"
|
34
|
+
s.add_development_dependency(%q<byebug>)
|
35
|
+
end
|
33
36
|
s.add_development_dependency(%q<therubyracer>, [">= 0.12.1"])
|
34
37
|
end
|
35
38
|
end
|
data/lib/js_routes.rb
CHANGED
@@ -19,7 +19,8 @@ class JsRoutes
|
|
19
19
|
url_links: nil,
|
20
20
|
camel_case: false,
|
21
21
|
default_url_options: {},
|
22
|
-
compact: false
|
22
|
+
compact: false,
|
23
|
+
serializer: nil
|
23
24
|
}
|
24
25
|
|
25
26
|
NODE_TYPES = {
|
@@ -57,6 +58,11 @@ class JsRoutes
|
|
57
58
|
end
|
58
59
|
|
59
60
|
def generate(opts = {})
|
61
|
+
# Ensure routes are loaded. If they're not, load them.
|
62
|
+
if Rails.application.routes.named_routes.routes.keys.empty?
|
63
|
+
Rails.application.reload_routes!
|
64
|
+
end
|
65
|
+
|
60
66
|
new(opts).generate
|
61
67
|
end
|
62
68
|
|
@@ -93,10 +99,13 @@ class JsRoutes
|
|
93
99
|
|
94
100
|
def generate
|
95
101
|
js = File.read(File.dirname(__FILE__) + "/routes.js")
|
102
|
+
js.gsub!("GEM_VERSION", JsRoutes::VERSION)
|
103
|
+
js.gsub!("APP_CLASS", Rails.application.class.to_s)
|
96
104
|
js.gsub!("NAMESPACE", @options[:namespace])
|
97
105
|
js.gsub!("DEFAULT_URL_OPTIONS", json(@options[:default_url_options].merge(deprecated_default_format)))
|
98
106
|
js.gsub!("PREFIX", @options[:prefix] || "")
|
99
107
|
js.gsub!("NODE_TYPES", json(NODE_TYPES))
|
108
|
+
js.gsub!("SERIALIZER", @options[:serializer] || "null")
|
100
109
|
js.gsub!("ROUTES", js_routes)
|
101
110
|
end
|
102
111
|
|
@@ -124,7 +133,7 @@ class JsRoutes
|
|
124
133
|
protected
|
125
134
|
|
126
135
|
def js_routes
|
127
|
-
js_routes = Rails.application.routes.named_routes.routes.sort_by(&:to_s).
|
136
|
+
js_routes = Rails.application.routes.named_routes.routes.sort_by(&:to_s).flat_map do |_, route|
|
128
137
|
rails_engine_app = get_app_from_route(route)
|
129
138
|
if rails_engine_app.respond_to?(:superclass) && rails_engine_app.superclass == Rails::Engine && !route.path.anchored
|
130
139
|
rails_engine_app.routes.named_routes.map do |_, engine_route|
|
@@ -133,7 +142,7 @@ class JsRoutes
|
|
133
142
|
else
|
134
143
|
build_route_if_match(route)
|
135
144
|
end
|
136
|
-
end.
|
145
|
+
end.compact
|
137
146
|
|
138
147
|
"{\n" + js_routes.join(",\n") + "}\n"
|
139
148
|
end
|
@@ -157,7 +166,7 @@ class JsRoutes
|
|
157
166
|
|
158
167
|
def any_match?(route, parent_route, matchers)
|
159
168
|
full_route = [parent_route.try(:name), route.name].compact.join('_')
|
160
|
-
|
169
|
+
|
161
170
|
matchers = Array(matchers)
|
162
171
|
matchers.any? {|regex| full_route =~ regex}
|
163
172
|
end
|
@@ -165,7 +174,7 @@ class JsRoutes
|
|
165
174
|
def build_js(route, parent_route)
|
166
175
|
name = [parent_route.try(:name), route.name].compact
|
167
176
|
parent_spec = parent_route.try(:path).try(:spec)
|
168
|
-
required_parts, optional_parts = route.required_parts.clone, route.
|
177
|
+
required_parts, optional_parts = route.required_parts.clone, (route.parts-route.required_parts)
|
169
178
|
optional_parts.push(required_parts.delete :format) if required_parts.include?(:format)
|
170
179
|
route_name = generate_route_name(name, (:path unless @options[:compact]))
|
171
180
|
url_link = generate_url_link(name, route_name, required_parts, route)
|
data/lib/js_routes/engine.rb
CHANGED
@@ -14,7 +14,7 @@ class JsRoutes
|
|
14
14
|
|
15
15
|
# only sprockets >= 3.0
|
16
16
|
if Rails.application.assets.respond_to?(:depend_on)
|
17
|
-
Rails.application.assets.depend_on "file-digest://#{routes}"
|
17
|
+
Rails.application.assets.depend_on Rack::Utils.escape("file-digest://#{routes}")
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
data/lib/js_routes/version.rb
CHANGED
data/lib/routes.js
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
/*
|
2
|
+
File generated by js-routes GEM_VERSION
|
3
|
+
Based on Rails routes of APP_CLASS
|
4
|
+
*/
|
5
|
+
|
6
|
+
|
1
7
|
(function() {
|
2
8
|
var NodeTypes, ParameterMissing, Utils, createGlobalJsRoutesObject, defaults, root,
|
3
9
|
__hasProp = {}.hasOwnProperty;
|
@@ -18,8 +24,8 @@
|
|
18
24
|
NodeTypes = NODE_TYPES;
|
19
25
|
|
20
26
|
Utils = {
|
21
|
-
|
22
|
-
var element, i, key, prop,
|
27
|
+
default_serializer: function(object, prefix) {
|
28
|
+
var element, i, key, prop, s, _i, _len;
|
23
29
|
|
24
30
|
if (prefix == null) {
|
25
31
|
prefix = null;
|
@@ -30,16 +36,12 @@
|
|
30
36
|
if (!prefix && !(this.get_object_type(object) === "object")) {
|
31
37
|
throw new Error("Url parameters should be a javascript hash");
|
32
38
|
}
|
33
|
-
if (root.jQuery) {
|
34
|
-
result = root.jQuery.param(object);
|
35
|
-
return (!result ? "" : result);
|
36
|
-
}
|
37
39
|
s = [];
|
38
40
|
switch (this.get_object_type(object)) {
|
39
41
|
case "array":
|
40
42
|
for (i = _i = 0, _len = object.length; _i < _len; i = ++_i) {
|
41
43
|
element = object[i];
|
42
|
-
s.push(this.
|
44
|
+
s.push(this.default_serializer(element, prefix + "[]"));
|
43
45
|
}
|
44
46
|
break;
|
45
47
|
case "object":
|
@@ -52,7 +54,7 @@
|
|
52
54
|
if (prefix != null) {
|
53
55
|
key = "" + prefix + "[" + key + "]";
|
54
56
|
}
|
55
|
-
s.push(this.
|
57
|
+
s.push(this.default_serializer(prop, key));
|
56
58
|
}
|
57
59
|
break;
|
58
60
|
default:
|
@@ -65,6 +67,16 @@
|
|
65
67
|
}
|
66
68
|
return s.join("&");
|
67
69
|
},
|
70
|
+
serialize: function(object) {
|
71
|
+
var custom_serializer;
|
72
|
+
|
73
|
+
custom_serializer = SERIALIZER;
|
74
|
+
if (custom_serializer) {
|
75
|
+
return custom_serializer(object);
|
76
|
+
} else {
|
77
|
+
return this.default_serializer(object);
|
78
|
+
}
|
79
|
+
},
|
68
80
|
clean_path: function(path) {
|
69
81
|
var last_index;
|
70
82
|
|
@@ -351,6 +363,9 @@
|
|
351
363
|
namespace(root, "NAMESPACE");
|
352
364
|
root.NAMESPACE = ROUTES;
|
353
365
|
root.NAMESPACE.options = defaults;
|
366
|
+
root.NAMESPACE.default_serializer = function(object, prefix) {
|
367
|
+
return Utils.default_serializer(object, prefix);
|
368
|
+
};
|
354
369
|
return root.NAMESPACE;
|
355
370
|
};
|
356
371
|
|
data/lib/routes.js.coffee
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
###
|
2
|
+
File generated by js-routes GEM_VERSION
|
3
|
+
Based on Rails routes of APP_CLASS
|
4
|
+
###
|
1
5
|
# root is this
|
2
6
|
root = (exports ? this)
|
3
7
|
|
@@ -11,24 +15,20 @@ NodeTypes = NODE_TYPES
|
|
11
15
|
|
12
16
|
Utils =
|
13
17
|
|
14
|
-
|
18
|
+
default_serializer: (object, prefix = null) ->
|
15
19
|
return "" unless object
|
16
20
|
if !prefix and !(@get_object_type(object) is "object")
|
17
21
|
throw new Error("Url parameters should be a javascript hash")
|
18
22
|
|
19
|
-
if root.jQuery
|
20
|
-
result = root.jQuery.param(object)
|
21
|
-
return (if not result then "" else result)
|
22
|
-
|
23
23
|
s = []
|
24
24
|
switch @get_object_type(object)
|
25
25
|
when "array"
|
26
26
|
for element, i in object
|
27
|
-
s.push @
|
27
|
+
s.push @default_serializer(element, prefix + "[]")
|
28
28
|
when "object"
|
29
29
|
for own key, prop of object when prop?
|
30
30
|
key = "#{prefix}[#{key}]" if prefix?
|
31
|
-
s.push @
|
31
|
+
s.push @default_serializer(prop, key)
|
32
32
|
else
|
33
33
|
if object
|
34
34
|
s.push "#{encodeURIComponent(prefix.toString())}=#{encodeURIComponent(object.toString())}"
|
@@ -36,6 +36,13 @@ Utils =
|
|
36
36
|
return "" unless s.length
|
37
37
|
s.join("&")
|
38
38
|
|
39
|
+
serialize: (object) ->
|
40
|
+
custom_serializer = SERIALIZER
|
41
|
+
if custom_serializer
|
42
|
+
custom_serializer(object)
|
43
|
+
else
|
44
|
+
@default_serializer(object)
|
45
|
+
|
39
46
|
clean_path: (path) ->
|
40
47
|
path = path.split("://")
|
41
48
|
last_index = path.length - 1
|
@@ -273,6 +280,8 @@ createGlobalJsRoutesObject = ->
|
|
273
280
|
namespace(root, "NAMESPACE")
|
274
281
|
root.NAMESPACE = ROUTES
|
275
282
|
root.NAMESPACE.options = defaults
|
283
|
+
root.NAMESPACE.default_serializer = (object, prefix) ->
|
284
|
+
Utils.default_serializer(object, prefix)
|
276
285
|
root.NAMESPACE
|
277
286
|
# Set up Routes appropriately for the environment.
|
278
287
|
if typeof define is "function" and define.amd
|
@@ -280,4 +289,4 @@ if typeof define is "function" and define.amd
|
|
280
289
|
define [], -> createGlobalJsRoutesObject()
|
281
290
|
else
|
282
291
|
# Browser globals
|
283
|
-
createGlobalJsRoutesObject()
|
292
|
+
createGlobalJsRoutesObject()
|
@@ -0,0 +1,13 @@
|
|
1
|
+
describe JsRoutes, "#default_serializer" do
|
2
|
+
|
3
|
+
before(:each) do
|
4
|
+
evaljs(JsRoutes.generate({}))
|
5
|
+
end
|
6
|
+
|
7
|
+
it "should provide this method" do
|
8
|
+
expect(evaljs("Routes.default_serializer({a: 1, b: [2,3], c: {d: 4, e: 5}})")).to eq(
|
9
|
+
"a=1&b%5B%5D=2&b%5B%5D=3&c%5Bd%5D=4&c%5Be%5D=5"
|
10
|
+
)
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -9,6 +9,18 @@ describe JsRoutes do
|
|
9
9
|
|
10
10
|
describe "generated js" do
|
11
11
|
subject { JsRoutes.generate }
|
12
|
+
|
13
|
+
it "should set the default serializer when none is configured" do
|
14
|
+
is_expected.to match(%r(serialize: function\(object\) {\s+var custom_serializer;\s+custom_serializer = null;\s+if \(custom_serializer\) {\s+return custom_serializer\(object\);\s+} else {\s+return this.default_serializer\(object\);\s+}\s+},))
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should include a comment in the header" do
|
18
|
+
app_class = "App"
|
19
|
+
|
20
|
+
is_expected.to include("File generated by js-routes #{JsRoutes::VERSION}")
|
21
|
+
is_expected.to include("Based on Rails routes of #{app_class}")
|
22
|
+
end
|
23
|
+
|
12
24
|
it "should call route function for each route" do
|
13
25
|
is_expected.to include("inboxes_path: Utils.route(")
|
14
26
|
end
|
@@ -13,6 +13,21 @@ describe JsRoutes, "options" do
|
|
13
13
|
let(:_options) { {} }
|
14
14
|
let(:_warnings) { true }
|
15
15
|
|
16
|
+
context "when serializer is specified" do
|
17
|
+
let(:_options) { {:serializer => "myCustomSerializer"} }
|
18
|
+
|
19
|
+
it "should set configurable serializer" do
|
20
|
+
# define custom serializer
|
21
|
+
# this is a nonsense serializer, which always returns foo=bar
|
22
|
+
# for all inputs
|
23
|
+
evaljs(%q(function myCustomSerializer(object, prefix) { return "foo=bar"; }))
|
24
|
+
|
25
|
+
# expect the nonsense serializer above to have appened foo=bar
|
26
|
+
# to the end of the path
|
27
|
+
expect(evaljs(%q(Routes.inboxes_path()))).to eql("/inboxes?foo=bar")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
16
31
|
context "when exclude is specified" do
|
17
32
|
|
18
33
|
let(:_options) { {:exclude => /^admin_/} }
|
@@ -292,11 +307,11 @@ describe JsRoutes, "options" do
|
|
292
307
|
|
293
308
|
context "when only host option is specified" do
|
294
309
|
let(:_options) { { :url_links => true, :default_url_options => {:host => "example.com"} } }
|
295
|
-
|
310
|
+
|
296
311
|
it "uses the specified host, defaults protocol to http, defaults port to 80 (leaving it blank)" do
|
297
312
|
expect(evaljs("Routes.inbox_url(1)")).to eq("http://example.com#{routes.inbox_path(1)}")
|
298
313
|
end
|
299
|
-
|
314
|
+
|
300
315
|
it "does not override protocol when specified in route" do
|
301
316
|
expect(evaljs("Routes.new_session_url()")).to eq("https://example.com#{routes.new_session_path}")
|
302
317
|
end
|
@@ -316,7 +331,7 @@ describe JsRoutes, "options" do
|
|
316
331
|
it "uses the specified protocol and host, defaults port to 80 (leaving it blank)" do
|
317
332
|
expect(evaljs("Routes.inbox_url(1)")).to eq("ftp://example.com#{routes.inbox_path(1)}")
|
318
333
|
end
|
319
|
-
|
334
|
+
|
320
335
|
it "does not override protocol when specified in route" do
|
321
336
|
expect(evaljs("Routes.new_session_url()")).to eq("https://example.com#{routes.new_session_path}")
|
322
337
|
end
|
@@ -340,11 +355,11 @@ describe JsRoutes, "options" do
|
|
340
355
|
it "does not override protocol when specified in route" do
|
341
356
|
expect(evaljs("Routes.new_session_url()")).to eq("https://example.com:3000#{routes.new_session_path}")
|
342
357
|
end
|
343
|
-
|
358
|
+
|
344
359
|
it "does not override host, protocol, or port when host is specified in route" do
|
345
360
|
expect(evaljs("Routes.sso_url()")).to eq(routes.sso_url)
|
346
361
|
end
|
347
|
-
|
362
|
+
|
348
363
|
it "does not override port when specified in route" do
|
349
364
|
expect(evaljs("Routes.portals_url()")).to eq("http://example.com:8080#{routes.portals_path}")
|
350
365
|
end
|
@@ -397,7 +412,7 @@ describe JsRoutes, "options" do
|
|
397
412
|
example.run
|
398
413
|
end
|
399
414
|
end
|
400
|
-
|
415
|
+
|
401
416
|
let(:_options) { { :compact => true, :url_links => "http://localhost" } }
|
402
417
|
it "should not strip urls" do
|
403
418
|
expect(evaljs("Routes.inbox(1)")).to eq(routes.inbox_path(1))
|
@@ -147,45 +147,6 @@ describe JsRoutes, "compatibility with Rails" do
|
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
150
|
-
context "when jQuery is present" do
|
151
|
-
before do
|
152
|
-
evaljs("window.jQuery = {};")
|
153
|
-
jscontext[:parameterizeFunc] = lambda {|object| _value.to_param}
|
154
|
-
evaljs("window.jQuery.param = parameterizeFunc")
|
155
|
-
end
|
156
|
-
|
157
|
-
shared_examples_for "serialization" do
|
158
|
-
it "should support serialization of objects" do
|
159
|
-
expect(evaljs("window.jQuery.param(#{_value.to_json})")).to eq(_value.to_param)
|
160
|
-
expect(evaljs("Routes.inboxes_path(#{_value.to_json})")).to eq(routes.inboxes_path(_value))
|
161
|
-
expect(evaljs("Routes.inbox_path(1, #{_value.to_json})")).to eq(routes.inbox_path(1, _value))
|
162
|
-
end
|
163
|
-
end
|
164
|
-
context "when parameters is a hash" do
|
165
|
-
let(:_value) do
|
166
|
-
{:a => {:b => 'c'}, :q => [1,2]}
|
167
|
-
end
|
168
|
-
it_should_behave_like 'serialization'
|
169
|
-
end
|
170
|
-
context "when parameters is null" do
|
171
|
-
let(:_value) do
|
172
|
-
{:hello => {world: nil}}
|
173
|
-
end
|
174
|
-
it_should_behave_like 'serialization'
|
175
|
-
end
|
176
|
-
context "when parameters is null" do
|
177
|
-
let(:_value) do
|
178
|
-
nil
|
179
|
-
end
|
180
|
-
|
181
|
-
before do
|
182
|
-
pending("This test is invalid for nil/null and jruby #{JRUBY_VERSION}") if defined?(JRUBY_VERSION) && '1.7.13' == JRUBY_VERSION
|
183
|
-
end
|
184
|
-
|
185
|
-
it_should_behave_like 'serialization'
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
150
|
context "using optional path fragments" do
|
190
151
|
context "including not optional parts" do
|
191
152
|
it "should include everything that is not optional" do
|
@@ -204,17 +165,11 @@ describe JsRoutes, "compatibility with Rails" do
|
|
204
165
|
expect(evaljs("Routes.thing_path(null, 5)")).to eq(routes.thing_path(nil, 5))
|
205
166
|
end
|
206
167
|
|
207
|
-
# Fail for rails 4.2. Reason: https://github.com/rails/rails/issues/12178
|
208
168
|
it "should treat undefined as non-given optional part" do
|
209
|
-
# TODO: remove me after release of rails 4.2.1 (change Appraisals to "~> 4.2.1")
|
210
|
-
pending("This test is invalid for rails 4.2. Reason: https://github.com/rails/rails/issues/12178") if [4, 2, 0] == [Rails::VERSION::MAJOR, Rails::VERSION::MINOR, Rails::VERSION::TINY]
|
211
169
|
expect(evaljs("Routes.thing_path(5, {optional_id: undefined})")).to eq(routes.thing_path(5, :optional_id => nil))
|
212
170
|
end
|
213
171
|
|
214
|
-
# Fail for rails 4.2. Reason: https://github.com/rails/rails/issues/12178
|
215
172
|
it "should treat null as non-given optional part" do
|
216
|
-
# TODO: remove me after release of rails 4.2.1 (change Appraisals to "~> 4.2.1")
|
217
|
-
pending("This test is invalid for rails 4.2. Reason: https://github.com/rails/rails/issues/12178") if [4, 2, 0] == [Rails::VERSION::MAJOR, Rails::VERSION::MINOR, Rails::VERSION::TINY]
|
218
173
|
expect(evaljs("Routes.thing_path(5, {optional_id: null})")).to eq(routes.thing_path(5, :optional_id => nil))
|
219
174
|
end
|
220
175
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -135,7 +135,9 @@ RSpec.configure do |config|
|
|
135
135
|
config.before(:all) do
|
136
136
|
# compile all js files begin
|
137
137
|
Dir["#{File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))}/**/*.coffee"].each do |coffee|
|
138
|
-
File.open(coffee.gsub(/\.coffee$/, ""), 'w')
|
138
|
+
File.open(coffee.gsub(/\.coffee$/, ""), 'w') do |f|
|
139
|
+
f.write(CoffeeScript.compile(File.read(coffee)).lstrip)
|
140
|
+
end
|
139
141
|
end
|
140
142
|
# compile all js files end
|
141
143
|
draw_routes
|
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.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bogdan Gusiev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: 0.5.2
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: byebug
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: therubyracer
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -149,6 +163,7 @@ files:
|
|
149
163
|
- gemfiles/rails41_sprockets3.gemfile
|
150
164
|
- gemfiles/rails42.gemfile
|
151
165
|
- gemfiles/rails42_sprockets3.gemfile
|
166
|
+
- gemfiles/rails_edge.gemfile
|
152
167
|
- js-routes.gemspec
|
153
168
|
- lib/js-routes.rb
|
154
169
|
- lib/js_routes.rb
|
@@ -160,6 +175,7 @@ files:
|
|
160
175
|
- spec/dummy/app/assets/javascripts/.gitkeep
|
161
176
|
- spec/dummy/config/routes.rb
|
162
177
|
- spec/js_routes/amd_compatibility_spec.rb
|
178
|
+
- spec/js_routes/default_serializer_spec.rb
|
163
179
|
- spec/js_routes/generated_javascript_spec.rb
|
164
180
|
- spec/js_routes/options_spec.rb
|
165
181
|
- spec/js_routes/rails_routes_compatibility_spec.rb
|