Sha256: 56f6a41568fb5576225e4faef802ead0d9f1255adfbd5cbde44c3a7fb5ab7dcb

Contents?: true

Size: 1.77 KB

Versions: 1

Compression:

Stored size: 1.77 KB

Contents

require 'active_support/core_ext/hash/reverse_merge'

module Titlezilla
  class Translator
    attr_reader :namespace, :controller_name, :action_name, :context

    def initialize(controller_path, action_name, context = {})
      @namespace, @controller_name = parse_namespace_and_controller_name(controller_path)
      @action_name = action_name.to_s.freeze
      @context = context
    end

    def title(override = nil)
      if !override
        @title ||= lookup(controller_name, map(action_name))
      else
        @title = override
      end
    end

    def application_title
      @application_title ||= reverse_lookup('application')
    end

    def meta_title
      [title, application_title].compact.join(::Titlezilla.configuration.separator)
    end

    private

    def parse_namespace_and_controller_name(controller_path)
      parts = controller_path.to_s.split('/')
      parts.map!(&:to_s).map!(&:freeze)
      if parts.size > 1
        [parts[(0...-1)], parts[-1]]
      else
        [[], parts[0].to_s.freeze]
      end
    end

    def lookup(*key)
      lookup_with_namespace(key, namespace)
    end

    def reverse_lookup(*key)
      title_namespace = namespace.dup
      begin
        title = lookup_with_namespace(key, title_namespace)
        return title if title
        title_namespace.pop
      end while title_namespace.size > 0
      lookup_with_namespace(key, title_namespace)
    end

    def lookup_with_namespace(keys, namespace)
      t_key = [:titles, namespace, keys].flatten.compact.join('.')
      i18n_set?(t_key) ? I18n.t(t_key, context) : nil
    end

    def map(action_name)
      (::Titlezilla.configuration.action_map[action_name.to_sym] || action_name).to_s.freeze
    end

    def i18n_set?(key)
      I18n.t(key, raise: true) rescue false
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
titlezilla-0.1.4 lib/titlezilla/translator.rb