Class: QuickServe::Handlers::Request

Inherits:
Directory
  • Object
show all
Defined in:
lib/quick_serve/handlers/request.rb

Constant Summary

Constants inherited from Directory

Directory::STYLESHEET

Instance Method Summary collapse

Methods inherited from Directory

#send_dir_listing

Constructor Details

#initialize(dir) ⇒ Request

Returns a new instance of Request.



5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/quick_serve/handlers/request.rb', line 5

def initialize(dir)
  @responses = {}
  responses = File.read(File.join("#{Dir.pwd}", 'responses.qs')).gsub(/#.*/, '').split('==')[1..-1]
  responses.each do |response|
    parts = response.split("\n")
    method, url, content_type   = parts.shift.gsub(/(^\s)(.*)(\s$)/, '\\2').gsub(/(\s+)/, ' ').split(' ')      
    body = parts.join("\n")
    @responses["#{method} #{url}"] = {
      :body => body,
      :content_type => (content_type || "text/html")
    }
  end
  super
end

Instance Method Details

#original_processObject



20
# File 'lib/quick_serve/handlers/request.rb', line 20

alias :original_process :process

#process(request, response) ⇒ Object



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
47
# File 'lib/quick_serve/handlers/request.rb', line 22

def process(request, response)
  method = request.params['REQUEST_METHOD'].downcase
  if method == 'post'
    params = {}
    raw = request.body.read
    raw.split('&').each { |param| parts = param.split('='); params[parts.first] = parts.last }
    method = params['_method'] if params['_method'] and ['put', 'delete'].include?(params['_method'])
  end
  url = request.params['REQUEST_PATH']
  qs_response = @responses["#{method} #{url}"]
  # if not found, try a more generic approach
  if !qs_response
    url.gsub!(/(\d+)/, '*')
    qs_response = @responses["#{method} #{url}"]
  end
  if qs_response
    response.start do |head,out|
      puts "quick_serve: served #{qs_response[:content_type]} response for of #{url}"
      head["Content-Type"] = qs_response[:content_type]
      out << qs_response[:body]
    end
  else
    original_process(request, response)  
  end
  
end