cachable_url 0.0.1 → 1.0.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/cachable_url.gemspec +1 -1
- data/lib/cachable_url.rb +2 -2
- data/lib/cachable_url/middleware.rb +3 -2
- data/lib/cachable_url/version.rb +1 -1
- data/spec/encoder_spec.rb +12 -0
- data/spec/middleware_spec.rb +14 -9
- metadata +5 -5
data/cachable_url.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.authors = ["Tom Lea"]
|
9
9
|
s.email = ["commit@tomlea.co.uk"]
|
10
10
|
s.homepage = "http://tomlea.co.uk"
|
11
|
-
s.summary = %q{Hide query strings so caches can't see them.
|
11
|
+
s.summary = %q{Hide query strings so caches can't see them.}
|
12
12
|
s.description = %q{Replace all '?'s in URLs with '%1F' (the ASCII unit separator char), and a middleware to undo it before your rack app sees.}
|
13
13
|
|
14
14
|
s.rubyforge_project = "cachable_url"
|
data/lib/cachable_url.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require "cachable_url"
|
2
2
|
|
3
|
-
class CachableUrl::
|
3
|
+
class CachableUrl::Middleware
|
4
4
|
def initialize(app)
|
5
5
|
@app = app
|
6
6
|
end
|
@@ -8,10 +8,11 @@ class CachableUrl::Midleware
|
|
8
8
|
def call(env)
|
9
9
|
if env["QUERY_STRING"] == ''
|
10
10
|
env = env.clone
|
11
|
-
path, query = env["PATH_INFO"].split("%
|
11
|
+
path, query = env["PATH_INFO"].split("%1f", 2)
|
12
12
|
query = CachableUrl.decode(query || "")
|
13
13
|
env["PATH_INFO"] = path
|
14
14
|
env["QUERY_STRING"] = query
|
15
|
+
env["REQUEST_URI"] = CachableUrl.decode(env["REQUEST_URI"])
|
15
16
|
@app.call(env)
|
16
17
|
else
|
17
18
|
@app.call(env)
|
data/lib/cachable_url/version.rb
CHANGED
data/spec/encoder_spec.rb
CHANGED
@@ -22,4 +22,16 @@ describe CachableUrl do
|
|
22
22
|
|
23
23
|
end
|
24
24
|
|
25
|
+
describe ".encode(nil)" do
|
26
|
+
it "is nil" do
|
27
|
+
CachableUrl.encode(nil).should be_nil
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe ".decode(nil)" do
|
32
|
+
it "is nil" do
|
33
|
+
CachableUrl.decode(nil).should be_nil
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
25
37
|
end
|
data/spec/middleware_spec.rb
CHANGED
@@ -1,42 +1,47 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe CachableUrl::
|
3
|
+
describe CachableUrl::Middleware do
|
4
4
|
include Rack::Test::Methods
|
5
5
|
|
6
6
|
let(:requests_received){ [] }
|
7
7
|
|
8
8
|
def app
|
9
9
|
logger_app = lambda{|env| requests_received << env; [200, {"Content-Type" => 'text/plain'}, ["Hello world"]] }
|
10
|
-
CachableUrl::
|
10
|
+
CachableUrl::Middleware.new(logger_app)
|
11
|
+
end
|
12
|
+
|
13
|
+
def get_with_env(path)
|
14
|
+
get(path, {}, "REQUEST_URI" => path)
|
11
15
|
end
|
12
16
|
|
13
17
|
it "should pass through requests with query strings" do
|
14
|
-
|
18
|
+
get_with_env "/fooooooo%1f?foo=bar"
|
15
19
|
|
16
20
|
requests_received.size.should == 1
|
17
21
|
requests_received.last["QUERY_STRING"].should == "foo=bar"
|
18
|
-
requests_received.last["PATH_INFO"].should == "/fooooooo%
|
22
|
+
requests_received.last["PATH_INFO"].should == "/fooooooo%1f"
|
19
23
|
end
|
20
24
|
|
21
25
|
it "should decode requests with no query strings" do
|
22
|
-
|
26
|
+
get_with_env "/fooooooo%1ffoo=bar"
|
23
27
|
|
24
28
|
requests_received.size.should == 1
|
25
29
|
requests_received.last["QUERY_STRING"].should == "foo=bar"
|
26
30
|
requests_received.last["PATH_INFO"].should == "/fooooooo"
|
31
|
+
requests_received.last["REQUEST_URI"].should == "/fooooooo?foo=bar"
|
27
32
|
end
|
28
33
|
|
29
34
|
it "should decode requests with no query strings to the same thing as the query string based request" do
|
30
|
-
|
31
|
-
|
35
|
+
get_with_env "/fooooooo%1ffoo=bar"
|
36
|
+
get_with_env "/fooooooo?foo=bar"
|
32
37
|
|
33
38
|
requests_received.size.should == 2
|
34
|
-
a,b =
|
39
|
+
a,b = cleanse_responses(*requests_received.last(2))
|
35
40
|
a.should == b
|
36
41
|
end
|
37
42
|
|
38
43
|
protected
|
39
|
-
def
|
44
|
+
def cleanse_responses(*args)
|
40
45
|
args.map{|r|
|
41
46
|
r.delete_if{|key, value|
|
42
47
|
["rack.input", "rack.errors"].include? key
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cachable_url
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
|
+
- 1
|
7
8
|
- 0
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.1
|
10
|
+
version: 1.0.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tom Lea
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-02-
|
18
|
+
date: 2012-02-21 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
requirement: &id001 !ruby/object:Gem::Requirement
|
@@ -111,7 +111,7 @@ rubyforge_project: cachable_url
|
|
111
111
|
rubygems_version: 1.8.15
|
112
112
|
signing_key:
|
113
113
|
specification_version: 3
|
114
|
-
summary: Hide query strings so caches can't see them.
|
114
|
+
summary: Hide query strings so caches can't see them.
|
115
115
|
test_files:
|
116
116
|
- spec/encoder_spec.rb
|
117
117
|
- spec/middleware_spec.rb
|