js-routes 0.8.6 → 0.8.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.
data/Readme.md CHANGED
@@ -42,22 +42,30 @@ end
42
42
 
43
43
  Available options:
44
44
 
45
- * `default_format` - Format to append to urls. Default: blank
46
- * `exclude` - Array of regexps to exclude from js routes. Default: []
45
+ * `default_url_options` - default parameters to be used to generate url
46
+ * Note that currently only optional parameters (like `:format`) can be defaulted.
47
+ * Example: {:format => "json"}
48
+ * Default: {}
49
+ * `exclude` - Array of regexps to exclude from js routes.
47
50
  * Note that regexp applied to **named route** not to *URL*
48
- * `include` - Array of regexps to include in js routes. Default: []
51
+ * Default: []
52
+ * `include` - Array of regexps to include in js routes.
49
53
  * Note that regexp applied to **named route** not to *URL*
50
- * `namespace` - global object used to access routes. Default: `Routes`
54
+ * Default: []
55
+ * `namespace` - global object used to access routes.
51
56
  * Supports nested namespace like `MyProject.routes`
52
- * `prefix` - String representing a url path to prepend to all paths. Default: blank
57
+ * Default: `Routes`
58
+ * `prefix` - String representing a url path to prepend to all paths.
53
59
  * Example: `http://yourdomain.com`. This will cause route helpers to generate full path only.
60
+ * Default: blank
54
61
 
55
62
 
56
63
  You can generate routes files on the application side like this:
57
64
 
58
65
  ``` ruby
59
- JsRoutes.generate!("#{path}/app_routes.js", :namespace => "AppRoutes", :exclude => /^admin_/, :default_format => "json")
60
- JsRoutes.generate!("#{path}/adm_routes.js", :namespace => "AdmRoutes", :include => /^admin_/, :default_format => "json")
66
+ JsRoutes.generate!("#{path}/app_routes.js", :namespace => "AppRoutes", :exclude => [/^admin_/, /^api_/])
67
+ JsRoutes.generate!("#{path}/adm_routes.js", :namespace => "AdmRoutes", :include => /^admin_/)
68
+ JsRoutes.generate!("#{path}/api_routes.js", :namespace => "ApiRoutes", :include => /^api_/, :default_url_options => {:format => "json"})
61
69
  ```
62
70
 
63
71
  In order to generate javascript to string and manipulate them yourself use:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.6
1
+ 0.8.7
data/js-routes.gemspec CHANGED
@@ -4,14 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = "js-routes"
8
- s.version = "0.8.6"
7
+ s.name = %q{js-routes}
8
+ s.version = "0.8.7"
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-24"
13
- s.description = "Generates javascript file that defines all Rails named routes as javascript helpers"
14
- s.email = "agresso@gmail.com"
12
+ s.date = %q{2013-02-13}
13
+ s.description = %q{Generates javascript file that defines all Rails named routes as javascript helpers}
14
+ s.email = %q{agresso@gmail.com}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE.txt"
17
17
  ]
@@ -38,11 +38,11 @@ Gem::Specification.new do |s|
38
38
  "spec/js_routes/rails_routes_compatibility_spec.rb",
39
39
  "spec/spec_helper.rb"
40
40
  ]
41
- s.homepage = "http://github.com/railsware/js-routes"
41
+ s.homepage = %q{http://github.com/railsware/js-routes}
42
42
  s.licenses = ["MIT"]
43
43
  s.require_paths = ["lib"]
44
- s.rubygems_version = "1.8.24"
45
- s.summary = "Brings Rails named routes to javascript"
44
+ s.rubygems_version = %q{1.6.0}
45
+ s.summary = %q{Brings Rails named routes to javascript}
46
46
 
47
47
  if s.respond_to? :specification_version then
48
48
  s.specification_version = 3
data/lib/js_routes.rb CHANGED
@@ -8,11 +8,11 @@ class JsRoutes
8
8
 
9
9
  DEFAULTS = {
10
10
  :namespace => "Routes",
11
- :default_format => "",
12
11
  :exclude => [],
13
12
  :include => //,
14
13
  :file => DEFAULT_PATH,
15
- :prefix => ""
14
+ :prefix => "",
15
+ :default_url_options => {}
16
16
  }
17
17
 
18
18
  # We encode node symbols as integer to reduce the routes.js file size
@@ -86,12 +86,21 @@ class JsRoutes
86
86
  def generate
87
87
  js = File.read(File.dirname(__FILE__) + "/routes.js")
88
88
  js.gsub!("NAMESPACE", @options[:namespace])
89
- js.gsub!("DEFAULT_FORMAT", @options[:default_format].to_s)
89
+ js.gsub!("DEFAULT_URL_OPTIONS", json(@options[:default_url_options].merge(deprecated_default_format)))
90
90
  js.gsub!("PREFIX", @options[:prefix])
91
91
  js.gsub!("NODE_TYPES", json(NODE_TYPES))
92
92
  js.gsub!("ROUTES", js_routes)
93
93
  end
94
94
 
95
+ def deprecated_default_format
96
+ if @options.key?(:default_format)
97
+ warn("default_format option is deprecated. Use default_url_options = {:format => <format>} instead")
98
+ {:format => @options[:default_format]}
99
+ else
100
+ {}
101
+ end
102
+ end
103
+
95
104
  def generate!(file_name = nil)
96
105
  # Some libraries like Devise do not yet loaded their routes so we will wait
97
106
  # until initialization process finish
data/lib/routes.js CHANGED
@@ -7,10 +7,10 @@
7
7
 
8
8
  var defaults = {
9
9
  prefix: 'PREFIX',
10
- format: 'DEFAULT_FORMAT'
10
+ default_url_options: DEFAULT_URL_OPTIONS
11
11
  };
12
12
 
13
- var NodeTypes = NODE_TYPES
13
+ var NodeTypes = NODE_TYPES;
14
14
 
15
15
  var Utils = {
16
16
 
@@ -46,8 +46,13 @@
46
46
  return path.join("://");
47
47
  },
48
48
 
49
- set_default_format: function(options) {
50
- if (!options.hasOwnProperty("format") && defaults.format) options.format = defaults.format;
49
+ set_default_url_options: function(optional_parts, options) {
50
+ for (var i=0;i < optional_parts.length; i++) {
51
+ var part = optional_parts[i];
52
+ if (!options.hasOwnProperty(part) && defaults.default_url_options.hasOwnProperty(part)) {
53
+ options[part] = defaults.default_url_options[part];
54
+ }
55
+ }
51
56
  },
52
57
 
53
58
  extract_anchor: function(options) {
@@ -66,11 +71,11 @@
66
71
 
67
72
  path_identifier: function(object) {
68
73
  if (object === 0) {
69
- return '0';
74
+ return '0';
70
75
  }
71
76
 
72
77
  if (! object) { // null, undefined, false or ''
73
- return '';
78
+ return '';
74
79
  }
75
80
 
76
81
  if (typeof(object) == "object") {
@@ -101,12 +106,6 @@
101
106
  return result;
102
107
  },
103
108
 
104
- smartIndexOf: function(array, item){
105
- if (Array.prototype.indexOf && array.indexOf === Array.prototype.indexOf) return array.indexOf(item);
106
- for (var i = 0; i < array.length; i++) if (i in array && array[i] === item) return i;
107
- return -1;
108
- },
109
-
110
109
  build_path: function(required_parameters, optional_parts, route, args) {
111
110
  args = Array.prototype.slice.call(args);
112
111
  var opts = this.extract_options(required_parameters.length, args);
@@ -115,10 +114,7 @@
115
114
  }
116
115
 
117
116
  var parameters = this.prepare_parameters(required_parameters, args, opts);
118
- // Array#indexOf is not supported by IE <= 8, so we use custom method
119
- if (Utils.smartIndexOf(optional_parts, 'format') !== -1) {
120
- this.set_default_format(parameters);
121
- }
117
+ this.set_default_url_options(optional_parts, parameters);
122
118
  var result = Utils.get_prefix();
123
119
  var anchor = Utils.extract_anchor(parameters);
124
120
 
@@ -129,24 +125,26 @@
129
125
  /*
130
126
  * This function is JavaScript impelementation of the
131
127
  * Journey::Visitors::Formatter that builds route by given parameters
132
- * and parsed route binary tree.
128
+ * from route binary tree.
133
129
  * Binary tree is serialized in the following way:
134
130
  * [node type, left node, right node ]
135
131
  *
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).
132
+ * @param {Boolean} optional Marks the currently visited branch as optional.
133
+ * If set to `true`, this method will not throw when encountering
134
+ * a missing parameter (used in recursive calls).
137
135
  */
138
- visit: function(route, options, optional) {
136
+ visit: function(route, parameters, optional) {
139
137
  var type = route[0];
140
138
  var left = route[1];
141
139
  var right = route[2];
142
140
  switch (type) {
143
141
  case NodeTypes.GROUP:
144
- return this.visit(left, options, true)
142
+ return this.visit(left, parameters, true)
145
143
  case NodeTypes.STAR:
146
- return this.visit(left, options, true)
144
+ return this.visit(left, parameters, true)
147
145
  case NodeTypes.CAT:
148
- var leftPart = this.visit(left, options, optional),
149
- rightPart = this.visit(right, options, optional);
146
+ var leftPart = this.visit(left, parameters, optional),
147
+ rightPart = this.visit(right, parameters, optional);
150
148
 
151
149
  if (optional && ! (leftPart && rightPart))
152
150
  return '';
@@ -159,10 +157,10 @@
159
157
  case NodeTypes.DOT:
160
158
  return left;
161
159
  case NodeTypes.SYMBOL:
162
- var value = options[left];
160
+ var value = parameters[left];
163
161
 
164
162
  if (value || value === 0) {
165
- delete options[left];
163
+ delete parameters[left];
166
164
  return this.path_identifier(value);
167
165
  }
168
166
 
@@ -4,11 +4,14 @@ describe JsRoutes, "options" do
4
4
 
5
5
  before(:each) do
6
6
  evaljs(_presetup)
7
- evaljs(JsRoutes.generate(_options))
7
+ with_warnings(_warnings) do
8
+ evaljs(JsRoutes.generate(_options))
9
+ end
8
10
  end
9
11
 
10
12
  let(:_presetup) { "this;" }
11
13
  let(:_options) { {} }
14
+ let(:_warnings) { true }
12
15
 
13
16
  context "when exclude is specified" do
14
17
 
@@ -76,6 +79,7 @@ describe JsRoutes, "options" do
76
79
 
77
80
  context "when default_format is specified" do
78
81
  let(:_options) { {:default_format => "json"} }
82
+ let(:_warnings) { nil }
79
83
 
80
84
  it "should render routing with default_format" do
81
85
  evaljs("Routes.inbox_path(1)").should == routes.inbox_path(1, :format => "json")
@@ -131,4 +135,21 @@ describe JsRoutes, "options" do
131
135
  end
132
136
  end
133
137
  end
138
+
139
+ describe "default_url_options" do
140
+ context "with optional route parts" do
141
+ let(:_options) { {:default_url_options => {:optional_id => "12", :format => "json"}}}
142
+ it "should use this opions to fill optional parameters" do
143
+ evaljs("Routes.things_path()").should == routes.things_path(:optional_id => 12, :format => "json")
144
+ end
145
+ end
146
+
147
+ context "with required route parts" do
148
+ let(:_options) { {:default_url_options => {:inbox_id => "12"}} }
149
+ it "should use this opions to fill optional parameters" do
150
+ pending
151
+ evaljs("Routes.inbox_messages_path()").should == routes.inbox_messages_path(:inbox_id => 12)
152
+ end
153
+ end
154
+ end
134
155
  end
data/spec/spec_helper.rb CHANGED
@@ -92,6 +92,7 @@ RSpec.configure do |config|
92
92
  evaljs("var window = this;")
93
93
  jscontext[:cgi] = CGI
94
94
  evaljs("function encodeURIComponent(string) {return cgi.escape(string);}")
95
+ jscontext[:log] = lambda {|arg| puts arg.inspect}
95
96
  end
96
97
  config.before(:all) do
97
98
  draw_routes
metadata CHANGED
@@ -1,104 +1,109 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: js-routes
3
- version: !ruby/object:Gem::Version
4
- version: 0.8.6
3
+ version: !ruby/object:Gem::Version
4
+ hash: 49
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 8
9
+ - 7
10
+ version: 0.8.7
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Bogdan Gusiev
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2013-01-24 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: rails
16
- requirement: !ruby/object:Gem::Requirement
17
+
18
+ date: 2013-02-13 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ requirement: &id001 !ruby/object:Gem::Requirement
17
23
  none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '3.2'
22
- type: :runtime
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ hash: 3
28
+ segments:
29
+ - 3
30
+ - 2
31
+ version: "3.2"
32
+ version_requirements: *id001
23
33
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
34
+ name: rails
35
+ type: :runtime
36
+ - !ruby/object:Gem::Dependency
37
+ requirement: &id002 !ruby/object:Gem::Requirement
25
38
  none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '3.2'
30
- - !ruby/object:Gem::Dependency
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ version_requirements: *id002
47
+ prerelease: false
31
48
  name: therubyracer
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
49
  type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
50
+ - !ruby/object:Gem::Dependency
51
+ requirement: &id003 !ruby/object:Gem::Requirement
41
52
  none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: rspec
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
53
+ requirements:
51
54
  - - ~>
52
- - !ruby/object:Gem::Version
55
+ - !ruby/object:Gem::Version
56
+ hash: 39
57
+ segments:
58
+ - 2
59
+ - 10
60
+ - 0
53
61
  version: 2.10.0
54
- type: :development
62
+ version_requirements: *id003
55
63
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: 2.10.0
62
- - !ruby/object:Gem::Dependency
63
- name: bundler
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ~>
68
- - !ruby/object:Gem::Version
69
- version: 1.1.0
64
+ name: rspec
70
65
  type: :development
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
66
+ - !ruby/object:Gem::Dependency
67
+ requirement: &id004 !ruby/object:Gem::Requirement
73
68
  none: false
74
- requirements:
69
+ requirements:
75
70
  - - ~>
76
- - !ruby/object:Gem::Version
71
+ - !ruby/object:Gem::Version
72
+ hash: 19
73
+ segments:
74
+ - 1
75
+ - 1
76
+ - 0
77
77
  version: 1.1.0
78
- - !ruby/object:Gem::Dependency
79
- name: jeweler
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ~>
84
- - !ruby/object:Gem::Version
85
- version: 1.6.2
86
- type: :development
78
+ version_requirements: *id004
87
79
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
80
+ name: bundler
81
+ type: :development
82
+ - !ruby/object:Gem::Dependency
83
+ requirement: &id005 !ruby/object:Gem::Requirement
89
84
  none: false
90
- requirements:
85
+ requirements:
91
86
  - - ~>
92
- - !ruby/object:Gem::Version
87
+ - !ruby/object:Gem::Version
88
+ hash: 11
89
+ segments:
90
+ - 1
91
+ - 6
92
+ - 2
93
93
  version: 1.6.2
94
- description: Generates javascript file that defines all Rails named routes as javascript
95
- helpers
94
+ version_requirements: *id005
95
+ prerelease: false
96
+ name: jeweler
97
+ type: :development
98
+ description: Generates javascript file that defines all Rails named routes as javascript helpers
96
99
  email: agresso@gmail.com
97
100
  executables: []
101
+
98
102
  extensions: []
99
- extra_rdoc_files:
103
+
104
+ extra_rdoc_files:
100
105
  - LICENSE.txt
101
- files:
106
+ files:
102
107
  - .document
103
108
  - .rspec
104
109
  - .travis.yml
@@ -120,32 +125,39 @@ files:
120
125
  - spec/js_routes/post_rails_init_spec.rb
121
126
  - spec/js_routes/rails_routes_compatibility_spec.rb
122
127
  - spec/spec_helper.rb
128
+ has_rdoc: true
123
129
  homepage: http://github.com/railsware/js-routes
124
- licenses:
130
+ licenses:
125
131
  - MIT
126
132
  post_install_message:
127
133
  rdoc_options: []
128
- require_paths:
134
+
135
+ require_paths:
129
136
  - lib
130
- required_ruby_version: !ruby/object:Gem::Requirement
137
+ required_ruby_version: !ruby/object:Gem::Requirement
131
138
  none: false
132
- requirements:
133
- - - ! '>='
134
- - !ruby/object:Gem::Version
135
- version: '0'
136
- segments:
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ hash: 3
143
+ segments:
137
144
  - 0
138
- hash: -2317376881540244004
139
- required_rubygems_version: !ruby/object:Gem::Requirement
145
+ version: "0"
146
+ required_rubygems_version: !ruby/object:Gem::Requirement
140
147
  none: false
141
- requirements:
142
- - - ! '>='
143
- - !ruby/object:Gem::Version
144
- version: '0'
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ hash: 3
152
+ segments:
153
+ - 0
154
+ version: "0"
145
155
  requirements: []
156
+
146
157
  rubyforge_project:
147
- rubygems_version: 1.8.24
158
+ rubygems_version: 1.6.0
148
159
  signing_key:
149
160
  specification_version: 3
150
161
  summary: Brings Rails named routes to javascript
151
162
  test_files: []
163
+