oaf 0.1.15 → 0.1.16
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/oaf/http.rb +2 -2
- data/lib/oaf/util.rb +23 -5
- data/lib/oaf/version.rb +1 -1
- data/spec/oaf/util_spec.rb +14 -3
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YWEwNzM1MGU4YmJkNGRmYmZiZmQ5N2I3YWQyNjEyYzkyYjM0ZWRiOQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZDVhMjQ1ZWJkMWNlNmY1ZjYxOGI3Y2ZkOTZjOWNiYmFhNWI2MmJlMg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZWM5ODdmYTQzNDE4Y2YxMWEwZTViMmQwOTQ2YzRjYWNiNTA4Yjk5N2EyZDdi
|
10
|
+
YjI0ZTMwZTlhODMzMGRiZTFiNmRjYzVkMjVjOWQ0NmEyODRiYTg5YjA0ZGUy
|
11
|
+
MGRiNGQzODExYzcxMzdiYzJlMTI1MjhhYzEzMjBkY2ViZGUwM2E=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OTAzMjI5OTcxMTk1ZGY5MzY0MjVjMTE1NTE4ZDVlMWNmZWRjM2M5NTdmY2Qw
|
14
|
+
ZTE0ZmRkZTNhNTRkYjExMjA5MjJjOTIwOTlkYjM4NDAyMDg5MWRmM2ZkY2Q5
|
15
|
+
ZTEzMDdlOGNhNTUxN2YyMmUxZjI1ODRiNzA1YThiNWM3MmIwY2Q=
|
data/lib/oaf/http.rb
CHANGED
@@ -62,7 +62,7 @@ module Oaf
|
|
62
62
|
server = WEBrick::HTTPServer.new :Port => port
|
63
63
|
server.mount_proc '/' do |req, res|
|
64
64
|
req_body = ''
|
65
|
-
req_headers = Oaf::Util.
|
65
|
+
req_headers = Oaf::Util.format_hash req.header
|
66
66
|
if ['POST', 'PUT'].member? req.request_method
|
67
67
|
begin
|
68
68
|
req_body = req.body
|
@@ -73,7 +73,7 @@ module Oaf
|
|
73
73
|
req_body = req.query
|
74
74
|
end
|
75
75
|
file = Oaf::Util.get_request_file path, req.path, req.request_method
|
76
|
-
out = Oaf::Util.get_output file,
|
76
|
+
out = Oaf::Util.get_output file, req_headers, req_body
|
77
77
|
headers, status, body = Oaf::HTTP.parse_response out
|
78
78
|
headers.each do |name, value|
|
79
79
|
res.header[name] = value
|
data/lib/oaf/util.rb
CHANGED
@@ -20,6 +20,8 @@
|
|
20
20
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
21
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
22
|
|
23
|
+
require 'open3'
|
24
|
+
|
23
25
|
module Oaf
|
24
26
|
|
25
27
|
module Util
|
@@ -83,8 +85,8 @@ module Oaf
|
|
83
85
|
.concat((500..505).to_a).include? code.to_i
|
84
86
|
end
|
85
87
|
|
86
|
-
# Format a hash
|
87
|
-
#
|
88
|
+
# Format a hash in preparation for passing it to an executable program as
|
89
|
+
# an argument on the command line.
|
88
90
|
#
|
89
91
|
# == Parameters:
|
90
92
|
# headers::
|
@@ -94,9 +96,9 @@ module Oaf
|
|
94
96
|
# A comma-delimited, colon-separated list of header names and values. The
|
95
97
|
# return value of this function should be parsed according to RFC2616.
|
96
98
|
#
|
97
|
-
def
|
99
|
+
def format_hash hash
|
98
100
|
result = ''
|
99
|
-
|
101
|
+
hash.each do |name, value|
|
100
102
|
result += "#{name}:#{value},"
|
101
103
|
end
|
102
104
|
result.sub!(/,$/, '')
|
@@ -174,6 +176,22 @@ module Oaf
|
|
174
176
|
File.exist?(file) ? file : nil
|
175
177
|
end
|
176
178
|
|
179
|
+
# Run a command with stdout and stderr buffered. This suppresses error
|
180
|
+
# messages from the server process and enables us to return them in the
|
181
|
+
# HTTP response instead.
|
182
|
+
#
|
183
|
+
# == Parameters:
|
184
|
+
# command::
|
185
|
+
# The command to execute against the server
|
186
|
+
#
|
187
|
+
# == Returns:
|
188
|
+
# A string of stderr concatenated to stdout.
|
189
|
+
#
|
190
|
+
def run_buffered command
|
191
|
+
stdin, stdout, stderr = Open3.popen3 command
|
192
|
+
stdout.read + stderr.read
|
193
|
+
end
|
194
|
+
|
177
195
|
# Executes a file, or reads its contents if it is not executable, passing
|
178
196
|
# it the request headers and body as arguments, and returns the result.
|
179
197
|
#
|
@@ -192,7 +210,7 @@ module Oaf
|
|
192
210
|
if file.nil?
|
193
211
|
out = Oaf::Util.get_default_response
|
194
212
|
elsif File.executable? file
|
195
|
-
out =
|
213
|
+
out = Oaf::Util.run_buffered "#{file} '#{headers}' '#{body}'"
|
196
214
|
else
|
197
215
|
out = File.open(file).read
|
198
216
|
end
|
data/lib/oaf/version.rb
CHANGED
data/spec/oaf/util_spec.rb
CHANGED
@@ -83,19 +83,19 @@ module Oaf
|
|
83
83
|
describe "Format Request Headers" do
|
84
84
|
it "should return a single key/value for just one header" do
|
85
85
|
headers = [['x-powered-by', 'oaf']]
|
86
|
-
result = Oaf::Util.
|
86
|
+
result = Oaf::Util.format_hash headers
|
87
87
|
result.should eq('x-powered-by:oaf')
|
88
88
|
end
|
89
89
|
|
90
90
|
it "should return a comma-delimited list for multiple headers" do
|
91
91
|
headers = [['x-powered-by', 'oaf'], ['content-type', 'text/plain']]
|
92
|
-
result = Oaf::Util.
|
92
|
+
result = Oaf::Util.format_hash headers
|
93
93
|
result.should eq('x-powered-by:oaf,content-type:text/plain')
|
94
94
|
end
|
95
95
|
|
96
96
|
it "should return nil if no headers present" do
|
97
97
|
headers = []
|
98
|
-
result = Oaf::Util.
|
98
|
+
result = Oaf::Util.format_hash headers
|
99
99
|
result.should be_nil
|
100
100
|
end
|
101
101
|
end
|
@@ -189,11 +189,17 @@ module Oaf
|
|
189
189
|
@f2.chmod 0644
|
190
190
|
@f2.write "This is a test\n"
|
191
191
|
@f2.close
|
192
|
+
|
193
|
+
@f3 = Tempfile.new 'oaf'
|
194
|
+
@f3.chmod 0755
|
195
|
+
@f3.write "#!/bin/bash\necho 'This is a test' 1>&2\n"
|
196
|
+
@f3.close
|
192
197
|
end
|
193
198
|
|
194
199
|
after(:all) do
|
195
200
|
@f1.delete
|
196
201
|
@f2.delete
|
202
|
+
@f3.delete
|
197
203
|
end
|
198
204
|
|
199
205
|
it "should execute a file if it is executable" do
|
@@ -210,5 +216,10 @@ module Oaf
|
|
210
216
|
result = Oaf::Util.get_output nil, nil, nil
|
211
217
|
result.should eq(Oaf::Util.get_default_response)
|
212
218
|
end
|
219
|
+
|
220
|
+
it "should catch stderr output instead of dumping it" do
|
221
|
+
result = Oaf::Util.get_output @f3.path, nil, nil
|
222
|
+
result.should eq("This is a test\n")
|
223
|
+
end
|
213
224
|
end
|
214
225
|
end
|