Class: Linzer::Message

Inherits:
Object
  • Object
show all
Defined in:
lib/linzer/message.rb

Constant Summary collapse

DERIVED_COMPONENT =
{
  method:           :request_method,
  authority:        :authority,
  path:             :path_info,
  status:           :status,
  "target-uri":     :url,
  scheme:           :scheme,
  "request-target": :fullpath,
  query:            :query_string
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(operation, attached_request: nil) ⇒ Message

Returns a new instance of Message.



5
6
7
8
9
10
# File 'lib/linzer/message.rb', line 5

def initialize(operation, attached_request: nil)
  @operation = operation
  validate
  @attached_request = attached_request ? Message.new(attached_request) : nil
  freeze
end

Class Method Details

.parse_structured_dictionary(str, field_name = nil) ⇒ Object



58
59
60
61
62
# File 'lib/linzer/message.rb', line 58

def parse_structured_dictionary(str, field_name = nil)
  Starry.parse_dictionary(str)
rescue Starry::ParseError => _
  raise Error.new "Cannot parse \"#{field_name}\" field. Bailing out!"
end

Instance Method Details

#[](field_name) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/linzer/message.rb', line 45

def [](field_name)
  name = parse_field_name(field_name)
  return nil if name.nil?

  if field_name.start_with?("@")
    return nil if name.parameters["tr"]
    retrieve(name, :derived)
  else
    retrieve(name, :field)
  end
end

#attached_request?Boolean

Returns:

  • (Boolean)


20
21
22
# File 'lib/linzer/message.rb', line 20

def attached_request?
  !!@attached_request
end

#field?(f) ⇒ Boolean

Returns:

  • (Boolean)


30
31
32
# File 'lib/linzer/message.rb', line 30

def field?(f)
  !!self[f]
end

#headersObject



24
25
26
27
28
# File 'lib/linzer/message.rb', line 24

def headers
  return @operation.headers if response? || @operation.respond_to?(:headers)

  Request.headers(@operation)
end

#request?Boolean

Returns:

  • (Boolean)


12
13
14
# File 'lib/linzer/message.rb', line 12

def request?
  @operation.is_a?(Rack::Request) || @operation.respond_to?(:request_method)
end

#response?Boolean

Returns:

  • (Boolean)


16
17
18
# File 'lib/linzer/message.rb', line 16

def response?
  @operation.is_a?(Rack::Response) || @operation.respond_to?(:status)
end