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 +2 -2
- data/Readme.md +1 -0
- data/VERSION +1 -1
- data/js-routes.gemspec +9 -8
- data/lib/js_routes.rb +36 -19
- data/lib/routes.js +8 -1
- data/spec/js_routes_spec.rb +5 -1
- metadata +108 -68
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.
|
|
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.
|
|
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.
|
|
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 =
|
|
8
|
-
s.version = "0.7.
|
|
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 =
|
|
13
|
-
s.description =
|
|
14
|
-
s.email =
|
|
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 =
|
|
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 =
|
|
43
|
-
s.summary =
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
130
|
-
|
|
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
|
-
|
|
140
|
-
|
|
141
|
-
#
|
|
142
|
-
|
|
143
|
-
end
|
|
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.
|
|
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
|
-
|
|
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) {
|
data/spec/js_routes_spec.rb
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
|
|
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
|
-
|
|
25
|
-
|
|
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
|
-
|
|
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
|
-
|
|
36
|
-
|
|
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
|
-
|
|
47
|
-
|
|
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
|
-
|
|
58
|
-
|
|
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
|
-
|
|
69
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
120
|
-
segments:
|
|
151
|
+
requirements:
|
|
152
|
+
- - ">="
|
|
153
|
+
- !ruby/object:Gem::Version
|
|
154
|
+
hash: 3
|
|
155
|
+
segments:
|
|
121
156
|
- 0
|
|
122
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
+
|