js-routes 0.7.3 → 0.7.4

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/Gemfile.lock CHANGED
@@ -42,7 +42,7 @@ GEM
42
42
  bundler (~> 1.0)
43
43
  git (>= 1.2.5)
44
44
  rake
45
- libv8 (3.3.10.2)
45
+ libv8 (3.3.10.4)
46
46
  mail (2.3.0)
47
47
  i18n (>= 0.4.0)
48
48
  mime-types (~> 1.16)
@@ -89,7 +89,7 @@ GEM
89
89
  hike (~> 1.2)
90
90
  rack (~> 1.0)
91
91
  tilt (~> 1.1, != 1.3.0)
92
- therubyracer (0.9.2)
92
+ therubyracer (0.9.9)
93
93
  libv8 (~> 3.3.10)
94
94
  thor (0.14.6)
95
95
  tilt (1.3.3)
data/Readme.md CHANGED
@@ -57,6 +57,7 @@ Routes.user_path(1) // => "/users/1"
57
57
  Routes.user_path(1, {format: 'json'}) // => "/users/1.json"
58
58
  Routes.new_user_project_path(1, {format: 'json'}) // => "/users/1/projects/new.json"
59
59
  Routes.user_project_path(1,2, {q: 'hello', custom: true}) // => "/users/1/projects/2?q=hello&custom=true"
60
+ Routes.user_project_path(1,2, {hello: ['world', 'mars']}) // => "/users/1/projects/2?hello%5B%5D=world&hello%5B%5D=mars"
60
61
  ```
61
62
 
62
63
  Using serialized object as route function arguments:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.3
1
+ 0.7.4
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.7.3"
7
+ s.name = %q{js-routes}
8
+ s.version = "0.7.4"
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 = "2011-12-22"
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{2012-01-22}
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
  ]
@@ -36,13 +36,14 @@ Gem::Specification.new do |s|
36
36
  "spec/post_rails_init_spec.rb",
37
37
  "spec/spec_helper.rb"
38
38
  ]
39
- s.homepage = "http://github.com/railsware/js-routes"
39
+ s.homepage = %q{http://github.com/railsware/js-routes}
40
40
  s.licenses = ["MIT"]
41
41
  s.require_paths = ["lib"]
42
- s.rubygems_version = "1.8.10"
43
- s.summary = "Brings Rails named routes to javascript"
42
+ s.rubygems_version = %q{1.3.7}
43
+ s.summary = %q{Brings Rails named routes to javascript}
44
44
 
45
45
  if s.respond_to? :specification_version then
46
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
46
47
  s.specification_version = 3
47
48
 
48
49
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
data/lib/js_routes.rb CHANGED
@@ -109,7 +109,7 @@ class JsRoutes
109
109
  def build_js(route)
110
110
  params = build_params route
111
111
  _ = <<-JS.strip!
112
- // #{route.name} => #{route.path}
112
+ // #{route.name} => #{route_spec(route)}
113
113
  #{route.name}_path: function(#{(params + ["options"]).join(", ")}) {
114
114
  return Utils.build_path(#{params.size}, #{path_parts(route).inspect}, #{optional_params(route).inspect}, arguments)
115
115
  }
@@ -119,16 +119,19 @@ class JsRoutes
119
119
  # TODO: might be possible to simplify this to use route.path
120
120
  # instead of all this path_info.source madness
121
121
  def optional_params(route)
122
+ if Rails.version >= "3.2.0"
123
+ return route.optional_parts.map(&:to_s)
124
+ end
125
+ path_info = route.conditions[:path_info]
126
+ path_info_source = path_info.source
122
127
  if RUBY_VERSION >= '1.9.2'
123
128
  optional_named_captures_regexp = /\?\:.+?\(\?\<(.+?)\>/
124
- path_info = route.conditions[:path_info]
125
- path_info.source.scan(optional_named_captures_regexp).flatten
129
+ path_info_source.scan(optional_named_captures_regexp).flatten
126
130
  else
127
131
  re = Regexp.escape("([^/.?]+)")
128
132
  optional_named_captures_regexp = /#{re}|\(\?\:.+?\)\?/
129
- path_info = route.conditions[:path_info]
130
- captures = path_info.source.scan(optional_named_captures_regexp).flatten
131
- named_captures = path_info.named_captures.to_a.sort {|a,b|a.last.first<=>b.last.first}
133
+ captures = path_info_source.scan(optional_named_captures_regexp).flatten
134
+ named_captures = path_info.named_captures.to_a.sort_by {|cap|cap.last.first}
132
135
  captures.zip(named_captures).map do |type, (name, pos)|
133
136
  name unless type == '([^/.?]+)'
134
137
  end.compact
@@ -136,22 +139,36 @@ class JsRoutes
136
139
  end
137
140
 
138
141
  def build_params route
139
- optional_named_captures = optional_params(route)
140
- route.conditions[:path_info].named_captures.to_a.sort do |cap1, cap2|
141
- # Hash is not ordered in Ruby 1.8.7
142
- cap1.last.first <=> cap2.last.first
143
- end.map do |cap|
144
- name = cap.first
145
- if !(optional_named_captures.include?(name.to_s))
146
- # prepending each parameter name with underscore
147
- # to prevent conflict with JS reserved words
148
- "_" + name.to_s.gsub(/^:/, '')
149
- end
150
- end.compact
142
+ required_params(route).map do |name|
143
+ # prepending each parameter name with underscore
144
+ # to prevent conflict with JS reserved words
145
+ "_" + name.to_s
146
+ end
151
147
  end
152
148
 
153
149
 
154
150
  def path_parts route
155
- route.path.gsub(/\(\.:format\)$/, "").split(/:[a-z\-_]+/)
151
+ route_spec(route).gsub(/\(\.:format\)$/, "").split(/:[a-z\-_]+/)
152
+ end
153
+
154
+ def route_spec route
155
+ if Rails.version >= "3.2.0"
156
+ route.path.spec
157
+ else
158
+ route.path
159
+ end.to_s
160
+ end
161
+
162
+ def required_params(route)
163
+ if Rails.version >= "3.2.0"
164
+ return route.required_parts.map(&:to_s)
165
+ end # if
166
+ optional_named_captures = optional_params(route)
167
+ route.conditions[:path_info].named_captures.to_a.sort_by do |cap1|
168
+ # Hash is not ordered in Ruby 1.8.7
169
+ cap1.last.first
170
+ end.map(&:first).reject do |name|
171
+ optional_named_captures.include?(name.to_s)
172
+ end
156
173
  end
157
174
  end
data/lib/routes.js CHANGED
@@ -12,7 +12,14 @@
12
12
  var s = [];
13
13
  for (prop in obj){
14
14
  if (obj[prop]) {
15
- s.push(prop + "=" + encodeURIComponent(obj[prop].toString()));
15
+ if (obj[prop] instanceof Array) {
16
+ for (var i=0; i < obj[prop].length; i++) {
17
+ key = prop + encodeURIComponent("[]");
18
+ s.push(key + "=" + encodeURIComponent(obj[prop][i].toString()));
19
+ }
20
+ } else {
21
+ s.push(prop + "=" + encodeURIComponent(obj[prop].toString()));
22
+ }
16
23
  }
17
24
  }
18
25
  if (s.length === 0) {
@@ -36,10 +36,14 @@ describe JsRoutes do
36
36
  evaljs("Routes.inbox_path(1, {format: 'json'})").should == routes.inbox_path(1, :format => "json")
37
37
  end
38
38
 
39
- it "should support get parameters" do
39
+ it "should support simple get parameters" do
40
40
  evaljs("Routes.inbox_path(1, {format: 'json', lang: 'ua', q: 'hello'})").should == routes.inbox_path(1, :lang => "ua", :q => "hello", :format => "json")
41
41
  end
42
42
 
43
+ it "should support array get parameters" do
44
+ evaljs("Routes.inbox_path(1, {hello: ['world', 'mars']})").should == routes.inbox_path(1, :hello => [:world, :mars])
45
+ end
46
+
43
47
  it "should support null and undefined parameters" do
44
48
  evaljs("Routes.inboxes_path({uri: null, key: undefined})").should == routes.inboxes_path(:uri => nil, :key => nil)
45
49
  end
metadata CHANGED
@@ -1,90 +1,123 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: js-routes
3
- version: !ruby/object:Gem::Version
4
- version: 0.7.3
5
- prerelease:
3
+ version: !ruby/object:Gem::Version
4
+ hash: 11
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 7
9
+ - 4
10
+ version: 0.7.4
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: 2011-12-22 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: rails
16
- requirement: &6782180 !ruby/object:Gem::Requirement
17
+
18
+ date: 2012-01-22 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
17
23
  none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '3.0'
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ hash: 7
28
+ segments:
29
+ - 3
30
+ - 0
31
+ version: "3.0"
32
+ requirement: *id001
22
33
  type: :runtime
34
+ name: rails
23
35
  prerelease: false
24
- version_requirements: *6782180
25
- - !ruby/object:Gem::Dependency
26
- name: therubyracer
27
- requirement: &6779260 !ruby/object:Gem::Requirement
36
+ - !ruby/object:Gem::Dependency
37
+ version_requirements: &id002 !ruby/object:Gem::Requirement
28
38
  none: false
29
- requirements:
30
- - - ! '>='
31
- - !ruby/object:Gem::Version
32
- version: '0'
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ requirement: *id002
33
47
  type: :development
48
+ name: therubyracer
34
49
  prerelease: false
35
- version_requirements: *6779260
36
- - !ruby/object:Gem::Dependency
37
- name: rspec
38
- requirement: &6777960 !ruby/object:Gem::Requirement
50
+ - !ruby/object:Gem::Dependency
51
+ version_requirements: &id003 !ruby/object:Gem::Requirement
39
52
  none: false
40
- requirements:
53
+ requirements:
41
54
  - - ~>
42
- - !ruby/object:Gem::Version
55
+ - !ruby/object:Gem::Version
56
+ hash: 19
57
+ segments:
58
+ - 2
59
+ - 7
60
+ - 0
43
61
  version: 2.7.0
62
+ requirement: *id003
44
63
  type: :development
64
+ name: rspec
45
65
  prerelease: false
46
- version_requirements: *6777960
47
- - !ruby/object:Gem::Dependency
48
- name: bundler
49
- requirement: &6793480 !ruby/object:Gem::Requirement
66
+ - !ruby/object:Gem::Dependency
67
+ version_requirements: &id004 !ruby/object:Gem::Requirement
50
68
  none: false
51
- requirements:
69
+ requirements:
52
70
  - - ~>
53
- - !ruby/object:Gem::Version
71
+ - !ruby/object:Gem::Version
72
+ hash: 23
73
+ segments:
74
+ - 1
75
+ - 0
76
+ - 0
54
77
  version: 1.0.0
78
+ requirement: *id004
55
79
  type: :development
80
+ name: bundler
56
81
  prerelease: false
57
- version_requirements: *6793480
58
- - !ruby/object:Gem::Dependency
59
- name: jeweler
60
- requirement: &6792320 !ruby/object:Gem::Requirement
82
+ - !ruby/object:Gem::Dependency
83
+ version_requirements: &id005 !ruby/object:Gem::Requirement
61
84
  none: false
62
- requirements:
85
+ requirements:
63
86
  - - ~>
64
- - !ruby/object:Gem::Version
87
+ - !ruby/object:Gem::Version
88
+ hash: 11
89
+ segments:
90
+ - 1
91
+ - 6
92
+ - 2
65
93
  version: 1.6.2
94
+ requirement: *id005
66
95
  type: :development
96
+ name: jeweler
67
97
  prerelease: false
68
- version_requirements: *6792320
69
- - !ruby/object:Gem::Dependency
70
- name: rcov
71
- requirement: &6791120 !ruby/object:Gem::Requirement
98
+ - !ruby/object:Gem::Dependency
99
+ version_requirements: &id006 !ruby/object:Gem::Requirement
72
100
  none: false
73
- requirements:
74
- - - ! '>='
75
- - !ruby/object:Gem::Version
76
- version: '0'
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ hash: 3
105
+ segments:
106
+ - 0
107
+ version: "0"
108
+ requirement: *id006
77
109
  type: :development
110
+ name: rcov
78
111
  prerelease: false
79
- version_requirements: *6791120
80
- description: Generates javascript file that defines all Rails named routes as javascript
81
- helpers
112
+ description: Generates javascript file that defines all Rails named routes as javascript helpers
82
113
  email: agresso@gmail.com
83
114
  executables: []
115
+
84
116
  extensions: []
85
- extra_rdoc_files:
117
+
118
+ extra_rdoc_files:
86
119
  - LICENSE.txt
87
- files:
120
+ files:
88
121
  - .document
89
122
  - .rspec
90
123
  - .travis.yml
@@ -104,32 +137,39 @@ files:
104
137
  - spec/js_routes_spec.rb
105
138
  - spec/post_rails_init_spec.rb
106
139
  - spec/spec_helper.rb
140
+ has_rdoc: true
107
141
  homepage: http://github.com/railsware/js-routes
108
- licenses:
142
+ licenses:
109
143
  - MIT
110
144
  post_install_message:
111
145
  rdoc_options: []
112
- require_paths:
146
+
147
+ require_paths:
113
148
  - lib
114
- required_ruby_version: !ruby/object:Gem::Requirement
149
+ required_ruby_version: !ruby/object:Gem::Requirement
115
150
  none: false
116
- requirements:
117
- - - ! '>='
118
- - !ruby/object:Gem::Version
119
- version: '0'
120
- segments:
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ hash: 3
155
+ segments:
121
156
  - 0
122
- hash: -783067730295265933
123
- required_rubygems_version: !ruby/object:Gem::Requirement
157
+ version: "0"
158
+ required_rubygems_version: !ruby/object:Gem::Requirement
124
159
  none: false
125
- requirements:
126
- - - ! '>='
127
- - !ruby/object:Gem::Version
128
- version: '0'
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ hash: 3
164
+ segments:
165
+ - 0
166
+ version: "0"
129
167
  requirements: []
168
+
130
169
  rubyforge_project:
131
- rubygems_version: 1.8.10
170
+ rubygems_version: 1.3.7
132
171
  signing_key:
133
172
  specification_version: 3
134
173
  summary: Brings Rails named routes to javascript
135
174
  test_files: []
175
+