rewritten 0.10.0 → 0.11.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.
- checksums.yaml +4 -4
- data/HISTORY.rdoc +9 -1
- data/README.md +1 -1
- data/afile +0 -0
- data/lib/rack/url.rb +45 -15
- data/lib/rewritten/version.rb +1 -1
- data/test/rack/rewritten_url_test.rb +67 -3
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b8a500718f5764e1215c94dcefc425cfa4fb609
|
4
|
+
data.tar.gz: c36cd32276590c3ccda6b0ff56371dcd09e37f43
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4597038ac4306fbc18f19474c744de3fa1077c817b85e5d98c360bac7900e9f5340d8a83c8243f1f25afe1c3d2fa7297c8b654e5d5210b5f196c7ed2ac50bdb4
|
7
|
+
data.tar.gz: be0923ab8fd3e7567ef325257ecfa1be9a4b0942e45665985d7aa15992a9c3928f591af3ff7c4d599dfb20cd70c1fee3d18193695b63dd4957b1deb0bb8852a3
|
data/HISTORY.rdoc
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
== 0.11.0
|
2
|
+
|
3
|
+
* Partial translations and canonical tags in Rack::Rewritten::Url
|
4
|
+
|
5
|
+
== 0.10.0
|
6
|
+
|
7
|
+
* add Rails URL Helpers
|
8
|
+
|
1
9
|
== 0.9.0
|
2
10
|
|
3
11
|
* always chomp '/' from request_path
|
@@ -5,7 +13,7 @@
|
|
5
13
|
|
6
14
|
== 0.8.0
|
7
15
|
|
8
|
-
* introduce the [
|
16
|
+
* introduce the [L] flag to stop translating
|
9
17
|
|
10
18
|
== 0.7.0
|
11
19
|
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Rewritten [](https://travis-ci.org/learnjin/rewritten/) [](https://travis-ci.org/learnjin/rewritten/) [](https://codeclimate.com/github/learnjin/rewritten) [](https://coveralls.io/r/learnjin/rewritten)
|
2
2
|
=========
|
3
3
|
|
4
4
|
Rewritten is a lookup-based rewriting engine that rewrites requested URLs on
|
data/afile
ADDED
File without changes
|
data/lib/rack/url.rb
CHANGED
@@ -10,11 +10,12 @@ module Rack
|
|
10
10
|
@app = app
|
11
11
|
@translate_backwards = false
|
12
12
|
@downcase_before_lookup = false
|
13
|
+
@translate_partial = false
|
13
14
|
|
14
15
|
instance_eval(&block) if block_given?
|
15
16
|
end
|
16
17
|
|
17
|
-
def call(env)
|
18
|
+
def call(env, tail=nil)
|
18
19
|
req = Rack::Request.new(env)
|
19
20
|
|
20
21
|
subdomain = env["SUBDOMAIN"] ? "#{env["SUBDOMAIN"]}:" : ""
|
@@ -32,26 +33,53 @@ module Rack
|
|
32
33
|
if current_path == req.path_info or ::Rewritten.has_flag?(path, 'L')
|
33
34
|
# if this is the current path, rewrite path and parameters
|
34
35
|
tpath, tparams = split_to_path_params(to)
|
35
|
-
|
36
|
+
|
36
37
|
env['QUERY_STRING'] = Rack::Utils.build_query(tparams.merge(req.params))
|
37
|
-
|
38
|
+
req.path_info = tpath + (tail ? "/"+tail : "")
|
39
|
+
#@app.call(req.env)
|
40
|
+
|
41
|
+
# add the canonical tag to the body
|
42
|
+
status, headers, response = @app.call(req.env)
|
43
|
+
|
44
|
+
if status == 200 && headers["Content-Type"] =~ /text\/html|application\/xhtml\+xml/
|
45
|
+
body = ""
|
46
|
+
response.each { |part| body << part }
|
47
|
+
index = body.rindex("</head>")
|
48
|
+
if index
|
49
|
+
body.insert(index, %Q|<link rel="canonical" href="#{path}"/>| )
|
50
|
+
headers["Content-Length"] = body.length.to_s
|
51
|
+
response = [body]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
[status, headers, response]
|
56
|
+
|
38
57
|
else
|
39
58
|
# if this is not the current path, redirect to current path
|
40
59
|
# NOTE: assuming redirection is always to non-subdomain-path
|
41
|
-
|
60
|
+
|
42
61
|
r = Rack::Response.new
|
43
62
|
|
44
63
|
new_path = env["rack.url_scheme"].dup
|
45
64
|
new_path << "://"
|
46
65
|
new_path << env["HTTP_HOST"].dup.sub(/^#{subdomain.chomp(':')}\./, '')
|
47
|
-
new_path << current_path
|
66
|
+
new_path << current_path + (tail ? "/"+tail : "")
|
48
67
|
new_path << '?' << env["QUERY_STRING"] unless (env["QUERY_STRING"]||'').empty?
|
49
68
|
|
50
69
|
r.redirect(new_path, 301)
|
51
70
|
a = r.finish
|
52
71
|
end
|
53
|
-
|
54
|
-
|
72
|
+
else
|
73
|
+
# Translation of partials (e.g. /some/path/tail -> /translated/path/tail)
|
74
|
+
if(path).count('/') > 1 && translate_partial?
|
75
|
+
parts = path.split('/')
|
76
|
+
req.path_info = parts.slice(0, parts.size-1).join('/')
|
77
|
+
self.call(req.env, parts.last + tail.to_s)
|
78
|
+
else
|
79
|
+
req.path_info = (tail ? req.path_info+"/"+tail : req.path_info)
|
80
|
+
@app.call(req.env)
|
81
|
+
|
82
|
+
end
|
55
83
|
end
|
56
84
|
end
|
57
85
|
|
@@ -64,9 +92,9 @@ module Rack
|
|
64
92
|
private
|
65
93
|
|
66
94
|
def translate_backwards?
|
67
|
-
@translate_backwards
|
95
|
+
@translate_backwards
|
68
96
|
end
|
69
|
-
|
97
|
+
|
70
98
|
def translate_backwards=(yes_or_no)
|
71
99
|
@translate_backwards = yes_or_no
|
72
100
|
end
|
@@ -74,16 +102,18 @@ module Rack
|
|
74
102
|
def downcase_before_lookup?
|
75
103
|
@downcase_before_lookup
|
76
104
|
end
|
77
|
-
|
105
|
+
|
78
106
|
def downcase_before_lookup=(yes_or_no)
|
79
107
|
@downcase_before_lookup = yes_or_no
|
80
108
|
end
|
81
109
|
|
82
|
-
|
110
|
+
def translate_partial?
|
111
|
+
@translate_partial
|
112
|
+
end
|
113
|
+
|
114
|
+
def translate_partial=(yes_or_no)
|
115
|
+
@translate_partial = yes_or_no
|
116
|
+
end
|
83
117
|
end
|
84
118
|
end
|
85
|
-
|
86
119
|
end
|
87
|
-
|
88
|
-
|
89
|
-
|
data/lib/rewritten/version.rb
CHANGED
@@ -60,8 +60,73 @@ describe Rack::Rewritten::Url do
|
|
60
60
|
ret[0].must_equal 200
|
61
61
|
end
|
62
62
|
|
63
|
+
describe "partial translation" do
|
64
|
+
|
65
|
+
before {
|
66
|
+
@request_str = '/foo/baz/with_tail'
|
67
|
+
@env = request_url(@request_str)
|
68
|
+
@html_body = <<-HTML
|
69
|
+
<html>
|
70
|
+
<head></head>
|
71
|
+
<body>Hello</body>
|
72
|
+
</html>
|
73
|
+
HTML
|
74
|
+
}
|
75
|
+
|
76
|
+
it "must not translate partials by default" do
|
77
|
+
@app.expect :call, [200, {'Content-Type' => 'text/plain'},[""]], [Hash]
|
78
|
+
ret = @rack.call @env
|
79
|
+
@app.verify
|
80
|
+
@env['PATH_INFO'].must_equal @request_str
|
81
|
+
end
|
82
|
+
|
83
|
+
it "must translate partials if enabled" do
|
84
|
+
@rack = Rack::Rewritten::Url.new(@app) do
|
85
|
+
self.translate_partial = true
|
86
|
+
end
|
87
|
+
|
88
|
+
@app.expect :call, [200, {'Content-Type' => 'text/html'},[]], [Hash]
|
89
|
+
|
90
|
+
ret = @rack.call @env
|
91
|
+
@app.verify
|
92
|
+
@env['PATH_INFO'].must_equal '/products/1/with_tail'
|
93
|
+
end
|
94
|
+
|
95
|
+
it "must add the canonical tag to pages with trail" do
|
96
|
+
|
97
|
+
@rack = Rack::Rewritten::Url.new(lambda{|env| [200, {'Content-Type' => 'text/html'}, [@html_body]]}) do
|
98
|
+
self.translate_partial = true
|
99
|
+
end
|
100
|
+
|
101
|
+
res,env,body = @rack.call(@env)
|
102
|
+
html = body.join("")
|
103
|
+
html.must_include '<link rel="canonical" href="/foo/baz"/>'
|
104
|
+
end
|
105
|
+
|
106
|
+
it "won't translate segments not by separated by slashes" do
|
107
|
+
@rack = Rack::Rewritten::Url.new(@app) do
|
108
|
+
self.translate_partial = true
|
109
|
+
end
|
110
|
+
@app.expect :call, [200, {'Content-Type' => 'text/plain'},[""]], [Hash]
|
111
|
+
ret = @rack.call @env=request_url('/foo/bazzling')
|
112
|
+
@app.verify
|
113
|
+
@env['PATH_INFO'].must_equal '/foo/bazzling'
|
114
|
+
end
|
115
|
+
|
116
|
+
it "must carry on trail when redirecting" do
|
117
|
+
@rack = Rack::Rewritten::Url.new(@app) do
|
118
|
+
self.translate_partial = true
|
119
|
+
end
|
120
|
+
ret = @rack.call request_url('/foo/bar/with_tail', 'QUERY_STRING' => 'w=1')
|
121
|
+
@app.verify
|
122
|
+
ret[0].must_equal 301
|
123
|
+
ret[1]['Location'].must_equal "http://www.example.org/foo/baz/with_tail?w=1"
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
|
63
128
|
describe "/ behavior" do
|
64
|
-
|
129
|
+
|
65
130
|
it "must 301 redirect paths with / in the end to their chomped version" do
|
66
131
|
ret = @rack.call request_url('/foo/bar/')
|
67
132
|
@app.verify
|
@@ -104,7 +169,7 @@ describe Rack::Rewritten::Url do
|
|
104
169
|
ret[0].must_equal 200
|
105
170
|
end
|
106
171
|
|
107
|
-
it "must redirect from resource url to nice url if enabled
|
172
|
+
it "must redirect from resource url to nice url if enabled" do
|
108
173
|
@rack = Rack::Rewritten::Url.new(@app) do
|
109
174
|
self.translate_backwards = true
|
110
175
|
end
|
@@ -148,7 +213,6 @@ describe Rack::Rewritten::Url do
|
|
148
213
|
|
149
214
|
end
|
150
215
|
|
151
|
-
|
152
216
|
end
|
153
217
|
|
154
218
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rewritten
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kai Rubarth
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-10-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis-namespace
|
@@ -153,6 +153,7 @@ files:
|
|
153
153
|
- HISTORY.rdoc
|
154
154
|
- README.md
|
155
155
|
- Rakefile
|
156
|
+
- afile
|
156
157
|
- bin/rewritten-dump.rb
|
157
158
|
- bin/rewritten-import.rb
|
158
159
|
- bin/rewritten-web.rb
|
@@ -218,7 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
218
219
|
version: '0'
|
219
220
|
requirements: []
|
220
221
|
rubyforge_project: rewritten
|
221
|
-
rubygems_version: 2.0.
|
222
|
+
rubygems_version: 2.0.3
|
222
223
|
signing_key:
|
223
224
|
specification_version: 4
|
224
225
|
summary: A redis-based URL rewriting engine
|