Class: Hanami::Slice

Inherits:
Object
  • Object
show all
Defined in:
lib/hanami/slice.rb,
lib/hanami/slice/router.rb,
lib/hanami/slice/routes_helper.rb,
lib/hanami/slice/routing/resolver.rb,
lib/hanami/slice/view_name_inferrer.rb,
lib/hanami/slice/routing/middleware/stack.rb

Overview

A slice represents any distinct area of concern within an Hanami app.

For smaller apps, a slice may encompass the whole app itself (see App), whereas larger apps may consist of many slices.

Each slice corresponds a single module namespace and a single root directory of source files for loading as components into its container.

Each slice has its own config, and may optionally have its own settings, routes, as well as other nested slices.

Slices expect an Hanami app to be defined (which itself is a slice). They will initialize their config as a copy of the app’s, and will also configure certain components

Slices must be prepared and optionally booted before they can be used (see ClassMethods#prepare and ClassMethods#boot). A prepared slice will lazily load its components and nested slices (useful for minimising initial load time), whereas a booted slice will eagerly load all its components and nested slices, then freeze its container.

Since:

  • 2.0.0

Direct Known Subclasses

App

Defined Under Namespace

Modules: ClassMethods, Routing Classes: Router, RoutesHelper, ViewNameInferrer

Class Method Summary collapse

Class Method Details

.inherited(subclass) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Since:

  • 2.0.0



35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/hanami/slice.rb', line 35

def self.inherited(subclass)
  super

  subclass.extend(ClassMethods)

  @_mutex.synchronize do
    subclass.class_eval do
      @_mutex = Mutex.new
      @autoloader = Zeitwerk::Loader.new
      @container = Class.new(Dry::System::Container)
    end
  end
end