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

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!, run!, 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, #configure_core, #find_observable, #find_route, #initialize, instance, #link_format_entries, #observable, reset!

Constructor Details

This class inherits a constructor from Takagi::Router

Class Method Details

.core(path, method: :get, &block) ⇒ Object

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



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) ⇒ 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



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