js-routes 0.9.4 → 0.9.5
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.
- data/Readme.md +6 -1
- data/lib/js_routes/version.rb +1 -1
- data/lib/routes.js +29 -7
- data/lib/routes.js.coffee +15 -6
- data/spec/js_routes/rails_routes_compatibility_spec.rb +14 -5
- data/spec/spec_helper.rb +3 -0
- metadata +2 -2
data/Readme.md
CHANGED
@@ -65,9 +65,14 @@ Available options:
|
|
65
65
|
* Example: http[s]://example.com
|
66
66
|
* Default: false
|
67
67
|
|
68
|
-
|
68
|
+
### Very Advanced Setup
|
69
|
+
|
70
|
+
In case you need multiple route files for different parts of your application, you can not use asset pipeline.
|
71
|
+
|
72
|
+
You need to generate routes files on the application side like this:
|
69
73
|
|
70
74
|
``` ruby
|
75
|
+
path = "app/assets/javascripts"
|
71
76
|
JsRoutes.generate!("#{path}/app_routes.js", :namespace => "AppRoutes", :exclude => [/^admin_/, /^api_/])
|
72
77
|
JsRoutes.generate!("#{path}/adm_routes.js", :namespace => "AdmRoutes", :include => /^admin_/)
|
73
78
|
JsRoutes.generate!("#{path}/api_routes.js", :namespace => "ApiRoutes", :include => /^api_/, :default_url_options => {:format => "json"})
|
data/lib/js_routes/version.rb
CHANGED
data/lib/routes.js
CHANGED
@@ -18,6 +18,7 @@
|
|
18
18
|
Utils = {
|
19
19
|
serialize: function(object, prefix) {
|
20
20
|
var element, i, key, prop, result, s, _i, _len;
|
21
|
+
|
21
22
|
if (prefix == null) {
|
22
23
|
prefix = null;
|
23
24
|
}
|
@@ -64,13 +65,15 @@
|
|
64
65
|
},
|
65
66
|
clean_path: function(path) {
|
66
67
|
var last_index;
|
68
|
+
|
67
69
|
path = path.split("://");
|
68
70
|
last_index = path.length - 1;
|
69
|
-
path[last_index] = path[last_index].replace(/\/+/g, "/")
|
71
|
+
path[last_index] = path[last_index].replace(/\/+/g, "/");
|
70
72
|
return path.join("://");
|
71
73
|
},
|
72
74
|
set_default_url_options: function(optional_parts, options) {
|
73
75
|
var i, part, _i, _len, _results;
|
76
|
+
|
74
77
|
_results = [];
|
75
78
|
for (i = _i = 0, _len = optional_parts.length; _i < _len; i = ++_i) {
|
76
79
|
part = optional_parts[i];
|
@@ -84,6 +87,7 @@
|
|
84
87
|
},
|
85
88
|
extract_anchor: function(options) {
|
86
89
|
var anchor;
|
90
|
+
|
87
91
|
anchor = "";
|
88
92
|
if (options.hasOwnProperty("anchor")) {
|
89
93
|
anchor = "#" + options.anchor;
|
@@ -92,15 +96,22 @@
|
|
92
96
|
return anchor;
|
93
97
|
},
|
94
98
|
extract_options: function(number_of_params, args) {
|
95
|
-
var
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
+
var last_argument, type;
|
100
|
+
|
101
|
+
last_argument = args[args.length - 1];
|
102
|
+
type = this.get_object_type(last_argument);
|
103
|
+
if (args.length > number_of_params || (type === "object" && !this.look_like_serialized_model(last_argument))) {
|
104
|
+
return args.pop();
|
105
|
+
} else {
|
106
|
+
return {};
|
99
107
|
}
|
100
|
-
|
108
|
+
},
|
109
|
+
look_like_serialized_model: function(object) {
|
110
|
+
return "id" in object || "to_param" in object;
|
101
111
|
},
|
102
112
|
path_identifier: function(object) {
|
103
113
|
var property;
|
114
|
+
|
104
115
|
if (object === 0) {
|
105
116
|
return "0";
|
106
117
|
}
|
@@ -118,6 +129,7 @@
|
|
118
129
|
},
|
119
130
|
clone: function(obj) {
|
120
131
|
var attr, copy, key;
|
132
|
+
|
121
133
|
if ((obj == null) || "object" !== this.get_object_type(obj)) {
|
122
134
|
return obj;
|
123
135
|
}
|
@@ -131,15 +143,19 @@
|
|
131
143
|
},
|
132
144
|
prepare_parameters: function(required_parameters, actual_parameters, options) {
|
133
145
|
var i, result, val, _i, _len;
|
146
|
+
|
134
147
|
result = this.clone(options) || {};
|
135
148
|
for (i = _i = 0, _len = required_parameters.length; _i < _len; i = ++_i) {
|
136
149
|
val = required_parameters[i];
|
137
|
-
|
150
|
+
if (i < actual_parameters.length) {
|
151
|
+
result[val] = actual_parameters[i];
|
152
|
+
}
|
138
153
|
}
|
139
154
|
return result;
|
140
155
|
},
|
141
156
|
build_path: function(required_parameters, optional_parts, route, args) {
|
142
157
|
var anchor, opts, parameters, result, url, url_params;
|
158
|
+
|
143
159
|
args = Array.prototype.slice.call(args);
|
144
160
|
opts = this.extract_options(required_parameters.length, args);
|
145
161
|
if (args.length > required_parameters.length) {
|
@@ -158,6 +174,7 @@
|
|
158
174
|
},
|
159
175
|
visit: function(route, parameters, optional) {
|
160
176
|
var left, left_part, right, right_part, type, value;
|
177
|
+
|
161
178
|
if (optional == null) {
|
162
179
|
optional = false;
|
163
180
|
}
|
@@ -196,6 +213,7 @@
|
|
196
213
|
},
|
197
214
|
visit_globbing: function(route, parameters, optional) {
|
198
215
|
var left, right, type, value;
|
216
|
+
|
199
217
|
type = route[0], left = route[1], right = route[2];
|
200
218
|
if (left.replace(/^\*/i, "") !== left) {
|
201
219
|
route[1] = left = left.replace(/^\*/i, "");
|
@@ -216,6 +234,7 @@
|
|
216
234
|
},
|
217
235
|
get_prefix: function() {
|
218
236
|
var prefix;
|
237
|
+
|
219
238
|
prefix = defaults.prefix;
|
220
239
|
if (prefix !== "") {
|
221
240
|
prefix = (prefix.match("/$") ? prefix : "" + prefix + "/");
|
@@ -225,6 +244,7 @@
|
|
225
244
|
_classToTypeCache: null,
|
226
245
|
_classToType: function() {
|
227
246
|
var name, _i, _len, _ref;
|
247
|
+
|
228
248
|
if (this._classToTypeCache != null) {
|
229
249
|
return this._classToTypeCache;
|
230
250
|
}
|
@@ -238,6 +258,7 @@
|
|
238
258
|
},
|
239
259
|
get_object_type: function(obj) {
|
240
260
|
var strType;
|
261
|
+
|
241
262
|
if (window.jQuery && (window.jQuery.type != null)) {
|
242
263
|
return window.jQuery.type(obj);
|
243
264
|
}
|
@@ -246,6 +267,7 @@
|
|
246
267
|
},
|
247
268
|
namespace: function(root, namespaceString) {
|
248
269
|
var current, parts;
|
270
|
+
|
249
271
|
parts = (namespaceString ? namespaceString.split(".") : []);
|
250
272
|
if (!parts.length) {
|
251
273
|
return;
|
data/lib/routes.js.coffee
CHANGED
@@ -36,7 +36,7 @@ Utils =
|
|
36
36
|
clean_path: (path) ->
|
37
37
|
path = path.split("://")
|
38
38
|
last_index = path.length - 1
|
39
|
-
path[last_index] = path[last_index].replace(/\/+/g, "/")
|
39
|
+
path[last_index] = path[last_index].replace(/\/+/g, "/")
|
40
40
|
path.join "://"
|
41
41
|
|
42
42
|
set_default_url_options: (optional_parts, options) ->
|
@@ -52,10 +52,17 @@ Utils =
|
|
52
52
|
anchor
|
53
53
|
|
54
54
|
extract_options: (number_of_params, args) ->
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
55
|
+
last_argument = args[args.length - 1]
|
56
|
+
type = @get_object_type(last_argument)
|
57
|
+
if args.length > number_of_params or (type == "object" and !@look_like_serialized_model(last_argument))
|
58
|
+
args.pop()
|
59
|
+
else
|
60
|
+
{}
|
61
|
+
|
62
|
+
look_like_serialized_model: (object) ->
|
63
|
+
# consider object a model if it have a path identifier properties like id and to_param
|
64
|
+
"id" of object or "to_param" of object
|
65
|
+
|
59
66
|
|
60
67
|
path_identifier: (object) ->
|
61
68
|
return "0" if object is 0
|
@@ -75,7 +82,9 @@ Utils =
|
|
75
82
|
|
76
83
|
prepare_parameters: (required_parameters, actual_parameters, options) ->
|
77
84
|
result = @clone(options) or {}
|
78
|
-
|
85
|
+
for val, i in required_parameters
|
86
|
+
if i < actual_parameters.length
|
87
|
+
result[val] = actual_parameters[i]
|
79
88
|
result
|
80
89
|
|
81
90
|
build_path: (required_parameters, optional_parts, route, args) ->
|
@@ -42,12 +42,17 @@ describe JsRoutes, "compatibility with Rails" do
|
|
42
42
|
expect(evaljs("Routes.inbox_path(1, {expanded: true, anchor: 'hello'})")).to eq(routes.inbox_path(1, :expanded => true, :anchor => "hello"))
|
43
43
|
end
|
44
44
|
|
45
|
-
|
46
|
-
|
47
|
-
|
45
|
+
context "with rails engines" do
|
46
|
+
it "should support simple route" do
|
47
|
+
expect(evaljs("Routes.blog_app_posts_path()")).to eq(blog_routes.posts_path())
|
48
|
+
end
|
48
49
|
|
49
|
-
|
50
|
-
|
50
|
+
it "should support route with parameters" do
|
51
|
+
expect(evaljs("Routes.blog_app_post_path(1)")).to eq(blog_routes.post_path(1))
|
52
|
+
end
|
53
|
+
it "should support root path" do
|
54
|
+
expect(evaljs("Routes.blog_app_root_path()")).to eq(blog_routes.root_path)
|
55
|
+
end
|
51
56
|
end
|
52
57
|
|
53
58
|
it "shouldn't require the format" do
|
@@ -115,6 +120,10 @@ describe JsRoutes, "compatibility with Rails" do
|
|
115
120
|
it "should support routes globbing in book_title route as array with optional params" do
|
116
121
|
expect(evaljs("Routes.book_title_path('john', ['thrillers', 'comedian'], {some_key: 'some_value'})")).to eq(routes.book_title_path('john', ['thrillers', 'comedian'], {:some_key => 'some_value'}))
|
117
122
|
end
|
123
|
+
|
124
|
+
it "should support required paramters given as options hash" do
|
125
|
+
expect(evaljs("Routes.search_path({q: 'hello'})")).to eq(routes.search_path(:q => 'hello'))
|
126
|
+
end
|
118
127
|
end
|
119
128
|
|
120
129
|
context "when jQuery is present" do
|
data/spec/spec_helper.rb
CHANGED
@@ -58,6 +58,7 @@ end
|
|
58
58
|
def draw_routes
|
59
59
|
|
60
60
|
BlogEngine::Engine.routes.draw do
|
61
|
+
root to: "application#index"
|
61
62
|
resources :posts
|
62
63
|
end
|
63
64
|
App.routes.draw do
|
@@ -94,6 +95,8 @@ def draw_routes
|
|
94
95
|
get '/json_only' => "foo#foo", :format => true, :constraints => {:format => /json/}, :as => :json_only
|
95
96
|
|
96
97
|
get '/привет' => "foo#foo", :as => :hello
|
98
|
+
get '(/o/:organization)/search/:q' => "foo#foo", as: :search
|
99
|
+
|
97
100
|
end
|
98
101
|
|
99
102
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: js-routes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -188,7 +188,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
188
188
|
version: '0'
|
189
189
|
segments:
|
190
190
|
- 0
|
191
|
-
hash:
|
191
|
+
hash: 2369940964485562575
|
192
192
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
193
193
|
none: false
|
194
194
|
requirements:
|