module Hanami::SliceConfigurable
Calls ‘configure_for_slice(slice)` on the extended class whenever it is first subclassed within a module namespace corresponding to a slice.
@example
class BaseClass extend Hanami::SliceConfigurable end # slices/main/lib/my_class.rb module Main class MyClass < BaseClass # Will be called with `Main::Slice` def self.configure_for_slice(slice) # ... end end end
@api private @since 2.0.0
Public Class Methods
extended(klass)
click to toggle source
Calls superclass method
# File lib/hanami/slice_configurable.rb, line 29 def extended(klass) slice_for = method(:slice_for) inherited_mod = Module.new do define_method(:inherited) do |subclass| unless Hanami.app? raise ComponentLoadError, "Class #{klass} must be defined within an Hanami app" end super(subclass) subclass.instance_variable_set(:@configured_for_slices, configured_for_slices.dup) slice = slice_for.(subclass) return unless slice unless subclass.configured_for_slice?(slice) subclass.configure_for_slice(slice) subclass.configured_for_slices << slice end end end klass.singleton_class.prepend(inherited_mod) end
Private Class Methods
slice_for(klass)
click to toggle source
# File lib/hanami/slice_configurable.rb, line 57 def slice_for(klass) return unless klass.name slices = Hanami.app.slices.with_nested + [Hanami.app] slices.detect { |slice| klass.name.start_with?("#{slice.namespace}#{MODULE_DELIMITER}") } end
Public Instance Methods
configure_for_slice(slice)
click to toggle source
# File lib/hanami/slice_configurable.rb, line 66 def configure_for_slice(slice); end
configured_for_slice?(slice)
click to toggle source
# File lib/hanami/slice_configurable.rb, line 68 def configured_for_slice?(slice) configured_for_slices.include?(slice) end
configured_for_slices()
click to toggle source
# File lib/hanami/slice_configurable.rb, line 72 def configured_for_slices @configured_for_slices ||= [] end