padrino-routing 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/padrino-routing/helpers.rb +8 -4
- data/padrino-routing.gemspec +2 -2
- data/test/fixtures/adv_routing_app/Gemfile +0 -1
- data/test/fixtures/adv_routing_app/app.rb +1 -1
- data/test/fixtures/adv_routing_app/config/apps.rb +1 -1
- data/test/test_padrino_adv_routing.rb +0 -1
- data/test/test_padrino_routing.rb +40 -0
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.1
|
@@ -7,14 +7,18 @@ module Padrino
|
|
7
7
|
# url_for(:account, :id => 5) => '/account/5'
|
8
8
|
# url_for(:admin, show, :id => 5, :name => "demo") => '/admin/path/5/demo'
|
9
9
|
def url_for(*route_name)
|
10
|
-
|
11
|
-
|
10
|
+
params = route_name.extract_options!.reject { |name, val| val.blank? }
|
11
|
+
route_name.unshift(self.class.app_name.to_sym) unless route_name.first == self.class.app_name.to_sym
|
12
|
+
mapped_url = self.class.named_paths[route_name]
|
12
13
|
raise Padrino::RouteNotFound.new("Route alias #{route_name.inspect} is not mapped to a url") unless mapped_url
|
13
14
|
result_url = String.new(File.join(self.class.uri_root, mapped_url))
|
14
15
|
result_url.scan(%r{/?(:\S+?)(?:/|$)}).each do |placeholder|
|
15
|
-
|
16
|
-
|
16
|
+
param_key = placeholder[0][1..-1].to_sym
|
17
|
+
param_obj = params.delete(param_key)
|
18
|
+
param_value = param_obj.respond_to?(:to_param) ? param_obj.to_param : param_obj
|
19
|
+
result_url.gsub!(Regexp.new(placeholder[0]), param_value.to_s)
|
17
20
|
end
|
21
|
+
result_url << "?" + params.to_params if params.any?
|
18
22
|
result_url
|
19
23
|
end
|
20
24
|
end
|
data/padrino-routing.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{padrino-routing}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Padrino Team", "Nathan Esquenazi", "Davide D'Agostino", "Arthur Chiu"]
|
12
|
-
s.date = %q{2009-11-
|
12
|
+
s.date = %q{2009-11-30}
|
13
13
|
s.description = %q{Enhances padrino with a named route mapping system allowing for advanced routes}
|
14
14
|
s.email = %q{nesquena@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -1 +1 @@
|
|
1
|
-
Padrino.mount_core(:
|
1
|
+
Padrino.mount_core("adv_routing_demo", :app_file => Padrino.root('app.rb'))
|
@@ -3,7 +3,6 @@ require File.dirname(__FILE__) + '/helper'
|
|
3
3
|
|
4
4
|
class TestPadrinoAdvRouting < Test::Unit::TestCase
|
5
5
|
silence_logger { require File.dirname(__FILE__) + '/fixtures/adv_routing_app/config/boot' }
|
6
|
-
require File.dirname(__FILE__) + '/fixtures/adv_routing_app/app'
|
7
6
|
|
8
7
|
def app
|
9
8
|
AdvRoutingDemo.tap { |app| app.set :environment, :test }
|
@@ -5,6 +5,46 @@ class TestPadrinoRouting < Test::Unit::TestCase
|
|
5
5
|
def app
|
6
6
|
RoutingDemo.tap { |app| app.set :environment, :test }
|
7
7
|
end
|
8
|
+
|
9
|
+
context 'for url_for method' do
|
10
|
+
should "support finding known urls" do
|
11
|
+
demo = app.new
|
12
|
+
demo.class.map(:admin, :demo).to('/admin/demo/:name')
|
13
|
+
assert_equal '/admin/demo/john', demo.url_for(:admin, :demo, :name => 'john')
|
14
|
+
end
|
15
|
+
should "support finding known urls ignoring blank extra param" do
|
16
|
+
demo = app.new
|
17
|
+
demo.class.map(:admin, :demo).to('/admin/demo')
|
18
|
+
assert_equal '/admin/demo', demo.url_for(:admin, :demo, :foo => '')
|
19
|
+
end
|
20
|
+
should "support calling to_param on an object which supports the call" do
|
21
|
+
obj = stub(:to_param => '25', :to_s => "<Fake>")
|
22
|
+
demo = app.new
|
23
|
+
demo.class.map(:admin, :demo).to('/admin/demo/:foo')
|
24
|
+
assert_equal '/admin/demo/25', demo.url_for(:admin, :demo, :foo => obj)
|
25
|
+
end
|
26
|
+
should "support finding known urls with named param ignoring blank extra param" do
|
27
|
+
demo = app.new
|
28
|
+
demo.class.map(:admin, :demo).to('/admin/demo/:name')
|
29
|
+
assert_equal '/admin/demo/john', demo.url_for(:admin, :demo, :name => 'john', :foo => ' ')
|
30
|
+
end
|
31
|
+
should "support finding known urls with one extra param" do
|
32
|
+
demo = app.new
|
33
|
+
demo.class.map(:admin, :demo).to('/admin/demo/:name')
|
34
|
+
assert_equal '/admin/demo/john?foo=bar', demo.url_for(:admin, :demo, :name => 'john', :foo => 'bar')
|
35
|
+
end
|
36
|
+
should "support finding known urls with extra params" do
|
37
|
+
demo = app.new
|
38
|
+
demo.class.map(:demo).to('/demo/:name')
|
39
|
+
assert_equal '/demo/john?bar=foo&foo=bar', demo.url_for(:demo, :name => 'john', :foo => 'bar', :bar => 'foo')
|
40
|
+
end
|
41
|
+
should "support finding known urls with multiple named params with extra params" do
|
42
|
+
demo = app.new
|
43
|
+
demo.class.map(:demo).to('/demo/:name/id/:id')
|
44
|
+
actual_url = demo.url_for(:demo, :name => 'john', :foo => 'bar', :bar => 'foo', :id => 5)
|
45
|
+
assert_equal '/demo/john/id/5?bar=foo&foo=bar', actual_url
|
46
|
+
end
|
47
|
+
end
|
8
48
|
|
9
49
|
context 'for links list displaying routes' do
|
10
50
|
setup { visit '/links' }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: padrino-routing
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Padrino Team
|
@@ -12,7 +12,7 @@ autorequire:
|
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
14
|
|
15
|
-
date: 2009-11-
|
15
|
+
date: 2009-11-30 00:00:00 -08:00
|
16
16
|
default_executable:
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|