Sha256: 7ee691abba30b9f91285f4b681a2516b5bd9fcde90408ab86282d45d3e20a3df

Contents?: true

Size: 1.51 KB

Versions: 16

Compression:

Stored size: 1.51 KB

Contents

# frozen_string_literal: true

module Hanami
  class Action
    # @since 2.0.0
    # @api private
    class ViewNameInferrer
      # @since 2.0.0
      # @api private
      ALTERNATIVE_NAMES = {
        "create" => "new",
        "update" => "edit"
      }.freeze

      class << self
        # @since 2.0.0
        # @api private
        def call(action_name:, provider:)
          application = provider.respond_to?(:application) ? provider.application : Hanami.application

          action_identifier_base = application.config.actions.name_inference_base
          view_identifier_base = application.config.actions.view_name_inference_base

          identifier = action_identifier_name(action_name, provider, action_identifier_base)

          view_name = [view_identifier_base, identifier].compact.join(".")

          [view_name, alternative_view_name(view_name)].compact
        end

        private

        # @since 2.0.0
        # @api private
        def action_identifier_name(action_name, provider, name_base)
          provider
            .inflector
            .underscore(action_name)
            .sub(/^#{provider.namespace_path}\//, "")
            .sub(/^#{name_base}\//, "")
            .gsub("/", ".")
        end

        # @since 2.0.0
        # @api private
        def alternative_view_name(view_name)
          parts = view_name.split(".")

          alternative_name = ALTERNATIVE_NAMES[parts.last]

          [parts[0..-2], alternative_name].join(".") if alternative_name
        end
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
hanami-controller-2.2.0 lib/hanami/action/view_name_inferrer.rb
hanami-controller-2.2.0.rc1 lib/hanami/action/view_name_inferrer.rb
hanami-controller-2.2.0.beta2 lib/hanami/action/view_name_inferrer.rb
hanami-controller-2.2.0.beta1 lib/hanami/action/view_name_inferrer.rb
hanami-controller-2.1.0 lib/hanami/action/view_name_inferrer.rb
hanami-controller-2.1.0.rc3 lib/hanami/action/view_name_inferrer.rb
hanami-controller-2.1.0.rc2 lib/hanami/action/view_name_inferrer.rb
hanami-controller-2.1.0.rc1 lib/hanami/action/view_name_inferrer.rb
hanami-controller-2.1.0.beta2 lib/hanami/action/view_name_inferrer.rb
hanami-controller-2.1.0.beta1 lib/hanami/action/view_name_inferrer.rb
hanami-controller-2.0.2 lib/hanami/action/view_name_inferrer.rb
hanami-controller-2.0.1 lib/hanami/action/view_name_inferrer.rb
hanami-controller-2.0.0 lib/hanami/action/view_name_inferrer.rb
hanami-controller-2.0.0.rc1 lib/hanami/action/view_name_inferrer.rb
hanami-controller-2.0.0.beta4 lib/hanami/action/view_name_inferrer.rb
hanami-controller-2.0.0.beta1 lib/hanami/action/view_name_inferrer.rb