rack-proxy 0.3.3 → 0.3.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/.gitignore +3 -1
- data/Gemfile +4 -0
- data/Gemfile.lock +20 -0
- data/Rakefile +3 -18
- data/Readme +24 -0
- data/lib/net_http_hacked.rb +2 -0
- data/lib/rack-proxy.rb +1 -0
- data/lib/rack/proxy.rb +7 -1
- data/rack-proxy.gemspec +17 -50
- data/test/rack_proxy_test.rb +10 -0
- metadata +42 -19
- data/VERSION +0 -1
data/.gitignore
CHANGED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
data/Rakefile
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
-
require
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
2
3
|
|
4
|
+
require "rake/testtask"
|
3
5
|
task :test do
|
4
6
|
Rake::TestTask.new do |t|
|
5
7
|
t.libs << "test"
|
@@ -9,20 +11,3 @@ task :test do
|
|
9
11
|
end
|
10
12
|
|
11
13
|
task :default => :test
|
12
|
-
|
13
|
-
begin
|
14
|
-
require 'jeweler'
|
15
|
-
Jeweler::Tasks.new do |gem|
|
16
|
-
gem.name = "rack-proxy"
|
17
|
-
gem.summary = "A request/response rewriting HTTP proxy. A Rack app."
|
18
|
-
gem.description = "A Rack app that provides request/response rewriting proxy capabilities with streaming."
|
19
|
-
gem.email = "jacek.becela@gmail.com"
|
20
|
-
gem.homepage = "http://github.com/ncr/rack-proxy"
|
21
|
-
gem.authors = ["Jacek Becela"]
|
22
|
-
gem.add_dependency "rack"
|
23
|
-
gem.add_development_dependency "rack-test"
|
24
|
-
end
|
25
|
-
Jeweler::GemcutterTasks.new
|
26
|
-
rescue LoadError
|
27
|
-
puts "Jeweler not available. Install it with: gem install jeweler"
|
28
|
-
end
|
data/Readme
CHANGED
@@ -1 +1,25 @@
|
|
1
1
|
A request/response rewriting HTTP proxy. A Rack app.
|
2
|
+
|
3
|
+
Subclass Rack::Proxy and provide your rewrite_env and rewrite_response methods.
|
4
|
+
|
5
|
+
Example:
|
6
|
+
|
7
|
+
class Foo < Rack::Proxy
|
8
|
+
|
9
|
+
def rewrite_env(env)
|
10
|
+
env["HTTP_HOST"] = "example.com"
|
11
|
+
|
12
|
+
env
|
13
|
+
end
|
14
|
+
|
15
|
+
def rewrite_response(triplet)
|
16
|
+
status, headers, body = triplet
|
17
|
+
|
18
|
+
headers["X-Foo"] = "Bar"
|
19
|
+
|
20
|
+
triplet
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
See tests for more examples.
|
data/lib/net_http_hacked.rb
CHANGED
@@ -11,6 +11,8 @@
|
|
11
11
|
# but this is not real monkey patching.
|
12
12
|
# I just added some methods and named them very uniquely
|
13
13
|
# to avoid eventual conflicts. You're safe. Trust me.
|
14
|
+
#
|
15
|
+
# Also, in Ruby 1.9.2 you could use Fibers to avoid hacking net/http.
|
14
16
|
|
15
17
|
require 'net/http'
|
16
18
|
|
data/lib/rack-proxy.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "rack/proxy"
|
data/lib/rack/proxy.rb
CHANGED
@@ -5,6 +5,8 @@ module Rack
|
|
5
5
|
|
6
6
|
# Subclass and bring your own #rewrite_request and #rewrite_response
|
7
7
|
class Proxy
|
8
|
+
VERSION = "0.3.4"
|
9
|
+
|
8
10
|
def call(env)
|
9
11
|
rewrite_response(perform_request(rewrite_env(env)))
|
10
12
|
end
|
@@ -47,7 +49,7 @@ module Rack
|
|
47
49
|
headers = env.reject do |k, v|
|
48
50
|
!(/^HTTP_[A-Z_]+$/ === k)
|
49
51
|
end.map do |k, v|
|
50
|
-
[k
|
52
|
+
[reconstruct_header_name(k), v]
|
51
53
|
end.inject(Utils::HeaderHash.new) do |hash, k_v|
|
52
54
|
k, v = k_v
|
53
55
|
hash[k] = v
|
@@ -59,6 +61,10 @@ module Rack
|
|
59
61
|
headers.merge!("X-Forwarded-For" => x_forwarded_for)
|
60
62
|
end
|
61
63
|
|
64
|
+
def reconstruct_header_name(name)
|
65
|
+
name.sub(/^HTTP_/, "").gsub("_", "-")
|
66
|
+
end
|
67
|
+
|
62
68
|
end
|
63
69
|
|
64
70
|
end
|
data/rack-proxy.gemspec
CHANGED
@@ -1,57 +1,24 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "rack-proxy"
|
5
4
|
|
6
5
|
Gem::Specification.new do |s|
|
7
|
-
s.name
|
8
|
-
s.version
|
9
|
-
|
10
|
-
s.
|
11
|
-
s.
|
12
|
-
s.
|
6
|
+
s.name = "rack-proxy"
|
7
|
+
s.version = Rack::Proxy::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Jacek Becela"]
|
10
|
+
s.email = ["jacek.becela@gmail.com"]
|
11
|
+
s.homepage = "http://rubygems.org/gems/rack-proxy"
|
12
|
+
s.summary = %q{A request/response rewriting HTTP proxy. A Rack app.}
|
13
13
|
s.description = %q{A Rack app that provides request/response rewriting proxy capabilities with streaming.}
|
14
|
-
s.email = %q{jacek.becela@gmail.com}
|
15
|
-
s.files = [
|
16
|
-
".gitignore",
|
17
|
-
"Rakefile",
|
18
|
-
"Readme",
|
19
|
-
"VERSION",
|
20
|
-
"lib/net_http_hacked.rb",
|
21
|
-
"lib/rack/http_streaming_response.rb",
|
22
|
-
"lib/rack/proxy.rb",
|
23
|
-
"rack-proxy.gemspec",
|
24
|
-
"test/http_streaming_response_test.rb",
|
25
|
-
"test/net_http_hacked_test.rb",
|
26
|
-
"test/rack_proxy_test.rb",
|
27
|
-
"test/test_helper.rb"
|
28
|
-
]
|
29
|
-
s.homepage = %q{http://github.com/ncr/rack-proxy}
|
30
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
31
|
-
s.require_paths = ["lib"]
|
32
|
-
s.rubygems_version = %q{1.3.5}
|
33
|
-
s.summary = %q{A request/response rewriting HTTP proxy. A Rack app.}
|
34
|
-
s.test_files = [
|
35
|
-
"test/http_streaming_response_test.rb",
|
36
|
-
"test/net_http_hacked_test.rb",
|
37
|
-
"test/rack_proxy_test.rb",
|
38
|
-
"test/test_helper.rb"
|
39
|
-
]
|
40
14
|
|
41
|
-
|
42
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
43
|
-
s.specification_version = 3
|
15
|
+
s.rubyforge_project = "rack-proxy"
|
44
16
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
s.add_dependency(%q<rack>, [">= 0"])
|
50
|
-
s.add_dependency(%q<rack-test>, [">= 0"])
|
51
|
-
end
|
52
|
-
else
|
53
|
-
s.add_dependency(%q<rack>, [">= 0"])
|
54
|
-
s.add_dependency(%q<rack-test>, [">= 0"])
|
55
|
-
end
|
56
|
-
end
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
57
21
|
|
22
|
+
s.add_dependency("rack")
|
23
|
+
s.add_development_dependency("rack-test")
|
24
|
+
end
|
data/test/rack_proxy_test.rb
CHANGED
@@ -19,4 +19,14 @@ class RackProxyTest < Test::Unit::TestCase
|
|
19
19
|
assert last_response.ok?
|
20
20
|
assert /Jacek Becela/ === last_response.body
|
21
21
|
end
|
22
|
+
|
23
|
+
def test_header_reconstruction
|
24
|
+
proxy = Rack::Proxy.new
|
25
|
+
|
26
|
+
header = proxy.send(:reconstruct_header_name, "HTTP_ABC")
|
27
|
+
assert header == "ABC"
|
28
|
+
|
29
|
+
header = proxy.send(:reconstruct_header_name, "HTTP_ABC_D")
|
30
|
+
assert header == "ABC-D"
|
31
|
+
end
|
22
32
|
end
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-proxy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 27
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 3
|
9
|
+
- 4
|
10
|
+
version: 0.3.4
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Jacek Becela
|
@@ -9,31 +15,40 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date: 2010-
|
18
|
+
date: 2010-11-04 00:00:00 +01:00
|
13
19
|
default_executable:
|
14
20
|
dependencies:
|
15
21
|
- !ruby/object:Gem::Dependency
|
16
22
|
name: rack
|
17
|
-
|
18
|
-
|
19
|
-
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
20
26
|
requirements:
|
21
27
|
- - ">="
|
22
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
23
32
|
version: "0"
|
24
|
-
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
25
35
|
- !ruby/object:Gem::Dependency
|
26
36
|
name: rack-test
|
27
|
-
|
28
|
-
|
29
|
-
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
30
40
|
requirements:
|
31
41
|
- - ">="
|
32
42
|
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
33
46
|
version: "0"
|
34
|
-
|
47
|
+
type: :development
|
48
|
+
version_requirements: *id002
|
35
49
|
description: A Rack app that provides request/response rewriting proxy capabilities with streaming.
|
36
|
-
email:
|
50
|
+
email:
|
51
|
+
- jacek.becela@gmail.com
|
37
52
|
executables: []
|
38
53
|
|
39
54
|
extensions: []
|
@@ -42,10 +57,12 @@ extra_rdoc_files: []
|
|
42
57
|
|
43
58
|
files:
|
44
59
|
- .gitignore
|
60
|
+
- Gemfile
|
61
|
+
- Gemfile.lock
|
45
62
|
- Rakefile
|
46
63
|
- Readme
|
47
|
-
- VERSION
|
48
64
|
- lib/net_http_hacked.rb
|
65
|
+
- lib/rack-proxy.rb
|
49
66
|
- lib/rack/http_streaming_response.rb
|
50
67
|
- lib/rack/proxy.rb
|
51
68
|
- rack-proxy.gemspec
|
@@ -54,30 +71,36 @@ files:
|
|
54
71
|
- test/rack_proxy_test.rb
|
55
72
|
- test/test_helper.rb
|
56
73
|
has_rdoc: true
|
57
|
-
homepage: http://
|
74
|
+
homepage: http://rubygems.org/gems/rack-proxy
|
58
75
|
licenses: []
|
59
76
|
|
60
77
|
post_install_message:
|
61
|
-
rdoc_options:
|
62
|
-
|
78
|
+
rdoc_options: []
|
79
|
+
|
63
80
|
require_paths:
|
64
81
|
- lib
|
65
82
|
required_ruby_version: !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
66
84
|
requirements:
|
67
85
|
- - ">="
|
68
86
|
- !ruby/object:Gem::Version
|
87
|
+
hash: 3
|
88
|
+
segments:
|
89
|
+
- 0
|
69
90
|
version: "0"
|
70
|
-
version:
|
71
91
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
|
+
none: false
|
72
93
|
requirements:
|
73
94
|
- - ">="
|
74
95
|
- !ruby/object:Gem::Version
|
96
|
+
hash: 3
|
97
|
+
segments:
|
98
|
+
- 0
|
75
99
|
version: "0"
|
76
|
-
version:
|
77
100
|
requirements: []
|
78
101
|
|
79
|
-
rubyforge_project:
|
80
|
-
rubygems_version: 1.3.
|
102
|
+
rubyforge_project: rack-proxy
|
103
|
+
rubygems_version: 1.3.7
|
81
104
|
signing_key:
|
82
105
|
specification_version: 3
|
83
106
|
summary: A request/response rewriting HTTP proxy. A Rack app.
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.3.3
|