module PageTitleHelper

PageTitleHelper

Constants

VERSION

Public Class Methods

formats() click to toggle source

Defined alias formats, pretty useful.

# File lib/page_title_helper.rb, line 51
def self.formats
  @formats ||= {
    app: ':app',
    default: ':title - :app',
    title: ':title'
  }
end
interpolates(key, &block) click to toggle source

Add new, custom, interpolation.

# File lib/page_title_helper.rb, line 37
def self.interpolates(key, &block)
  Interpolations.send(:define_method, key, &block)
end
options() click to toggle source

Default options, which are globally referenced and can be changed globally, which might be useful in some cases.

# File lib/page_title_helper.rb, line 43
def self.options
  @options ||= {
    format: :default,
    default: :'app.tagline'
  }
end

Public Instance Methods

page_title(options = nil) { || ... } click to toggle source
# File lib/page_title_helper.rb, line 65
def page_title(options = nil)
  return page_title!(yield) if block_given? # define title

  options = PageTitleHelper.options.merge(options || {}).symbolize_keys!
  options[:format] ||= :title # handles :format => false
  options.assert_valid_keys(:app, :default, :format)

  # read page title and split into 'real' title and customized format
  title = @_page_title ||= page_title_from_translation(options[:default])
  title, options[:format] = *(title << options[:format]) if title.is_a?(Array)

  # handle format aliases
  format = options.delete(:format)
  if PageTitleHelper.formats.include?(format)
    format = PageTitleHelper.formats[format]
  end

  # construct basic env to pass around
  env = { title: title, app: options.delete(:app), options: options, view: self }

  # interpolate format
  Interpolations.interpolate(format, env)
end
page_title!(*args) click to toggle source

Specify page title

# File lib/page_title_helper.rb, line 60
def page_title!(*args)
  @_page_title = args.size > 1 ? args : args.first
  @_page_title.is_a?(Array) ? @_page_title.first : @_page_title
end

Protected Instance Methods

page_title_from_translation(default) click to toggle source

Find translation for `controller.action.title` combination, falls back to `controller.title` or supplied default if no title was found.

# File lib/page_title_helper.rb, line 93
def page_title_from_translation(default)
  base = controller.controller_path.tr('/', '.')
  action = params[:action].to_s

  keys = [:"#{base}.#{action}.title"]
  keys << :"#{base}.new.title" if action == 'create'
  keys << :"#{base}.edit.title" if action == 'update'
  keys << :"#{base}.title"
  keys << default

  I18n.translate(keys.shift, default: keys)
end