redirect_routing 0.0.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/MIT-LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ Copyright (c) 2006 Lars Pind
2
+ Copyright (c) 2008 Manfred Stienstra, Fingertips <manfred@fngtps.com>
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining
5
+ a copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,64 @@
1
+ RedirectRouting
2
+ ===============
3
+
4
+ Forked by Seamus Abshere (seamus@abshere.net)
5
+
6
+ Note: you may have to put
7
+
8
+ ActionController::Routing::RouteSet::Mapper.send :include, RedirectRouting::Routes
9
+
10
+ at the top of config/routes.rb.
11
+
12
+ This plugin lets you do simple redirects straight from your routes.rb file:
13
+
14
+ map.redirect '', :controller => 'events'
15
+
16
+ This will make the root of your site redirect to the events controller, typically at /events.
17
+
18
+ You can redirect any URL to any set of options, or event a string URL, like this:
19
+
20
+ map.redirect 'test', 'http://example.com'
21
+
22
+ GET /test, and you'll be redirected to my blog.
23
+
24
+ You can also set the status to be a 301 permanent redirect instead of a temporary 302:
25
+
26
+ map.redirect 'oldurl', 'newurl', :permament => true
27
+ map.redirect 'oldurl', :controller => 'new_controller', :action => 'new_action', :permament => true
28
+
29
+ Finally you can preserve wildcard paths
30
+
31
+ map.redirect 'festivals/*path', 'http://example.com/events/festivals', :keep_path => :path
32
+ map.redirect 'news/*articles', 'http://blog.example.com', :keep_path => :articles
33
+
34
+ Motivation
35
+ ----------
36
+
37
+ Why this plugin?
38
+
39
+ Because if Rails Routing is supposed to be a Ruby replacement for mod_rewrite, then at least some redirect capability is called for.
40
+
41
+ But more concretely, because there's no good alternative unless you're using Apache. The alternative options that I've been able to figure out are:
42
+
43
+ * Configure your web server to do the redirect for you, which is trivial with mod_rewrite in Apache, but not so trivial with Mongrel, or
44
+ * Manually create a controller for the sole purpose of redirecting, or
45
+ * Tack the redirect onto another controller, which isn't very RESTful
46
+
47
+ If there's demand, I'll add a switch for a permanent redirect, but I don't have the need yet.
48
+
49
+ If you know of a simpler way to do this, please let me know.
50
+
51
+ Credits
52
+ -------
53
+
54
+ Written by Lars Pind
55
+
56
+ http://pinds.com
57
+
58
+ Changelog
59
+ ---------
60
+
61
+ * Added :keep_path options [Seamus Abshere & Manfred Stienstra]
62
+ * Updated to Rails Edge [Manfred Stienstra]
63
+ * Support for 301 redirects [Gioele Barabucci]
64
+ * Silence warning about missing helper [Tim Connor]
data/Rakefile ADDED
@@ -0,0 +1,42 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ desc 'Default: run unit tests.'
6
+ task :default => :test
7
+
8
+ desc 'Test the test plugin.'
9
+ Rake::TestTask.new(:test) do |t|
10
+ t.libs << 'lib'
11
+ t.pattern = 'test/**/*_test.rb'
12
+ t.verbose = true
13
+ end
14
+
15
+ desc 'Generate documentation for the test plugin.'
16
+ Rake::RDocTask.new(:rdoc) do |rdoc|
17
+ rdoc.rdoc_dir = 'rdoc'
18
+ rdoc.title = 'Test'
19
+ rdoc.options << '--line-numbers' << '--inline-source'
20
+ rdoc.rdoc_files.include('README')
21
+ rdoc.rdoc_files.include('lib/**/*.rb')
22
+ end
23
+
24
+ begin
25
+ require 'jeweler'
26
+ Jeweler::Tasks.new do |spec|
27
+ spec.name = "redirect_routing"
28
+
29
+ spec.author = "Manfred Stienstra"
30
+ spec.email = "manfred@fngtps.com"
31
+
32
+ spec.description = <<-EOF
33
+ simple redirects straight from your routes.rb file
34
+ EOF
35
+ spec.summary = <<-EOF
36
+ simple redirects straight from your routes.rb file
37
+ EOF
38
+ spec.homepage = "http://github.com/seamusabshere/redirect_routing/tree/master"
39
+ end
40
+ rescue LoadError
41
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
42
+ end
data/VERSION.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ :minor: 0
3
+ :patch: 4
4
+ :major: 0
data/init.rb ADDED
@@ -0,0 +1,3 @@
1
+ require 'redirect_routing'
2
+
3
+ ActionController::Routing::RouteSet::Mapper.send :include, RedirectRouting::Routes
@@ -0,0 +1,2 @@
1
+ require 'redirect_routing/routes'
2
+ require 'redirect_routing_controller'
@@ -0,0 +1,7 @@
1
+ module RedirectRouting
2
+ module Routes
3
+ def redirect(path, *args)
4
+ connect "#{path}.:format", :controller => "redirect_routing", :action => "redirect", :args => args
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,25 @@
1
+ class RedirectRoutingController < ActionController::Base
2
+ def redirect
3
+ options = params[:args].extract_options!
4
+ status = options.delete(:permanent) == true ? :moved_permanently : :found
5
+ url_options = params[:args].first || options
6
+
7
+ if path_to_keep = options[:keep_path] and params[path_to_keep].present?
8
+ raise ArgumentError, "Redirect target should be a String when using the :keep_path option" unless url_options.is_a?(String)
9
+ parsed_url = URI.parse url_options
10
+ parsed_url.path = ([parsed_url.path] + params[path_to_keep]).join '/'
11
+ url_options = parsed_url.to_s
12
+ end
13
+
14
+ if params[:format].present?
15
+ case url_options
16
+ when String
17
+ url_options << ".#{params[:format]}"
18
+ when Hash
19
+ url_options[:format] = params[:format]
20
+ end
21
+ end
22
+
23
+ redirect_to url_options, :status => status
24
+ end
25
+ end
@@ -0,0 +1,51 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{redirect_routing}
8
+ s.version = "0.0.4"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Manfred Stienstra"]
12
+ s.date = %q{2009-10-08}
13
+ s.description = %q{ simple redirects straight from your routes.rb file
14
+ }
15
+ s.email = %q{manfred@fngtps.com}
16
+ s.extra_rdoc_files = [
17
+ "README"
18
+ ]
19
+ s.files = [
20
+ "MIT-LICENSE",
21
+ "README",
22
+ "Rakefile",
23
+ "VERSION.yml",
24
+ "init.rb",
25
+ "lib/redirect_routing.rb",
26
+ "lib/redirect_routing/routes.rb",
27
+ "lib/redirect_routing_controller.rb",
28
+ "redirect_routing.gemspec",
29
+ "test/redirect_routing_test.rb",
30
+ "test/test_helper.rb"
31
+ ]
32
+ s.homepage = %q{http://github.com/seamusabshere/redirect_routing/tree/master}
33
+ s.rdoc_options = ["--charset=UTF-8"]
34
+ s.require_paths = ["lib"]
35
+ s.rubygems_version = %q{1.3.5}
36
+ s.summary = %q{simple redirects straight from your routes.rb file}
37
+ s.test_files = [
38
+ "test/redirect_routing_test.rb",
39
+ "test/test_helper.rb"
40
+ ]
41
+
42
+ if s.respond_to? :specification_version then
43
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
44
+ s.specification_version = 3
45
+
46
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
47
+ else
48
+ end
49
+ else
50
+ end
51
+ end
@@ -0,0 +1,91 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class EventsController < ActionController::Base
4
+ end
5
+ ActionController::Routing::Routes.add_route('/:controller/:action/:id')
6
+
7
+ class RedirectRoutingTest < TestCase
8
+ tests RedirectRoutingController
9
+
10
+ def setup
11
+ @controller = RedirectRoutingController.new
12
+ @request = ActionController::TestRequest.new
13
+ @response = ActionController::TestResponse.new
14
+ end
15
+
16
+ def test_redirect_routes
17
+ with_routing do |set|
18
+ set.draw do |map|
19
+ map.redirect '', :controller => 'events'
20
+ map.redirect 'test', 'http://example.com'
21
+ map.redirect 'oldurl', 'newurl', :permanent => true
22
+ map.redirect 'festivals/*path', 'http://example.com/events/festivals', :keep_path => :path
23
+ end
24
+
25
+ assert_recognizes({ :controller => "redirect_routing", :action => "redirect", :args => [{ 'controller' => "events" }] }, "/")
26
+ assert_recognizes({ :controller => "redirect_routing", :action => "redirect", :args => ["http://example.com"] }, "/test")
27
+ assert_recognizes({ :controller => "redirect_routing", :action => "redirect", :args => ["newurl", {'permanent' => true}] }, "/oldurl")
28
+ assert_recognizes({ :controller => "redirect_routing", :action => "redirect", :args => ["http://example.com/events/festivals", {'keep_path' => :path}], :path => ['music', 'recent'] }, "/festivals/music/recent")
29
+ end
30
+ end
31
+
32
+ def test_redirect_controller_with_hash
33
+ get :redirect, :args => [{ :controller => "events" }]
34
+ assert_redirected_to :controller => "events"
35
+ assert_response 302
36
+ end
37
+
38
+ def test_redirect_controller_with_string
39
+ get :redirect, :args => ["http://example.com"]
40
+ assert_redirected_to "http://example.com"
41
+ assert_response 302
42
+ end
43
+
44
+ def test_permanent_redirect_controller_with_hash
45
+ get :redirect, :args => [{ :controller => "events", :permanent => true }]
46
+ assert_redirected_to :controller => "events"
47
+ assert_response 301
48
+ end
49
+
50
+ def test_permanent_redirect_controller_with_string
51
+ get :redirect, :args => ["http://example.com", { :permanent => true }]
52
+ assert_redirected_to "http://example.com"
53
+ assert_response 301
54
+ end
55
+
56
+ def test_redirect_controller_with_hash_and_append_path
57
+ assert_raises(ArgumentError) do
58
+ get :redirect, :args => [{ :controller => "events", :keep_path => :path }], :path => [ "festivals/recent" ]
59
+ end
60
+ end
61
+
62
+ def test_redirect_controller_with_string_and_append_path
63
+ get :redirect, :args => ["http://example.com", { :keep_path => :path }], :path => [ "festivals/recent" ]
64
+ assert_redirected_to "http://example.com/festivals/recent"
65
+ assert_response 302
66
+ end
67
+
68
+ def test_redirect_controller_with_string_and_append_path_array
69
+ get :redirect, :args => ["http://example.com", { :keep_path => :path }], :path => [ "festivals", "recent" ]
70
+ assert_redirected_to "http://example.com/festivals/recent"
71
+ assert_response 302
72
+ end
73
+
74
+ def test_permanent_redirect_controller_with_hash_and_append_path
75
+ assert_raises(ArgumentError) do
76
+ get :redirect, :args => [{ :controller => "events", :permanent => true, :keep_path => :path }], :path => [ "festivals/recent" ]
77
+ end
78
+ end
79
+
80
+ def test_permanent_redirect_controller_with_string_and_append_path
81
+ get :redirect, :args => ["http://example.com", { :permanent => true, :keep_path => :path }], :path => [ "festivals/recent" ]
82
+ assert_redirected_to "http://example.com/festivals/recent"
83
+ assert_response 301
84
+ end
85
+
86
+ def test_redirect_normally_when_the_path_to_keep_is_blank
87
+ get :redirect, :args => ["http://example.com", { :keep_path => :unknown }], :path => [ "festivals/recent" ]
88
+ assert_redirected_to "http://example.com"
89
+ assert_response 302
90
+ end
91
+ end
@@ -0,0 +1,27 @@
1
+ ENV['RAILS_ENV'] = "test"
2
+
3
+ rails_vendor_path = File.expand_path('../../../vendor/rails')
4
+ if File.exist?(rails_vendor_path)
5
+ $:.concat([
6
+ File.join(rails_vendor_path, 'activesupport', 'lib'),
7
+ File.join(rails_vendor_path, 'actionpack', 'lib')
8
+ ])
9
+ require 'active_support'
10
+ require 'action_controller'
11
+ require 'action_controller/test_process'
12
+ else
13
+ puts "\n[!] Tests only run when the plugin is installed in the plugins directory, running the tests against anything other than your particular Rails version doesn't really serve a purpose."
14
+ exit -1
15
+ end
16
+
17
+ require 'test/unit'
18
+
19
+ begin
20
+ TestCase = ActionController::TestCase
21
+ rescue NameError
22
+ TestCase = Test::Unit::TestCase
23
+ end
24
+
25
+ $:.unshift File.expand_path('../../lib', __FILE__)
26
+ require 'init'
27
+
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: redirect_routing
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ platform: ruby
6
+ authors:
7
+ - Manfred Stienstra
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-10-08 00:00:00 -04:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: " simple redirects straight from your routes.rb file\n"
17
+ email: manfred@fngtps.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README
24
+ files:
25
+ - MIT-LICENSE
26
+ - README
27
+ - Rakefile
28
+ - VERSION.yml
29
+ - init.rb
30
+ - lib/redirect_routing.rb
31
+ - lib/redirect_routing/routes.rb
32
+ - lib/redirect_routing_controller.rb
33
+ - redirect_routing.gemspec
34
+ - test/redirect_routing_test.rb
35
+ - test/test_helper.rb
36
+ has_rdoc: true
37
+ homepage: http://github.com/seamusabshere/redirect_routing/tree/master
38
+ licenses: []
39
+
40
+ post_install_message:
41
+ rdoc_options:
42
+ - --charset=UTF-8
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: "0"
50
+ version:
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: "0"
56
+ version:
57
+ requirements: []
58
+
59
+ rubyforge_project:
60
+ rubygems_version: 1.3.5
61
+ signing_key:
62
+ specification_version: 3
63
+ summary: simple redirects straight from your routes.rb file
64
+ test_files:
65
+ - test/redirect_routing_test.rb
66
+ - test/test_helper.rb