js-routes 1.1.0 → 1.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d01616a12162f3955743143d09ce4e4e0297284a
4
- data.tar.gz: b515223e7fa4122852861fbe5e6cddbe927aadec
3
+ metadata.gz: 7f0198d8ff6f861e2cee2326141e2bb1cbfd974c
4
+ data.tar.gz: 1052236ee191127a860aae5a71d22a1b0c7b8613
5
5
  SHA512:
6
- metadata.gz: 847807d48bf2c431609b98eeb940d0c8da008bbebf8a04d5c857b02aeab54e9c3648c3d7039bfcdc508a367ae05be86d77db153950270ccce0f68461d7a30ad7
7
- data.tar.gz: d72dc26e1a9a7ac2cfeb1795cad81567a7a3885ed9ad9f6e6f9121cf444fa2371a77da7cd2505994010e9f0521be78a55033f9bd9ec1858a871d42545646ba93
6
+ metadata.gz: 6894424f650a910ba90b4a8ff1700bf564b320cfe7d124dfe3026a67c988d07ce06e745f8861de83e6c1add80a5bb71a91ecfa329e6523cfff13a344873253d2
7
+ data.tar.gz: af3bd894e3936bc2cf1621e0f4b19980887df8d8a3ee3dab99949290328d02ab70b845ea2e09021df951c299ce0d26110e9309fd7bb017497b8702b3574ab52c
@@ -1,3 +1,3 @@
1
1
  class JsRoutes
2
- VERSION = "1.1.0"
2
+ VERSION = "1.1.1"
3
3
  end
data/lib/routes.js CHANGED
@@ -1,12 +1,11 @@
1
1
  /*
2
2
  File generated by js-routes GEM_VERSION
3
3
  Based on Rails routes of APP_CLASS
4
- */
5
-
4
+ */
6
5
 
7
6
  (function() {
8
7
  var NodeTypes, ParameterMissing, Utils, createGlobalJsRoutesObject, defaults, root,
9
- __hasProp = {}.hasOwnProperty;
8
+ hasProp = {}.hasOwnProperty;
10
9
 
11
10
  root = typeof exports !== "undefined" && exports !== null ? exports : this;
12
11
 
@@ -25,12 +24,11 @@ Based on Rails routes of APP_CLASS
25
24
 
26
25
  Utils = {
27
26
  default_serializer: function(object, prefix) {
28
- var element, i, key, prop, s, _i, _len;
29
-
27
+ var element, i, j, key, len, prop, s;
30
28
  if (prefix == null) {
31
29
  prefix = null;
32
30
  }
33
- if (!object) {
31
+ if (object == null) {
34
32
  return "";
35
33
  }
36
34
  if (!prefix && !(this.get_object_type(object) === "object")) {
@@ -39,27 +37,27 @@ Based on Rails routes of APP_CLASS
39
37
  s = [];
40
38
  switch (this.get_object_type(object)) {
41
39
  case "array":
42
- for (i = _i = 0, _len = object.length; _i < _len; i = ++_i) {
40
+ for (i = j = 0, len = object.length; j < len; i = ++j) {
43
41
  element = object[i];
44
42
  s.push(this.default_serializer(element, prefix + "[]"));
45
43
  }
46
44
  break;
47
45
  case "object":
48
46
  for (key in object) {
49
- if (!__hasProp.call(object, key)) continue;
47
+ if (!hasProp.call(object, key)) continue;
50
48
  prop = object[key];
51
49
  if (!(prop != null)) {
52
50
  continue;
53
51
  }
54
52
  if (prefix != null) {
55
- key = "" + prefix + "[" + key + "]";
53
+ key = prefix + "[" + key + "]";
56
54
  }
57
55
  s.push(this.default_serializer(prop, key));
58
56
  }
59
57
  break;
60
58
  default:
61
- if (object) {
62
- s.push("" + (encodeURIComponent(prefix.toString())) + "=" + (encodeURIComponent(object.toString())));
59
+ if (object != null) {
60
+ s.push((encodeURIComponent(prefix.toString())) + "=" + (encodeURIComponent(object.toString())));
63
61
  }
64
62
  }
65
63
  if (!s.length) {
@@ -67,39 +65,34 @@ Based on Rails routes of APP_CLASS
67
65
  }
68
66
  return s.join("&");
69
67
  },
68
+ custom_serializer: SERIALIZER,
70
69
  serialize: function(object) {
71
- var custom_serializer;
72
-
73
- custom_serializer = SERIALIZER;
74
- if (custom_serializer) {
75
- return custom_serializer(object);
70
+ if ((this.custom_serializer != null) && this.get_object_type(this.custom_serializer) === "function") {
71
+ return this.custom_serializer(object);
76
72
  } else {
77
73
  return this.default_serializer(object);
78
74
  }
79
75
  },
80
76
  clean_path: function(path) {
81
77
  var last_index;
82
-
83
78
  path = path.split("://");
84
79
  last_index = path.length - 1;
85
80
  path[last_index] = path[last_index].replace(/\/+/g, "/");
86
81
  return path.join("://");
87
82
  },
88
83
  set_default_url_options: function(optional_parts, options) {
89
- var i, part, _i, _len, _results;
90
-
91
- _results = [];
92
- for (i = _i = 0, _len = optional_parts.length; _i < _len; i = ++_i) {
84
+ var i, j, len, part, results;
85
+ results = [];
86
+ for (i = j = 0, len = optional_parts.length; j < len; i = ++j) {
93
87
  part = optional_parts[i];
94
88
  if (!options.hasOwnProperty(part) && defaults.default_url_options.hasOwnProperty(part)) {
95
- _results.push(options[part] = defaults.default_url_options[part]);
89
+ results.push(options[part] = defaults.default_url_options[part]);
96
90
  }
97
91
  }
98
- return _results;
92
+ return results;
99
93
  },
100
94
  extract_anchor: function(options) {
101
95
  var anchor;
102
-
103
96
  anchor = "";
104
97
  if (options.hasOwnProperty("anchor")) {
105
98
  anchor = "#" + options.anchor;
@@ -109,7 +102,6 @@ Based on Rails routes of APP_CLASS
109
102
  },
110
103
  extract_trailing_slash: function(options) {
111
104
  var trailing_slash;
112
-
113
105
  trailing_slash = false;
114
106
  if (defaults.default_url_options.hasOwnProperty("trailing_slash")) {
115
107
  trailing_slash = defaults.default_url_options.trailing_slash;
@@ -122,7 +114,6 @@ Based on Rails routes of APP_CLASS
122
114
  },
123
115
  extract_options: function(number_of_params, args) {
124
116
  var last_el;
125
-
126
117
  last_el = args[args.length - 1];
127
118
  if (args.length > number_of_params || ((last_el != null) && "object" === this.get_object_type(last_el) && !this.look_like_serialized_model(last_el))) {
128
119
  return args.pop();
@@ -135,7 +126,6 @@ Based on Rails routes of APP_CLASS
135
126
  },
136
127
  path_identifier: function(object) {
137
128
  var property;
138
-
139
129
  if (object === 0) {
140
130
  return "0";
141
131
  }
@@ -159,23 +149,21 @@ Based on Rails routes of APP_CLASS
159
149
  },
160
150
  clone: function(obj) {
161
151
  var attr, copy, key;
162
-
163
152
  if ((obj == null) || "object" !== this.get_object_type(obj)) {
164
153
  return obj;
165
154
  }
166
155
  copy = obj.constructor();
167
156
  for (key in obj) {
168
- if (!__hasProp.call(obj, key)) continue;
157
+ if (!hasProp.call(obj, key)) continue;
169
158
  attr = obj[key];
170
159
  copy[key] = attr;
171
160
  }
172
161
  return copy;
173
162
  },
174
163
  prepare_parameters: function(required_parameters, actual_parameters, options) {
175
- var i, result, val, _i, _len;
176
-
164
+ var i, j, len, result, val;
177
165
  result = this.clone(options) || {};
178
- for (i = _i = 0, _len = required_parameters.length; _i < _len; i = ++_i) {
166
+ for (i = j = 0, len = required_parameters.length; j < len; i = ++j) {
179
167
  val = required_parameters[i];
180
168
  if (i < actual_parameters.length) {
181
169
  result[val] = actual_parameters[i];
@@ -185,7 +173,6 @@ Based on Rails routes of APP_CLASS
185
173
  },
186
174
  build_path: function(required_parameters, optional_parts, route, args) {
187
175
  var anchor, opts, parameters, result, trailing_slash, url, url_params;
188
-
189
176
  args = Array.prototype.slice.call(args);
190
177
  opts = this.extract_options(required_parameters.length, args);
191
178
  if (args.length > required_parameters.length) {
@@ -208,7 +195,6 @@ Based on Rails routes of APP_CLASS
208
195
  },
209
196
  visit: function(route, parameters, optional) {
210
197
  var left, left_part, right, right_part, type, value;
211
-
212
198
  if (optional == null) {
213
199
  optional = false;
214
200
  }
@@ -247,7 +233,6 @@ Based on Rails routes of APP_CLASS
247
233
  },
248
234
  build_path_spec: function(route, wildcard) {
249
235
  var left, right, type;
250
-
251
236
  if (wildcard == null) {
252
237
  wildcard = false;
253
238
  }
@@ -276,7 +261,6 @@ Based on Rails routes of APP_CLASS
276
261
  },
277
262
  visit_globbing: function(route, parameters, optional) {
278
263
  var left, right, type, value;
279
-
280
264
  type = route[0], left = route[1], right = route[2];
281
265
  if (left.replace(/^\*/i, "") !== left) {
282
266
  route[1] = left = left.replace(/^\*/i, "");
@@ -297,16 +281,14 @@ Based on Rails routes of APP_CLASS
297
281
  },
298
282
  get_prefix: function() {
299
283
  var prefix;
300
-
301
284
  prefix = defaults.prefix;
302
285
  if (prefix !== "") {
303
- prefix = (prefix.match("/$") ? prefix : "" + prefix + "/");
286
+ prefix = (prefix.match("/$") ? prefix : prefix + "/");
304
287
  }
305
288
  return prefix;
306
289
  },
307
290
  route: function(required_parts, optional_parts, route_spec) {
308
291
  var path_fn;
309
-
310
292
  path_fn = function() {
311
293
  return Utils.build_path(required_parts, optional_parts, route_spec, arguments);
312
294
  };
@@ -318,15 +300,14 @@ Based on Rails routes of APP_CLASS
318
300
  },
319
301
  _classToTypeCache: null,
320
302
  _classToType: function() {
321
- var name, _i, _len, _ref;
322
-
303
+ var j, len, name, ref;
323
304
  if (this._classToTypeCache != null) {
324
305
  return this._classToTypeCache;
325
306
  }
326
307
  this._classToTypeCache = {};
327
- _ref = "Boolean Number String Function Array Date RegExp Object Error".split(" ");
328
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
329
- name = _ref[_i];
308
+ ref = "Boolean Number String Function Array Date RegExp Object Error".split(" ");
309
+ for (j = 0, len = ref.length; j < len; j++) {
310
+ name = ref[j];
330
311
  this._classToTypeCache["[object " + name + "]"] = name.toLowerCase();
331
312
  }
332
313
  return this._classToTypeCache;
@@ -348,10 +329,8 @@ Based on Rails routes of APP_CLASS
348
329
 
349
330
  createGlobalJsRoutesObject = function() {
350
331
  var namespace;
351
-
352
332
  namespace = function(mainRoot, namespaceString) {
353
333
  var current, parts;
354
-
355
334
  parts = (namespaceString ? namespaceString.split(".") : []);
356
335
  if (!parts.length) {
357
336
  return;
data/lib/routes.js.coffee CHANGED
@@ -16,7 +16,7 @@ NodeTypes = NODE_TYPES
16
16
  Utils =
17
17
 
18
18
  default_serializer: (object, prefix = null) ->
19
- return "" unless object
19
+ return "" unless object?
20
20
  if !prefix and !(@get_object_type(object) is "object")
21
21
  throw new Error("Url parameters should be a javascript hash")
22
22
 
@@ -30,16 +30,16 @@ Utils =
30
30
  key = "#{prefix}[#{key}]" if prefix?
31
31
  s.push @default_serializer(prop, key)
32
32
  else
33
- if object
33
+ if object?
34
34
  s.push "#{encodeURIComponent(prefix.toString())}=#{encodeURIComponent(object.toString())}"
35
35
 
36
36
  return "" unless s.length
37
37
  s.join("&")
38
38
 
39
+ custom_serializer: SERIALIZER
39
40
  serialize: (object) ->
40
- custom_serializer = SERIALIZER
41
- if custom_serializer
42
- custom_serializer(object)
41
+ if @custom_serializer? and @get_object_type(@custom_serializer) is "function"
42
+ @custom_serializer(object)
43
43
  else
44
44
  @default_serializer(object)
45
45
 
@@ -5,8 +5,8 @@ describe JsRoutes, "#default_serializer" do
5
5
  end
6
6
 
7
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"
8
+ expect(evaljs("Routes.default_serializer({a: 1, b: [2,3], c: {d: 4, e: 5}, f: ''})")).to eq(
9
+ "a=1&b%5B%5D=2&b%5B%5D=3&c%5Bd%5D=4&c%5Be%5D=5&f="
10
10
  )
11
11
  end
12
12
 
@@ -11,7 +11,7 @@ describe JsRoutes do
11
11
  subject { JsRoutes.generate }
12
12
 
13
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+},))
14
+ is_expected.to match(%r(custom_serializer: null,\s+serialize: function\(object\) {\s+if \(\(this\.custom_serializer != null\) && this.get_object_type\(this\.custom_serializer\) === \"function\"\) {\s+return this\.custom_serializer\(object\);\s+} else {\s+return this\.default_serializer\(object\);\s+}\s+},))
15
15
  end
16
16
 
17
17
  it "should include a comment in the header" do
@@ -14,20 +14,29 @@ describe JsRoutes, "options" do
14
14
  let(:_warnings) { true }
15
15
 
16
16
  context "when serializer is specified" do
17
+ # define custom serializer
18
+ # this is a nonsense serializer, which always returns foo=bar
19
+ # for all inputs
20
+ let(:_presetup){ %q(function myCustomSerializer(object, prefix) { return "foo=bar"; }) }
17
21
  let(:_options) { {:serializer => "myCustomSerializer"} }
18
22
 
19
23
  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
24
  # expect the nonsense serializer above to have appened foo=bar
26
25
  # to the end of the path
27
26
  expect(evaljs(%q(Routes.inboxes_path()))).to eql("/inboxes?foo=bar")
28
27
  end
29
28
  end
30
29
 
30
+ context "when serializer is specified, but not function" do
31
+ let(:_presetup){ %q(var myCustomSerializer = 1) }
32
+ let(:_options) { {:serializer => "myCustomSerializer"} }
33
+
34
+ it "should set configurable serializer" do
35
+ # expect to use default
36
+ expect(evaljs(%q(Routes.inboxes_path({a: 1})))).to eql("/inboxes?a=1")
37
+ end
38
+ end
39
+
31
40
  context "when exclude is specified" do
32
41
 
33
42
  let(:_options) { {:exclude => /^admin_/} }
@@ -74,6 +74,10 @@ describe JsRoutes, "compatibility with Rails" do
74
74
  expect(evaljs("Routes.json_only_path({format: 'json'})")).to eq(routes.json_only_path(:format => 'json'))
75
75
  end
76
76
 
77
+ it "should serialize object with empty string value" do
78
+ expect(evaljs("Routes.inboxes_path({a: '', b: 1})")).to eq(routes.inboxes_path(:a => '', :b => 1))
79
+ end
80
+
77
81
  it "should support utf-8 route" do
78
82
  expect(evaljs("Routes.hello_path()")).to eq(routes.hello_path)
79
83
  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.1.0
4
+ version: 1.1.1
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-08-05 00:00:00.000000000 Z
11
+ date: 2015-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties