Class: Wsv::App

Inherits:
Object
  • Object
show all
Defined in:
lib/wsv/app.rb

Constant Summary collapse

ALLOWED_METHODS =
%w[GET HEAD].freeze

Instance Method Summary collapse

Constructor Details

#initialize(root) ⇒ App

Returns a new instance of App.



10
11
12
# File 'lib/wsv/app.rb', line 10

def initialize(root)
  @resolver = PathResolver.new(root)
end

Instance Method Details

#call(request) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/wsv/app.rb', line 14

def call(request)
  head = request.head?

  unless ALLOWED_METHODS.include?(request.method)
    return Response.text(405, headers: { "Allow" => "GET, HEAD" }, head: head)
  end

  raw_path, query = request.target.split("?", 2)
  result = @resolver.resolve(raw_path)

  return Response.text(result.status, head: head) if result.error?
  return Response.redirect(redirect_location(raw_path, query), head: head) if result.redirect?

  Response.file(result.file, head: head)
end