Class: Gack::Response

Inherits:
Object
  • Object
show all
Defined in:
lib/gack/response.rb,
lib/gack/response/status_codes.rb

Overview

Build a Gemini response

Defined Under Namespace

Classes: StatusCodes

Constant Summary collapse

InvalidStatusCodeError =
Class.new(StandardError)
BodyNotAllowedError =
Class.new(StandardError)
MetaTooLongError =
Class.new(StandardError)
InvalidMimeError =
Class.new(StandardError)
META_MAX_BYTES =
1024
MIME =
{
  text: 'text/gemini'
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(status_code, meta = nil, body = nil) ⇒ Response

Returns a new instance of Response.



21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/gack/response.rb', line 21

def initialize(status_code, meta = nil, body = nil)
  @status_code = Integer(status_code)

  raise InvalidStatusCodeError unless StatusCodes::VALID_CODES.include?(@status_code)

  @meta = meta

  raise MetaTooLongError if @meta && @meta.bytesize > META_MAX_BYTES
  raise InvalidMimeError if @status_code == StatusCodes::SUCCESS && @meta.nil?

  @body = body

  raise BodyNotAllowedError if @body && @status_code != StatusCodes::SUCCESS
end

Instance Attribute Details

#bodyObject (readonly)

Returns the value of attribute body.



19
20
21
# File 'lib/gack/response.rb', line 19

def body
  @body
end

#metaObject (readonly)

Returns the value of attribute meta.



19
20
21
# File 'lib/gack/response.rb', line 19

def meta
  @meta
end

#status_codeObject (readonly)

Returns the value of attribute status_code.



19
20
21
# File 'lib/gack/response.rb', line 19

def status_code
  @status_code
end

Instance Method Details

#finalizeObject



36
37
38
39
40
# File 'lib/gack/response.rb', line 36

def finalize
  return "#{status_code}\r\n" unless meta

  "#{status_code} #{meta}\r\n#{body}"
end