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 CHANGED
@@ -1 +1 @@
1
- 0.2.0
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
- values = route_name.extract_options!
11
- mapped_url = self.class.named_paths[route_name] || self.class.named_paths[route_name.dup.unshift(self.class.app_name.to_sym)]
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
- value_key = placeholder[0][1..-1].to_sym
16
- result_url.gsub!(Regexp.new(placeholder[0]), values[value_key].to_s)
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
@@ -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.0"
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-23}
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 = [
@@ -3,7 +3,6 @@ source 'http://gemcutter.org'
3
3
 
4
4
  # Base requirements
5
5
  gem 'sinatra', :require_as => 'sinatra/base'
6
- gem 'rack-flash'
7
6
 
8
7
  # Component requirements
9
8
  gem 'haml'
@@ -1,3 +1,3 @@
1
1
  class AdvRoutingDemo < Padrino::Application
2
- set :app_file, __FILE__
2
+
3
3
  end
@@ -1 +1 @@
1
- Padrino.mount_core(:app_class => "AdvRoutingDemo")
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.0
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-23 00:00:00 -08:00
15
+ date: 2009-11-30 00:00:00 -08:00
16
16
  default_executable:
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency