##
# Support the `:controller` and `:action` options.
#
# @example
#   get :admins, controller: :users
# @example
#   post :search, action: :index
module Rage::Router::DSLPlugins::ControllerActionOptions
  %i(get post put patch delete).each do |action_name|
    define_method(action_name) do |*args, **kwargs|
      if args.length == 1 && !kwargs.has_key?(:to) && (kwargs.has_key?(:controller) || kwargs.has_key?(:action))
        path = args[0]
        controller = kwargs.delete(:controller) || @controllers.last || raise(ArgumentError, "Could not derive the controller value from the route definitions")
        action = kwargs.delete(:action) || path.split("/").last
      end

      if controller && action
        kwargs[:to] = "#{controller}##{action}"
        super(path, **kwargs)
      else
        super(*args, **kwargs)
      end
    end
  end
end