class Hanami::Slice::Router

‘Hanami::Router` subclass with enhancements for use within Hanami apps.

This is loaded from Hanami apps and slices and made available as their {Hanami::Slice::ClassMethods#router router}.

@api private @since 2.0.0

Attributes

middleware_stack[R]

@api private @since 2.0.0

path_prefix[R]

@api private @since 2.0.0

Public Class Methods

new(routes:, middleware_stack: Routing::Middleware::Stack.new, prefix: ::Hanami::Router::DEFAULT_PREFIX, **kwargs, &blk) click to toggle source

@api private @since 2.0.0

Calls superclass method
# File lib/hanami/slice/router.rb, line 25
def initialize(routes:, middleware_stack: Routing::Middleware::Stack.new, prefix: ::Hanami::Router::DEFAULT_PREFIX, **kwargs, &blk)
  @path_prefix = Hanami::Router::Prefix.new(prefix)
  @middleware_stack = middleware_stack
  instance_eval(&blk)
  super(**kwargs, &routes)
end

Public Instance Methods

freeze() click to toggle source

@api private @since 2.0.0

Calls superclass method
# File lib/hanami/slice/router.rb, line 34
def freeze
  return self if frozen?

  remove_instance_variable(:@middleware_stack)
  super
end
slice(slice_name, at:, &blk) click to toggle source

Yields a block for routes to resolve their action components from the given slice.

An optional URL prefix may be supplied with ‘at:`.

@example

# config/routes.rb

module MyApp
  class Routes < Hanami::Routes
    slice :admin, at: "/admin" do
      # Will route to the "actions.posts.index" component in Admin::Slice
      get "posts", to: "posts.index"
    end
  end
end

@param slice_name [Symbol] the slice’s name @param at [String, nil] optional URL prefix for the routes

@api public @since 2.0.0

# File lib/hanami/slice/router.rb, line 68
def slice(slice_name, at:, &blk)
  blk ||= @resolver.find_slice(slice_name).routes

  prev_resolver = @resolver
  @resolver = @resolver.to_slice(slice_name)

  scope(at, &blk)
ensure
  @resolver = prev_resolver
end
to_rack_app() click to toggle source

@api private @since 2.0.0

# File lib/hanami/slice/router.rb, line 81
def to_rack_app
  middleware_stack.to_rack_app(self)
end
use(*args, **kwargs, &blk) click to toggle source

@api private @since 2.0.0

# File lib/hanami/slice/router.rb, line 43
def use(*args, **kwargs, &blk)
  middleware_stack.use(*args, **kwargs.merge(path_prefix: path_prefix.to_s), &blk)
end