lib/route_translator/extensions/mapper.rb
# frozen_string_literal: true
require 'action_dispatch'
module ActionDispatch
module Routing
class Mapper
def localized
@localized = true
yield
@localized = false
end
# rubocop:disable Lint/UnderscorePrefixedVariableName, Metrics/PerceivedComplexity
def add_route(action, controller, options, _path, to, via, formatted, anchor, options_constraints) # :nodoc:
return super unless @localized
path = path_for_action(action, _path)
raise ArgumentError, 'path is required' if path.blank?
action = action.to_s
default_action = options.delete(:action) || @scope[:action]
if %r{^[\w\-\/]+$}.match?(action)
default_action ||= action.tr('-', '_') unless action.include?('/')
else
action = nil
end
as = if options.fetch(:as, true)
name_for_action(options.delete(:as), action)
else
options.delete(:as)
end
path = Mapping.normalize_path URI::DEFAULT_PARSER.escape(path), formatted
ast = Journey::Parser.parse path
mapping = Mapping.build(@scope, @set, ast, controller, default_action, to, via, formatted, options_constraints, anchor, options)
@set.add_localized_route(mapping, as, anchor, @scope, path, controller, default_action, to, via, formatted, options_constraints, options)
end
# rubocop:enable Lint/UnderscorePrefixedVariableName, Metrics/PerceivedComplexity
private
def define_generate_prefix(app, name)
return super unless @localized
RouteTranslator::Translator.available_locales.each do |locale|
super(app, "#{name}_#{locale.to_s.underscore}")
end
end
end
end
end