Class: Takagi::ResponseBuilder
- Inherits:
-
Object
- Object
- Takagi::ResponseBuilder
- Defined in:
- lib/takagi/response_builder.rb
Overview
Builds CoAP responses from middleware results
Constant Summary collapse
- DEFAULT_RESPONSE_CODE =
CoAP::Registries::Response::CONTENT
Class Method Summary collapse
-
.build(inbound_request, result, logger: nil) ⇒ Takagi::Message::Outbound
Builds a response from the middleware result.
-
.respond(inbound_request, payload, code: DEFAULT_RESPONSE_CODE, formats: nil, force: nil, options: {}, logger: nil) ⇒ Takagi::Message::Outbound
Build a CoAP response with content-format negotiation.
Class Method Details
.build(inbound_request, result, logger: nil) ⇒ Takagi::Message::Outbound
Builds a response from the middleware result
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/takagi/response_builder.rb', line 17 def self.build(inbound_request, result, logger: nil) Takagi::Hooks.emit(:before_response_build, inbound: inbound_request, result: result) case result when Takagi::Message::Outbound response = result when Hash, String logger&.debug("Returned #{result.class} as response") response = respond(inbound_request, result, logger: logger) else logger&.warn("Middleware returned non-Hash: #{result.inspect}") response = inbound_request.to_response('5.00 Internal Server Error', { error: 'Internal Server Error' }) end Takagi::Hooks.emit(:after_response_build, inbound: inbound_request, response: response, result: result) response end |
.respond(inbound_request, payload, code: DEFAULT_RESPONSE_CODE, formats: nil, force: nil, options: {}, logger: nil) ⇒ Takagi::Message::Outbound
Build a CoAP response with content-format negotiation.
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/takagi/response_builder.rb', line 45 def self.respond(inbound_request, payload, code: DEFAULT_RESPONSE_CODE, formats: nil, force: nil, options: {}, logger: nil) requested_formats = formats || inbound_request&.content_format allowed_formats = normalize_formats(requested_formats) forced_format = normalize_format(force) accept_format = normalize_format(extract_accept(inbound_request)) selected_format = select_format(allowed_formats, accept_format, forced_format, logger) case selected_format when :not_acceptable return inbound_request.to_response(CoAP::Registries::Response::NOT_ACCEPTABLE, { error: 'Not Acceptable' }) when :unsupported return inbound_request.to_response(CoAP::Registries::Response::UNSUPPORTED_CONTENT_FORMAT, { error: 'Unsupported Content-Format' }) end = ( || {}).dup if selected_format [CoAP::Registries::Option::CONTENT_FORMAT] ||= [selected_format] end inbound_request.to_response(code, payload, options: ) end |