oaf 0.1.15 → 0.1.16
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 +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
|