Class: Takagi::Base

Inherits:
Router show all
Extended by:
MiddlewareManagement, PluginManagement, ReactorManagement, ServerLifecycle
Defined in:
lib/takagi/base.rb,
lib/takagi/base/server_lifecycle.rb,
lib/takagi/base/plugin_management.rb,
lib/takagi/base/reactor_management.rb,
lib/takagi/base/middleware_management.rb,
sig/takagi/base.rbs,
sig/takagi/base/server_lifecycle.rbs,
sig/takagi/base/reactor_management.rbs,
sig/takagi/base/middleware_management.rbs

Overview

Base class that every Takagi based app should use.

Provides a Sinatra-like DSL for building CoAP servers with support for:

  • Route registration (GET, POST, PUT, DELETE, OBSERVE)
  • Middleware stack
  • Reactor pattern for observables/observers
  • Multi-protocol servers (UDP, TCP)

This class now follows Single Responsibility Principle by delegating specific concerns to focused modules:

  • ServerLifecycle: Boot, run, spawn operations
  • MiddlewareManagement: Middleware stack configuration
  • ReactorManagement: Observable/observer patterns

Examples:

Basic usage

class MyAPI < Takagi::Base
  get '/temperature' do
    { value: 25.5, unit: 'C' }
  end
end

MyAPI.run!

Direct Known Subclasses

Network::Tcp, Network::Udp

Defined Under Namespace

Modules: MiddlewareManagement, PluginManagement, ReactorManagement, ServerLifecycle

Constant Summary

Constants inherited from Router

Router::DEFAULT_CONTENT_FORMAT

Class Method Summary collapse

Methods included from ServerLifecycle

boot!, build_servers, instantiate_server, run!, run_servers, spawn!

Methods included from MiddlewareManagement

call, middleware_stack, use

Methods included from ReactorManagement

reactor, start_reactors, stop_reactors, use_reactor

Methods included from PluginManagement

enable_plugins!, plugin

Methods inherited from Router

#add_route, #all_routes, #build_route_entry, #configure_core, #default_interface, #default_resource_type, #extract_metadata_from_handler, #find_observable, #find_route, #initialize, instance, #link_format_entries, #match_dynamic_route, #normalize_metadata, #observable, reset!, #wrap_block

Constructor Details

This class inherits a constructor from Takagi::Router

Class Method Details

.core(path, method: :get) {|arg0| ... } ⇒ Object

Configures CoRE Link Format metadata for an existing route. Handy when you want to declare handlers and metadata separately (e.g., during boot).

Parameters:

  • path (Object)
  • method: (::Symbol) (defaults to: :get)

Yields:

Yield Parameters:

  • arg0

Yield Returns:

  • (Object)

Returns:

  • (Object)


71
72
73
# File 'lib/takagi/base.rb', line 71

def self.core(path, method: :get, &block)
  router.configure_core(method.to_s.upcase, path, &block)
end

.observable(path, metadata: {}, &block) {|arg0| ... } ⇒ Object

Registers an OBSERVE route in the global router (server-side) Use this to make a resource observable by clients

Parameters:

  • path (String)

    The URL path

  • block (Proc)

    The handler function

  • metadata: (::Hash[untyped, untyped]) (defaults to: {})

Yields:

Yield Parameters:

  • arg0

Yield Returns:

  • (Object)

Returns:

  • (Object)


65
66
67
# File 'lib/takagi/base.rb', line 65

def self.observable(path, metadata: {}, &block)
  router.observable(path, metadata: , &block)
end

.routerRouter

Returns the global router instance

Returns:

  • (Router)

    Singleton router instance



46
47
48
# File 'lib/takagi/base.rb', line 46

def self.router
  @router ||= Takagi::Router.instance
end