lib/view_component_contrib/translation_helper.rb



# frozen_string_literal: true

module ViewComponentContrib
  module TranslationHelper
    DEFAULT_NAMESPACE = "view_components"

    def self.included(base)
      base.extend ClassMethods
    end

    module ClassMethods
      attr_writer :i18n_namespace

      def i18n_namespace
        return @i18n_namespace if defined?(@i18n_namespace)

        @i18n_namespace =
          if superclass.respond_to?(:i18n_namespace)
            superclass.i18n_namespace
          else
            DEFAULT_NAMESPACE
          end
      end

      def contrib_i18n_scope
        return @contrib_i18n_scope if defined?(@contrib_i18n_scope)

        @contrib_i18n_scope = name.sub("::Component", "").underscore.split("/")
      end

      def i18n_scope=(val)
        raise ArgumentError, "Must be array" unless val.is_a?(Array)

        @contrib_i18n_scope = val.dup.freeze
      end

      def virtual_path
        @contrib_virtual_path ||= [
          i18n_namespace,
          *contrib_i18n_scope
        ].join(".")
      end
    end
  end
end