js-routes 0.3.0 → 0.3.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.
- data/VERSION +1 -1
- data/js-routes.gemspec +2 -2
- data/lib/js_routes.rb +15 -19
- data/lib/routes.js +11 -4
- data/spec/js_routes_spec.rb +29 -12
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.1
|
data/js-routes.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{js-routes}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.1"
|
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 = %q{2011-08-
|
12
|
+
s.date = %q{2011-08-07}
|
13
13
|
s.description = %q{Generates javascript file that defines all Rails named routes as javascript helpers}
|
14
14
|
s.email = %q{agresso@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/js_routes.rb
CHANGED
@@ -6,6 +6,7 @@ module JsRoutes
|
|
6
6
|
js = File.read(File.dirname(__FILE__) + "/routes.js")
|
7
7
|
options[:namespace] ||= "Routes"
|
8
8
|
js.gsub!("NAMESPACE", options[:namespace])
|
9
|
+
js.gsub!("DEFAULT_FORMAT", options[:default_format].to_s)
|
9
10
|
js.gsub!("ROUTES", js_routes(options))
|
10
11
|
end
|
11
12
|
|
@@ -27,37 +28,32 @@ module JsRoutes
|
|
27
28
|
exclude = Array(options[:exclude])
|
28
29
|
|
29
30
|
Rails.application.reload_routes!
|
30
|
-
Rails.application.routes.named_routes.routes.map do |
|
31
|
-
if exclude.find {|e| name
|
32
|
-
|
31
|
+
Rails.application.routes.named_routes.routes.map do |_, route|
|
32
|
+
if exclude.find {|e| route.name =~ e}
|
33
|
+
nil
|
33
34
|
else
|
34
|
-
build_js(
|
35
|
+
build_js(route, options)
|
35
36
|
end
|
36
|
-
end.join("
|
37
|
+
end.compact.join(",\n")
|
37
38
|
end
|
38
39
|
|
39
|
-
def build_js(
|
40
|
-
_ = <<-JS
|
40
|
+
def build_js(route, options)
|
41
|
+
_ = <<-JS.strip!
|
41
42
|
// #{route.name} => #{route.path}
|
42
|
-
#{name
|
43
|
+
#{route.name}_path: function(#{build_params route}) {
|
43
44
|
var opts = options || {};
|
44
|
-
var format = opts
|
45
|
-
delete opts.format;
|
45
|
+
var format = Utils.extract_format(opts);
|
46
46
|
#{build_default_params route};
|
47
|
-
return
|
48
|
-
}
|
47
|
+
return Utils.check_path('#{build_path route}' + format) + Utils.serialize(opts);
|
48
|
+
}
|
49
49
|
JS
|
50
50
|
end
|
51
51
|
|
52
52
|
|
53
53
|
def build_params route
|
54
54
|
route.conditions[:path_info].captures.map do |cap|
|
55
|
-
if cap.is_a?(Rack::Mount::GeneratableRegexp::DynamicSegment)
|
56
|
-
|
57
|
-
nil
|
58
|
-
else
|
59
|
-
cap.name.to_s.gsub(':', '')
|
60
|
-
end
|
55
|
+
if cap.is_a?(Rack::Mount::GeneratableRegexp::DynamicSegment) && !(cap.name.to_s == "format")
|
56
|
+
cap.name.to_s.gsub(':', '')
|
61
57
|
end
|
62
58
|
end.compact.<<("options").join(', ')
|
63
59
|
end
|
@@ -66,7 +62,7 @@ JS
|
|
66
62
|
route.conditions[:path_info].captures.map do |cap|
|
67
63
|
if cap.is_a?(Rack::Mount::GeneratableRegexp::DynamicSegment)
|
68
64
|
segg = cap.name.to_s.gsub(':', '')
|
69
|
-
"#{segg} =
|
65
|
+
"#{segg} = Utils.check_parameter(#{segg});"
|
70
66
|
end
|
71
67
|
end.join("\n")
|
72
68
|
end
|
data/lib/routes.js
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
(function(){
|
2
2
|
|
3
|
-
var
|
3
|
+
var Utils = {
|
4
4
|
|
5
|
-
|
5
|
+
default_format: 'DEFAULT_FORMAT',
|
6
6
|
|
7
7
|
serialize: function(obj){
|
8
8
|
if (obj == null) {return '';}
|
@@ -26,9 +26,16 @@
|
|
26
26
|
|
27
27
|
check_path: function(path) {
|
28
28
|
return path.replace(/\.$/m, '');
|
29
|
-
}
|
29
|
+
},
|
30
30
|
|
31
|
+
extract_format: function(options) {
|
32
|
+
var format = options.hasOwnProperty("format") ? options.format : Utils.default_format;
|
33
|
+
delete options.format;
|
34
|
+
return format || "";
|
35
|
+
}
|
31
36
|
};
|
32
37
|
|
33
|
-
window.NAMESPACE =
|
38
|
+
window.NAMESPACE = {
|
39
|
+
ROUTES
|
40
|
+
};
|
34
41
|
})();
|
data/spec/js_routes_spec.rb
CHANGED
@@ -2,34 +2,35 @@ require 'spec_helper'
|
|
2
2
|
require "fileutils"
|
3
3
|
|
4
4
|
|
5
|
-
|
6
5
|
describe JsRoutes do
|
7
6
|
before(:each) do
|
8
7
|
Rails.application.stub!(:reload_routes!).and_return(true)
|
9
|
-
evaljs("var window =
|
8
|
+
evaljs("var window = this;")
|
9
|
+
evaljs(_presetup)
|
10
10
|
evaljs(JsRoutes.generate(_options))
|
11
11
|
end
|
12
12
|
|
13
|
+
let(:_presetup) { "this;" }
|
13
14
|
let(:_options) { {} }
|
14
15
|
|
15
16
|
it "should generate collection routing" do
|
16
|
-
evaljs("
|
17
|
+
evaljs("Routes.inboxes_path()").should == "/inboxes"
|
17
18
|
end
|
18
19
|
|
19
20
|
it "should generate member routing" do
|
20
|
-
evaljs("
|
21
|
+
evaljs("Routes.inbox_path(1)").should == "/inboxes/1"
|
21
22
|
end
|
22
23
|
|
23
24
|
it "should generate nested routing" do
|
24
|
-
evaljs("
|
25
|
+
evaljs("Routes.inbox_message_path(1,2)").should == "/inboxes/1/messages/2"
|
25
26
|
end
|
26
27
|
|
27
28
|
it "should generate routing with format" do
|
28
|
-
evaljs("
|
29
|
+
evaljs("Routes.inbox_path(1, {format: 'json'})").should == "/inboxes/1.json"
|
29
30
|
end
|
30
31
|
|
31
32
|
it "should support get parameters" do
|
32
|
-
evaljs("
|
33
|
+
evaljs("Routes.inbox_path(1, {format: 'json', q: 'hello', lang: 'ua'})").should == "/inboxes/1.json?q=hello&lang=ua"
|
33
34
|
end
|
34
35
|
|
35
36
|
context "when exclude is specified" do
|
@@ -37,7 +38,11 @@ describe JsRoutes do
|
|
37
38
|
let(:_options) { {:exclude => /^admin_/} }
|
38
39
|
|
39
40
|
it "should exclude specified routes from file" do
|
40
|
-
evaljs("
|
41
|
+
evaljs("Routes.admin_users_path").should be_nil
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should not exclude routes not under specified pattern" do
|
45
|
+
evaljs("Routes.inboxes_path()").should_not be_nil
|
41
46
|
end
|
42
47
|
end
|
43
48
|
|
@@ -45,11 +50,15 @@ describe JsRoutes do
|
|
45
50
|
let(:_options) { {:default_format => "json"} }
|
46
51
|
|
47
52
|
it "should render routing with default_format" do
|
48
|
-
evaljs("
|
53
|
+
evaljs("Routes.inbox_path(1)").should == "/inboxes/1.json"
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should override default_format wehn spefified implicitly" do
|
57
|
+
evaljs("Routes.inbox_path(1, {format: 'xml'})").should == "/inboxes/1.xml"
|
49
58
|
end
|
50
59
|
|
51
|
-
it "should override
|
52
|
-
evaljs("
|
60
|
+
it "should override nullify implicitly when specified implicitly" do
|
61
|
+
evaljs("Routes.inbox_path(1, {format: null})").should == "/inboxes/1"
|
53
62
|
end
|
54
63
|
|
55
64
|
end
|
@@ -58,7 +67,15 @@ describe JsRoutes do
|
|
58
67
|
let(:_options) { {:namespace => "PHM"} }
|
59
68
|
it "should use this name space for routing" do
|
60
69
|
evaljs("window.Routes").should be_nil
|
61
|
-
evaljs("
|
70
|
+
evaljs("PHM.inbox_path").should_not be_nil
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
context "when nested namspace option is specified" do
|
75
|
+
let(:_presetup) { "window.PHM = {}" }
|
76
|
+
let(:_options) { {:namespace => "PHM.Routes"} }
|
77
|
+
it "should use this name space for routing" do
|
78
|
+
evaljs("PHM.Routes.inbox_path").should_not be_nil
|
62
79
|
end
|
63
80
|
|
64
81
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: js-routes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 1
|
10
|
+
version: 0.3.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Bogdan Gusiev
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-08-
|
18
|
+
date: 2011-08-07 00:00:00 +03:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|