diff --git a/gemfiles/rails32.gemfile b/gemfiles/rails32.gemfile index 6dfdb7d4b..6c12e772a 100644 --- a/gemfiles/rails32.gemfile +++ b/gemfiles/rails32.gemfile @@ -1,7 +1,6 @@ source "http://rubygems.org" gem "rails", "~> 3.2.6" -gem "rake" gem "rspec" gem "simplecov" diff --git a/gemfiles/rails40.gemfile b/gemfiles/rails40.gemfile index 10f0b2bc7..df5da0e23 100644 --- a/gemfiles/rails40.gemfile +++ b/gemfiles/rails40.gemfile @@ -1,9 +1,7 @@ source "http://rubygems.org" gem "rails", "~> 4.0.0" -gem "rake" gem "rspec" gem "simplecov" -gem "sentry-raven", :path => "../" gemspec :path => "../" diff --git a/gemfiles/rails41.gemfile b/gemfiles/rails41.gemfile index 5813e8f7a..d376b843a 100644 --- a/gemfiles/rails41.gemfile +++ b/gemfiles/rails41.gemfile @@ -1,9 +1,7 @@ source "http://rubygems.org" gem "rails", "~> 4.1.0" -gem "rake" gem "rspec" gem "simplecov" -gem "sentry-raven", :path => "../" gemspec :path => "../" diff --git a/lib/raven/base.rb b/lib/raven/base.rb index b473d7455..61454394c 100644 --- a/lib/raven/base.rb +++ b/lib/raven/base.rb @@ -5,7 +5,6 @@ require 'raven/client' require 'raven/event' require 'raven/logger' -require 'raven/rack' require 'raven/interfaces/message' require 'raven/interfaces/exception' require 'raven/interfaces/stack_trace' @@ -207,13 +206,9 @@ def rack_context(env) # Injects various integrations def inject - require 'raven/integrations/delayed_job' if defined?(::Delayed::Plugin) - require 'raven/railtie' if defined?(::Rails::Railtie) - require 'raven/sidekiq' if defined?(Sidekiq) - if defined?(Rake) - require 'raven/rake' - require 'raven/tasks' - end + available_integrations = %w[delayed_job rails sidekiq rack rake] + integrations_to_load = available_integrations & Gem.loaded_specs.keys + integrations_to_load.each { |integration| require "raven/integrations/#{integration}" } end # For cross-language compat diff --git a/lib/raven/rack.rb b/lib/raven/integrations/rack.rb similarity index 99% rename from lib/raven/rack.rb rename to lib/raven/integrations/rack.rb index afc7fc005..68d818537 100644 --- a/lib/raven/rack.rb +++ b/lib/raven/integrations/rack.rb @@ -1,4 +1,5 @@ require 'time' +require 'rack' module Raven # Middleware for Rack applications. Any errors raised by the upstream @@ -20,6 +21,7 @@ module Raven # # Use a standard Raven.configure call to configure your server credentials. class Rack + def self.capture_exception(exception, env, options = {}) if env['requested_at'] options[:time_spent] = Time.now - env['requested_at'] diff --git a/lib/raven/railtie.rb b/lib/raven/integrations/rails.rb similarity index 75% rename from lib/raven/railtie.rb rename to lib/raven/integrations/rails.rb index 4c2a11096..4229ab36c 100644 --- a/lib/raven/railtie.rb +++ b/lib/raven/integrations/rails.rb @@ -2,14 +2,14 @@ require 'rails' module Raven - class Railtie < ::Rails::Railtie + class Rails < ::Rails::Railtie initializer "raven.use_rack_middleware" do |app| app.config.middleware.insert 0, "Raven::Rack" end initializer 'raven.action_controller' do ActiveSupport.on_load :action_controller do - require 'raven/rails/controller_methods' + require 'raven/integrations/rails/controller_methods' include Raven::Rails::ControllerMethods end end @@ -22,17 +22,17 @@ class Railtie < ::Rails::Railtie if Raven.configuration.catch_debugged_exceptions if defined?(::ActionDispatch::DebugExceptions) - require 'raven/rails/middleware/debug_exceptions_catcher' + require 'raven/integrations/rails/middleware/debug_exceptions_catcher' ::ActionDispatch::DebugExceptions.send(:include, Raven::Rails::Middleware::DebugExceptionsCatcher) elsif defined?(::ActionDispatch::ShowExceptions) - require 'raven/rails/middleware/debug_exceptions_catcher' + require 'raven/integrations/rails/middleware/debug_exceptions_catcher' ::ActionDispatch::ShowExceptions.send(:include, Raven::Rails::Middleware::DebugExceptionsCatcher) end end end rake_tasks do - require 'raven/tasks' + require 'raven/integrations/tasks' end end end diff --git a/lib/raven/rails/controller_methods.rb b/lib/raven/integrations/rails/controller_methods.rb similarity index 95% rename from lib/raven/rails/controller_methods.rb rename to lib/raven/integrations/rails/controller_methods.rb index 16b6ca3b8..9275b1538 100644 --- a/lib/raven/rails/controller_methods.rb +++ b/lib/raven/integrations/rails/controller_methods.rb @@ -1,5 +1,5 @@ module Raven - module Rails + class Rails module ControllerMethods def capture_message(message, options = {}) Raven::Rack.capture_message(message, request.env, options) diff --git a/lib/raven/rails/middleware/debug_exceptions_catcher.rb b/lib/raven/integrations/rails/middleware/debug_exceptions_catcher.rb similarity index 96% rename from lib/raven/rails/middleware/debug_exceptions_catcher.rb rename to lib/raven/integrations/rails/middleware/debug_exceptions_catcher.rb index a69024bc3..757a0cf49 100644 --- a/lib/raven/rails/middleware/debug_exceptions_catcher.rb +++ b/lib/raven/integrations/rails/middleware/debug_exceptions_catcher.rb @@ -1,5 +1,5 @@ module Raven - module Rails + class Rails module Middleware module DebugExceptionsCatcher def self.included(base) diff --git a/lib/raven/rake.rb b/lib/raven/integrations/rake.rb similarity index 84% rename from lib/raven/rake.rb rename to lib/raven/integrations/rake.rb index 042af1628..54d163b63 100644 --- a/lib/raven/rake.rb +++ b/lib/raven/integrations/rake.rb @@ -1,5 +1,6 @@ -require 'raven' +require 'rake' require 'rake/task' +require 'raven/integrations/tasks' module Rake class Application @@ -9,5 +10,4 @@ def display_error_message(ex) orig_display_error_messsage(ex) end end -end - +end \ No newline at end of file diff --git a/lib/raven/sidekiq.rb b/lib/raven/integrations/sidekiq.rb similarity index 97% rename from lib/raven/sidekiq.rb rename to lib/raven/integrations/sidekiq.rb index e6f7148be..7cada8c41 100644 --- a/lib/raven/sidekiq.rb +++ b/lib/raven/integrations/sidekiq.rb @@ -1,4 +1,5 @@ require 'time' +require 'sidekiq' module Raven class Sidekiq diff --git a/lib/raven/tasks.rb b/lib/raven/integrations/tasks.rb similarity index 100% rename from lib/raven/tasks.rb rename to lib/raven/integrations/tasks.rb diff --git a/lib/raven/interfaces/http.rb b/lib/raven/interfaces/http.rb index 6e3d71b18..809bc60ee 100644 --- a/lib/raven/interfaces/http.rb +++ b/lib/raven/interfaces/http.rb @@ -19,12 +19,12 @@ def initialize(*arguments) end def from_rack(env) - require 'rack' req = ::Rack::Request.new(env) - self.url = req.url.split('?').first + self.url = req.scheme && req.url.split('?').first self.method = req.request_method self.query_string = req.query_string env.each_pair do |key, value| + key = key.to_s #rack env can contain symbols next unless key.upcase == key # Non-upper case stuff isn't either if key.start_with?('HTTP_') # Header diff --git a/spec/raven/rack_spec.rb b/spec/raven/integrations/rack_spec.rb similarity index 98% rename from spec/raven/rack_spec.rb rename to spec/raven/integrations/rack_spec.rb index 32cf4fcf0..f3cd27ea2 100644 --- a/spec/raven/rack_spec.rb +++ b/spec/raven/integrations/rack_spec.rb @@ -1,4 +1,5 @@ require 'spec_helper' +require 'raven/integrations/rack' describe Raven::Rack do it 'should capture exceptions' do diff --git a/spec/raven/rails/controller_methods_spec.rb b/spec/raven/integrations/rails/controller_methods_spec.rb similarity index 93% rename from spec/raven/rails/controller_methods_spec.rb rename to spec/raven/integrations/rails/controller_methods_spec.rb index 6a1479b28..cb48d8274 100644 --- a/spec/raven/rails/controller_methods_spec.rb +++ b/spec/raven/integrations/rails/controller_methods_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' require 'raven' -require 'raven/rails/controller_methods' +require 'raven/integrations/rails/controller_methods' describe Raven::Rails::ControllerMethods do include described_class diff --git a/spec/raven/rake_spec.rb b/spec/raven/integrations/rake_spec.rb similarity index 100% rename from spec/raven/rake_spec.rb rename to spec/raven/integrations/rake_spec.rb