require 'projectlocker_errata' require File.join(File.dirname(__FILE__), 'shared_tasks') namespace :projectlocker_errata do desc "Verify your gem installation by sending a test exception to the projectlocker_errata service" task :test => ['projectlocker_errata:log_stdout', :environment] do RAILS_DEFAULT_LOGGER.level = Logger::DEBUG require 'action_controller/test_process' Dir["app/controllers/application*.rb"].each { |file| require(File.expand_path(file)) } class ProjectlockerErrataTestingException < RuntimeError; end unless ProjectlockerErrata.configuration.api_key puts "ProjectlockerErrata needs an API key configured! Check the README to see how to add it." exit end ProjectlockerErrata.configuration.development_environments = [] catcher = ProjectlockerErrata::Rails::ActionControllerCatcher in_controller = ApplicationController.included_modules.include?(catcher) in_base = ActionController::Base.included_modules.include?(catcher) if !in_controller || !in_base puts "Rails initialization did not occur" exit end puts "Configuration:" ProjectlockerErrata.configuration.to_hash.each do |key, value| puts sprintf("%25s: %s", key.to_s, value.inspect.slice(0, 55)) end unless defined?(ApplicationController) puts "No ApplicationController found" exit end puts 'Setting up the Controller.' class ApplicationController # This is to bypass any filters that may prevent access to the action. prepend_before_filter :test_projectlocker_errata def test_projectlocker_errata puts "Raising '#{exception_class.name}' to simulate application failure." raise exception_class.new, 'Testing projectlocker_errata via "rake projectlocker_errata:test". If you can see this, it works.' end def rescue_action(exception) rescue_action_in_public exception end # Ensure we actually have an action to go to. def verify; end def consider_all_requests_local false end def local_request? false end def exception_class exception_name = ENV['EXCEPTION'] || "ProjectlockerErrataTestingException" exception_name.split("::").inject(Object){|klass, name| klass.const_get(name)} rescue Object.const_set(exception_name.gsub(/:+/, "_"), Class.new(Exception)) end def logger nil end end class ProjectlockerErrataVerificationController < ApplicationController; end puts 'Processing request.' request = ActionController::TestRequest.new("REQUEST_URI" => "/projectlocker_errata_verification_controller") response = ActionController::TestResponse.new ProjectlockerErrataVerificationController.new.process(request, response) end end