Module: Takagi::Helpers

Included in:
Router::MetadataExtractor::MetadataExtractionContext, Router::RouteContext
Defined in:
lib/takagi/helpers.rb

Overview

Helper methods for route handlers to improve DX

Dynamically generates response helper methods from CoAP::Registries::Response registry:

  • Success methods (2.xx): created(data = {}), changed(data = {}), etc.

  • Error methods (4.xx, 5.xx): bad_request(message = …), not_found(message = …), etc.

Examples:

Success response

created({ id: 123, name: 'Resource' })

Error response

bad_request('Invalid input')
unauthorized({ error: 'Token expired' })

Instance Method Summary collapse

Instance Method Details

#halt(response) ⇒ Object

Halts execution and returns the given response Useful for early returns

Parameters:



52
53
54
# File 'lib/takagi/helpers.rb', line 52

def halt(response)
  throw :halt, response
end

#json(data = {}) ⇒ Takagi::Message::Outbound

Returns a JSON response with 2.05 Content status and sets Content-Format to application/json Similar to Sinatra’s json helper, automatically sets the Content-Format option

Parameters:

  • data (Hash) (defaults to: {})

    The data to return as JSON

Returns:



35
36
37
# File 'lib/takagi/helpers.rb', line 35

def json(data = {})
  respond(data, code: CoAP::Registries::Response.value_for(:content), formats: [Takagi::Router::DEFAULT_CONTENT_FORMAT])
end

#respond(payload = {}, code: CoAP::Registries::Response::CONTENT, formats: nil, force: nil, options: {}) ⇒ Object

Respond with content-format negotiation handled automatically.

Parameters:

  • payload (Object) (defaults to: {})

    The payload to send

  • code (Integer, String, Symbol) (defaults to: CoAP::Registries::Response::CONTENT)

    CoAP response code (defaults to 2.05 Content)

  • formats (Array<Integer, Symbol, String>, nil) (defaults to: nil)

    Allowed content-formats (defaults to router default)

  • force (Integer, Symbol, String, nil) (defaults to: nil)

    Force a specific content-format code

  • options (Hash) (defaults to: {})

    Additional CoAP options



26
27
28
29
# File 'lib/takagi/helpers.rb', line 26

def respond(payload = {}, code: CoAP::Registries::Response::CONTENT, formats: nil, force: nil, options: {})
  formats ||= core_content_formats if respond_to?(:core_content_formats, true)
  ResponseBuilder.respond(request, payload, code: code, formats: formats, force: force, options: options, logger: Takagi.logger)
end

#validate_params(*required_params) ⇒ Object

Validates that required parameters are present

Parameters:

  • required_params (Array<Symbol>)

    List of required parameter names

Raises:

  • (StandardError)

    If any required parameter is missing



42
43
44
45
46
47
# File 'lib/takagi/helpers.rb', line 42

def validate_params(*required_params)
  missing = required_params.select { |param| params[param].nil? }
  return if missing.empty?

  raise ArgumentError, "Missing required parameters: #{missing.join(', ')}"
end