redirect 0.1.0 → 0.3.0

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/History.txt CHANGED
@@ -1,3 +1,16 @@
1
+ === 0.3.0 / 2009-02-24
2
+
3
+ * 1 major enhancement
4
+
5
+ * Added reuse of match patterns
6
+ [/old\/(.*)/, '/new/$1'] # /old/2008/02/01 will be redirected to /new/2008/02/01
7
+
8
+ === 0.2.0 / 2009-02-22
9
+
10
+ * 1 major enhancement
11
+
12
+ * Added a generator method
13
+
1
14
  === 0.1.0 / 2009-02-22
2
15
 
3
16
  * 1 major enhancement
data/Manifest.txt CHANGED
@@ -2,6 +2,7 @@ History.txt
2
2
  Manifest.txt
3
3
  README.txt
4
4
  Rakefile
5
+ bin/redirect_app
5
6
  example.rb
6
7
  example.ru
7
8
  lib/redirect.rb
data/README.txt CHANGED
@@ -4,19 +4,39 @@ http://github.com/p8/redirect/tree/master
4
4
 
5
5
  == DESCRIPTION:
6
6
 
7
- Redirect is a simple Ruby redirect DSL build on Rack
7
+ Redirect is a simple Ruby redirect DSL build on Rack.
8
+ It's like a simple Ruby mod_rewrite, so you can write and test your redirects in Ruby.
8
9
 
9
- == EXAMPLE
10
+ == GETTING STARTED:
10
11
 
11
- Create a file and pass an array to the redirect method:
12
+ From the commandline run:
13
+
14
+ redirect_app PROJECT_NAME
15
+
16
+ This create a directory PROJECT_NAME with the required files.
17
+ PROJECT_NAME.rb contains the main logic.
18
+
19
+ To locally run the app you can do:
20
+
21
+ ruby PROJECT_NAME.rb
22
+
23
+ == REDIRECTS:
24
+
25
+ The first one is evaluated first, then the next one, etc..
12
26
 
13
- require 'redirect'
14
27
  redirect ['/catch_url', '/redirect_url'],
15
- ['/catch_url2', '/redirect_url2', {:code => 307, :name => 'redirect link'}],
16
- ['^/some_regexp', '/all']
17
-
18
- The catch_url can be a regular expression.
19
- You can overwrite the http code (defaults is 301) in the options and pass a name for the sitemap.
28
+ ['/catch_url2', '/redirect_url2']
29
+
30
+ The catch_url can be a regular expression:
31
+
32
+ ['^/some_regexp', '/all']
33
+ [/old\/(.*)/, '/new/$1'] # /old/2008/02/01 will be redirected to /new/2008/02/01
34
+
35
+ You can pass extra options.
36
+ :code # Overwrite the http code (defaults is 301) in the options
37
+ :name # named redirects are public so they'll appear in you sitemap
38
+
39
+ ['/catch_url', '/redirect_url', {:code => 307, :name => 'redirect link'}]
20
40
 
21
41
  The default redirect code can be changed:
22
42
 
data/bin/redirect_app ADDED
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+ require 'fileutils'
3
+ project = ARGV.first
4
+ FileUtils.mkdir_p(project, :verbose => false) unless File.directory?(project)
5
+
6
+ # create application
7
+ open("#{project}/#{project}.rb", "w") do |f|
8
+ f.puts %(require 'rubygems'\n) +
9
+ %(require 'redirect'\n\n) +
10
+ %(redirect ['/old_url', '/new_url', {:code => 307, :name => 'test'}],\n) +
11
+ %( ['^/some_regexp', '/all'])
12
+ end
13
+
14
+ # create config
15
+ open("#{project}/config.ru", "w") do |f|
16
+ f.puts %(require 'rubygems'\n) +
17
+ %(require 'redirect'\n\n) +
18
+ %(Redirect.autorun = false\n\n) +
19
+ %(require '#{project}.rb'\n\n) +
20
+ %(run Redirect.app)
21
+ end
data/example.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'lib/redirect'
2
2
 
3
3
  redirect ['/old_url', '/new_url', {:code => 307, :name => 'test'}],
4
- ['^/some_regexp', '/all']
4
+ [/old\/(.*)/, '/new/$1'],
5
+ ['^/some_regexp', '/all'],
data/lib/redirect.rb CHANGED
@@ -5,7 +5,7 @@ require 'rack/request'
5
5
  require 'rack/response'
6
6
 
7
7
  module Redirect
8
- VERSION = '0.1.0'
8
+ VERSION = '0.3.0'
9
9
 
10
10
  def self.default_code= default_code
11
11
  @default_code = default_code
@@ -75,9 +75,13 @@ module Rack
75
75
  end
76
76
  @redirects.each do |r|
77
77
  if req.fullpath.match(r.catch_url)
78
+ redirect_url = r.redirect_url
79
+ if $1
80
+ redirect_url.gsub!('$1', $1)
81
+ end
78
82
  puts "Match found for #{r.catch_url}."
79
- puts "Redirecting to #{r.redirect_url}"
80
- return [r.code, {"Location" => r.redirect_url, "Content-Type" => "text/html"}, "Redirecting to: #{r.redirect_url}"]
83
+ puts "Redirecting to #{redirect_url}"
84
+ return [r.code, {"Location" => redirect_url, "Content-Type" => "text/html"}, "Redirecting to: #{redirect_url}"]
81
85
  end
82
86
  end
83
87
  [404, {"Content-Type" => "text/html"}, "not found"]
data/spec/rack_spec.rb CHANGED
@@ -64,6 +64,13 @@ describe "Rack::Redirect" do
64
64
  res.body.should == 'Redirecting to: /new'
65
65
  end
66
66
 
67
+ it "should redirect for a regular_expression with rewrite" do
68
+ @app = Rack::Redirect.new([/old\/(.*)/, '/new/$1'])
69
+ res = Rack::MockRequest.new(@app).get('/old/2008/02/14')
70
+ res.headers.should == { 'Location' => '/new/2008/02/14', 'Content-Type' => 'text/html' }
71
+ res.body.should == 'Redirecting to: /new/2008/02/14'
72
+ end
73
+
67
74
  it "should allow multiple redirects" do
68
75
  @app = Rack::Redirect.new(['^/old3', '/new'], ['^/old2', '/new2'])
69
76
  res = Rack::MockRequest.new(@app).get('/old2008')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redirect
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Petrik de Heus
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-02-22 00:00:00 +01:00
12
+ date: 2009-02-24 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -22,11 +22,11 @@ dependencies:
22
22
  - !ruby/object:Gem::Version
23
23
  version: 1.8.3
24
24
  version:
25
- description: Redirect is a simple Ruby redirect DSL build on Rack
25
+ description: Redirect is a simple Ruby redirect DSL build on Rack. It's like a simple Ruby mod_rewrite, so you can write and test your redirects in Ruby.
26
26
  email:
27
27
  - FIX@example.com
28
- executables: []
29
-
28
+ executables:
29
+ - redirect_app
30
30
  extensions: []
31
31
 
32
32
  extra_rdoc_files:
@@ -38,6 +38,7 @@ files:
38
38
  - Manifest.txt
39
39
  - README.txt
40
40
  - Rakefile
41
+ - bin/redirect_app
41
42
  - example.rb
42
43
  - example.ru
43
44
  - lib/redirect.rb