js-routes 0.8.5 → 0.8.6

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -13,7 +13,6 @@ require 'rake'
13
13
 
14
14
  require 'jeweler'
15
15
  Jeweler::Tasks.new do |gem|
16
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
16
  gem.name = "js-routes"
18
17
  gem.homepage = "http://github.com/railsware/js-routes"
19
18
  gem.license = "MIT"
data/Readme.md CHANGED
@@ -20,7 +20,19 @@ Require js routes file in `application.js` or other bundle
20
20
  */
21
21
  ```
22
22
 
23
- **Optional**: If you need to customize routes file create initializer, like `config/initializers/jsroutes.rb`:
23
+ Also in order to flush asset pipeline cache sometimes you might need to run:
24
+
25
+ ``` sh
26
+ rake tmp:cache:clear
27
+ ```
28
+
29
+ This cache is not flushed on server restart in development environment.
30
+
31
+ **Important:** If routes.js file is not updated after some configuration change you need to run this command again.
32
+
33
+ ### Advanced Setup
34
+
35
+ If you need to customize routes file create initializer, like `config/initializers/jsroutes.rb`:
24
36
 
25
37
  ``` ruby
26
38
  JsRoutes.setup do |config|
@@ -41,8 +53,6 @@ Available options:
41
53
  * Example: `http://yourdomain.com`. This will cause route helpers to generate full path only.
42
54
 
43
55
 
44
- ### Advanced Setup
45
-
46
56
  You can generate routes files on the application side like this:
47
57
 
48
58
  ``` ruby
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.5
1
+ 0.8.6
data/js-routes.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "js-routes"
8
- s.version = "0.8.5"
8
+ s.version = "0.8.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Bogdan Gusiev"]
12
- s.date = "2013-01-04"
12
+ s.date = "2013-01-24"
13
13
  s.description = "Generates javascript file that defines all Rails named routes as javascript helpers"
14
14
  s.email = "agresso@gmail.com"
15
15
  s.extra_rdoc_files = [
data/lib/routes.js CHANGED
@@ -41,7 +41,7 @@
41
41
 
42
42
  clean_path: function(path) {
43
43
  path = path.split("://");
44
- last_index = path.length - 1;
44
+ var last_index = path.length - 1;
45
45
  path[last_index] = path[last_index].replace(/\/+/g, "/").replace(/\/$/m, '');
46
46
  return path.join("://");
47
47
  },
@@ -65,9 +65,14 @@
65
65
  },
66
66
 
67
67
  path_identifier: function(object) {
68
- if (!object) {
69
- return "";
68
+ if (object === 0) {
69
+ return '0';
70
70
  }
71
+
72
+ if (! object) { // null, undefined, false or ''
73
+ return '';
74
+ }
75
+
71
76
  if (typeof(object) == "object") {
72
77
  var property = object.to_param || object.id || object;
73
78
  if (typeof(property) == "function") {
@@ -109,7 +114,7 @@
109
114
  throw new Error("Too many parameters provided for path");
110
115
  }
111
116
 
112
- parameters = this.prepare_parameters(required_parameters, args, opts);
117
+ var parameters = this.prepare_parameters(required_parameters, args, opts);
113
118
  // Array#indexOf is not supported by IE <= 8, so we use custom method
114
119
  if (Utils.smartIndexOf(optional_parts, 'format') !== -1) {
115
120
  this.set_default_format(parameters);
@@ -127,23 +132,42 @@
127
132
  * and parsed route binary tree.
128
133
  * Binary tree is serialized in the following way:
129
134
  * [node type, left node, right node ]
135
+ *
136
+ *@param {Boolean} optional Marks the currently visited branch as optional. If set to `true`, this method will not throw when encountering a missing parameter (used in recursive calls).
130
137
  */
131
- visit: function(route, options) {
138
+ visit: function(route, options, optional) {
132
139
  var type = route[0];
133
140
  var left = route[1];
134
141
  var right = route[2];
135
142
  switch (type) {
136
143
  case NodeTypes.GROUP:
137
- return this.visit_group(left, options)
144
+ return this.visit(left, options, true)
138
145
  case NodeTypes.STAR:
139
- return this.visit_group(left, options)
146
+ return this.visit(left, options, true)
140
147
  case NodeTypes.CAT:
141
- return this.visit(left, options) + this.visit(right, options);
148
+ var leftPart = this.visit(left, options, optional),
149
+ rightPart = this.visit(right, options, optional);
150
+
151
+ if (optional && ! (leftPart && rightPart))
152
+ return '';
153
+
154
+ return leftPart + rightPart;
155
+ case NodeTypes.LITERAL:
156
+ return left;
157
+ case NodeTypes.SLASH:
158
+ return left;
159
+ case NodeTypes.DOT:
160
+ return left;
142
161
  case NodeTypes.SYMBOL:
143
162
  var value = options[left];
144
- if (value) {
163
+
164
+ if (value || value === 0) {
145
165
  delete options[left];
146
- return this.path_identifier(value);
166
+ return this.path_identifier(value);
167
+ }
168
+
169
+ if (optional) {
170
+ return ''; // missing parameter
147
171
  } else {
148
172
  throw new ParameterMissing("Route parameter missing: " + left);
149
173
  }
@@ -152,28 +176,9 @@
152
176
  * Please send your PR if you do
153
177
  */
154
178
  //case NodeTypes.OR:
155
- case NodeTypes.LITERAL:
156
- return left;
157
- case NodeTypes.SLASH:
158
- return left;
159
- case NodeTypes.DOT:
160
- return left;
161
179
  default:
162
180
  throw new Error("Unknown Rails node type");
163
181
  }
164
-
165
- },
166
-
167
- visit_group: function(left, options) {
168
- try {
169
- return this.visit(left, options);
170
- } catch(e) {
171
- if (e instanceof ParameterMissing) {
172
- return "";
173
- } else {
174
- throw e;
175
- }
176
- }
177
182
  },
178
183
 
179
184
  get_prefix: function(){
@@ -15,6 +15,10 @@ describe JsRoutes, "compatibility with Rails" do
15
15
  evaljs("Routes.inbox_path(1)").should == routes.inbox_path(1)
16
16
  end
17
17
 
18
+ it "should support 0 as a member parameter" do
19
+ evaljs("Routes.inbox_path(0)").should == routes.inbox_path(0)
20
+ end
21
+
18
22
  it "should generate nested routing with one parameter" do
19
23
  evaljs("Routes.inbox_messages_path(1)").should == routes.inbox_messages_path(1)
20
24
  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.8.5
4
+ version: 0.8.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-04 00:00:00.000000000 Z
12
+ date: 2013-01-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -135,7 +135,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
135
135
  version: '0'
136
136
  segments:
137
137
  - 0
138
- hash: 2174231102950156016
138
+ hash: -2317376881540244004
139
139
  required_rubygems_version: !ruby/object:Gem::Requirement
140
140
  none: false
141
141
  requirements: