class Hanami::Slice::ViewNameInferrer
Infers a view name for automatically rendering within actions.
@api private @since 2.0.0
Constants
- ALTERNATIVE_NAMES
Public Class Methods
call(action_class_name:, slice:)
click to toggle source
Returns an array of container keys for views matching the given action.
Also provides alternative view keys for common RESTful actions.
@example
ViewNameInferrer.call(action_name: "Main::Actions::Posts::Create", slice: Main::Slice) # => ["views.posts.create", "views.posts.new"]
@param action_class_name [String] action class name @param slice [Hanami::Slice, Hanami::Application] Hanami
slice containing the action
@return [Array<string>] array of paired view container keys
# File lib/hanami/slice/view_name_inferrer.rb, line 30 def call(action_class_name:, slice:) action_key_base = slice.config.actions.name_inference_base view_key_base = slice.config.actions.view_name_inference_base action_name_key = action_name_key(action_class_name, slice, action_key_base) view_key = [view_key_base, action_name_key].compact.join(CONTAINER_KEY_DELIMITER) [view_key, alternative_view_key(view_key)].compact end
Private Class Methods
action_name_key(action_name, slice, key_base)
click to toggle source
# File lib/hanami/slice/view_name_inferrer.rb, line 43 def action_name_key(action_name, slice, key_base) slice .inflector .underscore(action_name) .sub(%r{^#{slice.slice_name.path}#{PATH_DELIMITER}}, "") .sub(%r{^#{key_base}#{PATH_DELIMITER}}, "") .gsub("/", CONTAINER_KEY_DELIMITER) end
alternative_view_key(view_key)
click to toggle source
# File lib/hanami/slice/view_name_inferrer.rb, line 52 def alternative_view_key(view_key) parts = view_key.split(CONTAINER_KEY_DELIMITER) alternative_name = ALTERNATIVE_NAMES[parts.last] return unless alternative_name [parts[0..-2], alternative_name].join(CONTAINER_KEY_DELIMITER) end