-
Notifications
You must be signed in to change notification settings - Fork 10
/
response.rb
46 lines (35 loc) · 1.06 KB
/
response.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
require 'erb'
module SecondMate
class Response < Rack::Response
attr_accessor :body, :params, :status, :header
def initialize(body=[], params={}, status=200, header={})
@body = body
@params = params
@status = status
@header = header
process_yaml
render_template
super self.body, self.status, self.header
end
private
def process_yaml
if self.body =~ /^(---\s*\n.*?\n?)^(---\s*$\n?)/m
self.body = self.body[($1.size + $2.size)..-1]
begin
data = YAML.load($1)
# Use specified HTTP status
self.status = data['status'] if data['status']
# Fill header information
data['header'].each { |field, value| self.header[field] = value } if data['header'].kind_of? Hash
self.header['second_mate.yaml_frontmatter'] = 'Yes'
rescue => e
self.header['second_mate.yaml_frontmatter'] = 'Error'
end
end
end
def render_template
erb = ERB.new @body
@body = erb.result binding
end
end
end