class Metaslug::Generators::LocaleGenerator

Public Class Methods

banner() click to toggle source

Public Instance Methods

generate_locale_file() click to toggle source
# File lib/rails/generators/metaslug/locale/locale_generator.rb, line 16
def generate_locale_file
  routes = get_paths_from_routes

  locales = options.locale? ?
    [options.locale] :
    I18n.available_locales

  metas = options.metas? ?
    options.metas.split(',') :
    ["description", "title"]

  locales.each do |locale|
    buffer = "#{locale}:\n"
    add_metas_to_buffer(buffer, 'default', { quote_section: false }, *metas)

    routes.each do |route|
      add_metas_to_buffer(buffer, route, { quote_section: true }, *metas)
    end

    if options.output?
      $stdout.puts buffer
    else
      create_file "config/metaslug/#{locale}.yml", buffer
    end
  end
end

Private Instance Methods

add_metas_to_buffer(buffer, section, options = {}, *args) click to toggle source
# File lib/rails/generators/metaslug/locale/locale_generator.rb, line 44
def add_metas_to_buffer(buffer, section, options = {}, *args)
  spaces = ' ' * 2
  if options[:quote_section]
    buffer << "#{spaces}\"#{section}\":\n"
  else
    buffer << "#{spaces}#{section}:\n"
  end

  args.each do |meta|
    buffer << "#{spaces * 2}\"#{meta}\": \"\"\n"
  end
end
get_paths_from_routes() click to toggle source
# File lib/rails/generators/metaslug/locale/locale_generator.rb, line 57
def get_paths_from_routes
  Rails.application.routes.routes.map do |route|
    path = route.path.spec.to_s
    # only keep GET url
    next unless "GET".match route.verb.to_s
    next if path.starts_with?('/assets') or path.starts_with?('/rails')
    # remove (.:format), this is a bit dirty
    $1 if path.match /(.*)\(.*/
  end.compact.uniq
end