exceptional 2.0.32 → 2.0.33

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,11 +5,11 @@ Gem::Specification.new do |gem|
5
5
  gem.name = %q{exceptional}
6
6
  gem.version = Exceptional::VERSION
7
7
  gem.authors = ["Contrast"]
8
- gem.summary = %q{ getexceptional.com is a hosted service for tracking errors in your Ruby/Rails/Rack apps }
9
- gem.description = %q{Exceptional is the Ruby gem for communicating with http://getexceptional.com (hosted error tracking service). Use it to find out about errors that happen in your live app. It captures lots of helpful information to help you fix the errors.}
8
+ gem.summary = %q{ exceptional.io is a hosted service for tracking errors in your Ruby/Rails/Rack apps }
9
+ gem.description = %q{Exceptional is the Ruby gem for communicating with http://exceptional.io (hosted error tracking service). Use it to find out about errors that happen in your live app. It captures lots of helpful information to help you fix the errors.}
10
10
  gem.email = %q{hello@contrast.ie}
11
11
  gem.files = Dir['lib/**/*'] + Dir['spec/**/*'] + Dir['spec/**/*'] + Dir['rails/**/*'] + Dir['tasks/**/*'] + Dir['*.rb'] + ["exceptional.gemspec"]
12
- gem.homepage = %q{http://getexceptional.com/}
12
+ gem.homepage = %q{http://exceptional.io/}
13
13
  gem.require_paths = ["lib"]
14
14
  gem.executables << 'exceptional'
15
15
  gem.rubyforge_project = %q{exceptional}
@@ -15,6 +15,7 @@ require 'exceptional/integration/rack'
15
15
  require 'exceptional/integration/rack_rails'
16
16
  require 'exceptional/integration/alerter'
17
17
  require 'exceptional/version'
18
+ require 'exceptional/integration/exception_middleware'
18
19
 
19
20
  require 'exceptional/railtie' if defined?(Rails::Railtie)
20
21
 
@@ -67,4 +68,4 @@ module Exceptional
67
68
  Thread.current[:exceptional_context].merge!(hash)
68
69
  self
69
70
  end
70
- end
71
+ end
@@ -5,20 +5,28 @@ module Exceptional
5
5
  if Config.should_send_to_api?
6
6
  data = ControllerExceptionData.new(exception, controller, request)
7
7
  Remote.error(data)
8
+ else
9
+ raise exception
8
10
  end
9
11
  end
10
12
 
13
+ # unspeced
11
14
  def handle_with_rack(exception, environment, request)
12
15
  if Config.should_send_to_api?
13
16
  data = RackExceptionData.new(exception, environment, request)
14
17
  Remote.error(data)
18
+ else
19
+ raise exception
15
20
  end
16
21
  end
17
22
 
23
+ # unspeced
18
24
  def handle(exception, name=nil)
19
25
  if Config.should_send_to_api?
20
26
  data = ExceptionData.new(exception, name)
21
27
  Remote.error(data)
28
+ else
29
+ raise exception
22
30
  end
23
31
  end
24
32
  end
@@ -1,4 +1,5 @@
1
1
  require 'yaml'
2
+ require 'erb'
2
3
 
3
4
  module Exceptional
4
5
  class Config
@@ -20,16 +21,18 @@ module Exceptional
20
21
  def load(config_file=nil)
21
22
  if (config_file && File.file?(config_file))
22
23
  begin
23
- config = YAML::load_file(config_file)
24
+ config = YAML.load(ERB.new(File.new(config_file).read).result)
24
25
  env_config = config[application_environment] || {}
25
- @api_key = config['api-key'] || env_config['api-key']
26
+ @api_key = config['api-key'] ||
27
+ env_config['api-key'] ||
28
+ ENV['EXCEPTIONAL_API_KEY']
26
29
 
27
30
  @http_proxy_host = config['http-proxy-host']
28
31
  @http_proxy_port = config['http-proxy-port']
29
32
  @http_proxy_username = config['http-proxy-username']
30
33
  @http_proxy_password = config['http-proxy-password']
31
34
  @http_open_timeout = config['http-open-timeout']
32
- @http_read_timeout = config['http-read-timeout']
35
+ @http_read_timeout = config['http-read-timeout']
33
36
 
34
37
  @ssl = config['ssl'] || env_config['ssl']
35
38
  @enabled = env_config['enabled']
@@ -38,8 +41,6 @@ module Exceptional
38
41
  rescue Exception => e
39
42
  raise ConfigurationException.new("Unable to load configuration #{config_file} for environment #{application_environment} : #{e.message}")
40
43
  end
41
- else
42
- puts "Exceptional::Config.load - no configuration file"
43
44
  end
44
45
  end
45
46
 
@@ -86,4 +87,4 @@ module Exceptional
86
87
  end
87
88
  end
88
89
  end
89
- end
90
+ end
@@ -19,7 +19,7 @@ module Exceptional
19
19
  'url' => (@request.respond_to?(:url) ? @request.url : "#{@request.protocol}#{@request.host}#{@request.request_uri}"),
20
20
  'controller' => @controller.class.to_s,
21
21
  'action' => (@request.respond_to?(:parameters) ? @request.parameters['action'] : @request.params['action']),
22
- 'parameters' => filter_paramaters(@request.respond_to?(:parameters) ? @request.parameters : @request.params),
22
+ 'parameters' => filter_parameters(@request.respond_to?(:parameters) ? @request.parameters : @request.params),
23
23
  'request_method' => @request.request_method.to_s,
24
24
  'remote_ip' => (@request.respond_to?(:remote_ip) ? @request.remote_ip : @request.ip),
25
25
  'headers' => extract_http_headers(@request.env),
@@ -29,23 +29,30 @@ module Exceptional
29
29
  end
30
30
 
31
31
  def filter_hash(keys_to_filter, hash)
32
+ keys_to_filter.map! {|x| x.to_s}
32
33
  if keys_to_filter.is_a?(Array) && !keys_to_filter.empty?
33
34
  hash.each do |key, value|
34
- if value.respond_to?(:to_hash)
35
- filter_hash(keys_to_filter, hash[key])
36
- elsif key_match?(key, keys_to_filter)
35
+ if key_match?(key, keys_to_filter)
37
36
  hash[key] = "[FILTERED]"
37
+ elsif value.respond_to?(:to_hash)
38
+ filter_hash(keys_to_filter, hash[key])
38
39
  end
39
40
  end
40
41
  end
41
42
  hash
42
43
  end
43
44
 
45
+ # Closer alignment to latest filtered_params:
46
+ # https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/parameter_filter.rb
47
+ # https://github.com/exceptional/exceptional/issues/20
44
48
  def key_match?(key, keys_to_filter)
45
- keys_to_filter.map {|k| k.to_s}.include?(key.to_s)
49
+ keys_to_filter.any? { |k|
50
+ regexp = k.is_a?(Regexp)? k : Regexp.new(k, true)
51
+ key =~ regexp
52
+ }
46
53
  end
47
54
 
48
- def filter_paramaters(hash)
55
+ def filter_parameters(hash)
49
56
  if @request.respond_to?(:env) && @request.env["action_dispatch.parameter_filter"]
50
57
  filter_hash(@request.env["action_dispatch.parameter_filter"], hash)
51
58
  elsif @controller.respond_to?(:filter_parameters)
@@ -55,4 +62,4 @@ module Exceptional
55
62
  end
56
63
  end
57
64
  end
58
- end
65
+ end
@@ -1,12 +1,15 @@
1
- begin
2
- class Delayed::Job
3
- def log_exception_with_exceptional(e)
4
- Exceptional.handle(e, "Delayed::Job #{self.name}")
5
- log_exception_without_exceptional(e)
1
+ if Delayed::Worker.method_defined? :handle_failed_job
2
+ class Delayed::Worker
3
+ def handle_failed_job_with_exceptional(job, e)
4
+ Exceptional.handle(e, "Delayed::Job #{job.name}")
5
+ handle_failed_job_without_exceptional(job, e)
6
6
  Exceptional.context.clear!
7
7
  end
8
- alias_method_chain :log_exception, :exceptional
8
+ alias_method_chain :handle_failed_job, :exceptional
9
9
  Exceptional.logger.info "DJ integration enabled"
10
10
  end
11
- rescue
11
+ else
12
+ message = "\n\n\nThe Exceptional gem does not support Delayed Job 1.8.4 or earlier.\n\n\n"
13
+ STDERR.puts(message)
14
+ Exceptional.logger.error(message)
12
15
  end
@@ -0,0 +1,16 @@
1
+ module Exceptional
2
+ module ExceptionMiddleware
3
+
4
+ def self.included(base)
5
+ base.send(:alias_method_chain,:render_exception,:exceptional)
6
+ end
7
+
8
+ def render_exception_with_exceptional(env,exception)
9
+ ::Exceptional::Catcher.handle_with_controller(exception,
10
+ env['action_controller.instance'],
11
+ Rack::Request.new(env))
12
+ render_exception_without_exceptional(env,exception)
13
+ end
14
+
15
+ end
16
+ end
@@ -1,8 +1,8 @@
1
1
  require 'rubygems'
2
2
  require 'rack'
3
3
 
4
- module Rack
5
- class Exceptional
4
+ module Rack
5
+ class Exceptional
6
6
 
7
7
  def initialize(app, api_key = nil)
8
8
  @app = app
@@ -14,8 +14,8 @@ module Rack
14
14
  ::Exceptional::Config.enabled = true
15
15
  ::Exceptional.logger.info "Enabling Exceptional for Rack"
16
16
  end
17
- end
18
-
17
+ end
18
+
19
19
  def call(env)
20
20
  begin
21
21
  status, headers, body = @app.call(env)
@@ -1,13 +1,13 @@
1
1
  require 'rubygems'
2
2
  require 'rack'
3
3
 
4
- module Rack
5
- class RailsExceptional
4
+ module Rack
5
+ class RailsExceptional
6
6
 
7
7
  def initialize(app)
8
8
  @app = app
9
- end
10
-
9
+ end
10
+
11
11
  def call(env)
12
12
  begin
13
13
  body = @app.call(env)
@@ -21,6 +21,6 @@ module Rack
21
21
  end
22
22
 
23
23
  body
24
- end
24
+ end
25
25
  end
26
26
  end
@@ -0,0 +1,51 @@
1
+ module Exceptional::Rake
2
+ # Integrates Exceptional with Rake
3
+ #
4
+ # Usage:
5
+ #
6
+ # Simply load it inside of your Rakefile.
7
+ #
8
+ # require "exceptional"
9
+ # require "exceptional/integration/rake"
10
+ #
11
+ # task :exceptional do
12
+ # ...
13
+ # # exception happens here
14
+ # raise SomeUnexpectedException
15
+ # ...
16
+ # end
17
+ #
18
+ #
19
+ # Remember to load your Exceptional configuration if
20
+ # you're using Exceptional outside Rails
21
+ #
22
+ # Exceptional::Config.load("/path/to/config.yml")
23
+ #
24
+ def self.included(base)
25
+ base.send(:alias_method,
26
+ :standard_exception_handling,
27
+ :standard_exception_handling_with_exceptional)
28
+ end
29
+
30
+ def standard_exception_handling_with_exceptional
31
+ begin
32
+ yield
33
+ rescue SystemExit => ex
34
+ # Exit silently with current status
35
+ raise
36
+ rescue OptionParser::InvalidOption => ex
37
+ $stderr.puts ex.message
38
+ exit(false)
39
+ rescue Exception => ex
40
+ # Exit with error message
41
+ Exceptional::Catcher.handle(ex)
42
+ display_error_message(ex)
43
+ Exceptional.clear!
44
+ exit(false)
45
+ end
46
+ end
47
+ end
48
+
49
+ Rake::Application.send(:include,Exceptional::Rake)
50
+
51
+ Exceptional.logger.info "Rake integration enabled"
@@ -10,7 +10,7 @@ module Exceptional
10
10
  unless Exceptional::Remote.error(Exceptional::ExceptionData.new(e, "Test Exception"))
11
11
  puts "Problem sending exception to Exceptional. Check your API key."
12
12
  else
13
- puts "Test Exception sent. Please login to http://getexceptional.com to see it!"
13
+ puts "Test Exception sent. Please login to http://exceptional.io to see it!"
14
14
  end
15
15
  end
16
16
  end
@@ -12,7 +12,15 @@ module Exceptional
12
12
 
13
13
  if Exceptional::Config.should_send_to_api?
14
14
  Exceptional.logger.info("Loading Exceptional #{Exceptional::VERSION} for #{Rails::VERSION::STRING}")
15
- app.config.middleware.use "Rack::RailsExceptional"
15
+ if defined?(ActionDispatch::DebugExceptions)
16
+ # rails 3.2.x
17
+ ActionDispatch::DebugExceptions.send(:include,Exceptional::ExceptionMiddleware)
18
+ elsif defined?(ActionDispatch::ShowExceptions)
19
+ # rails 3.0.x && 3.1.x
20
+ ActionDispatch::ShowExceptions.send(:include,Exceptional::ExceptionMiddleware)
21
+ else
22
+ app.config.middleware.use "Rack::RailsExceptional"
23
+ end
16
24
  end
17
25
  end
18
26
  end
@@ -1,3 +1,3 @@
1
1
  module Exceptional
2
- VERSION = '2.0.32'
2
+ VERSION = '2.0.33'
3
3
  end
@@ -1,29 +1,51 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper'
2
2
 
3
- module Delayed
4
- class Job
5
- def log_exception(exception)
6
- # do nothing for now
7
- end
8
- def name
9
- "My delayed job"
3
+
4
+ describe "Delayed Job integration for DJ < 1.8.5" do
5
+ before do
6
+ module Delayed
7
+ class Worker
8
+ end
9
+ end
10
10
  end
11
+ it "should report the lack of support to STDERR" do
12
+ STDERR.should_receive(:puts).with("\n\n\nThe Exceptional gem does not support Delayed Job 1.8.4 or earlier.\n\n\n")
13
+ load File.join(File.dirname(__FILE__), '..', 'lib', 'exceptional', 'integration', 'dj.rb')
14
+ end
15
+ it "should report the lack of support to Exceptional.logger" do
16
+ STDERR.stub(:puts)
17
+ Exceptional.logger.should_receive(:error).with("\n\n\nThe Exceptional gem does not support Delayed Job 1.8.4 or earlier.\n\n\n")
18
+ load File.join(File.dirname(__FILE__), '..', 'lib', 'exceptional', 'integration', 'dj.rb')
11
19
  end
12
20
  end
13
21
 
14
- require File.join(File.dirname(__FILE__), '..', 'lib', 'exceptional', 'integration', 'dj')
15
-
16
- describe Delayed::Job do
22
+ describe 'Delayed Job integration' do
17
23
  before :each do
18
- @job = Delayed::Job.new
24
+ Exceptional::Config.stub!(:should_send_to_api?).and_return(true)
25
+ Exceptional.stub(:handle)
26
+
27
+ module Delayed
28
+ class Worker
29
+ def handle_failed_job(job, exception); end
30
+ end
31
+ end
32
+ load File.join(File.dirname(__FILE__), '..', 'lib', 'exceptional', 'integration', 'dj.rb')
33
+ @worker = Delayed::Worker.new
19
34
  @exception = StandardError.new
35
+ @job = mock(:name => "My delayed job")
20
36
  end
21
- it "should handle exceptions with Exceptional" do
22
- Exceptional.should_receive(:handle).with(@exception, "Delayed::Job My delayed job")
23
- @job.log_exception(@exception)
24
- end
25
- it "should clear context" do
26
- Exceptional.should_receive(:clear!)
27
- @job.log_exception(@exception)
37
+ describe "For Delayed Job > 1.8.5" do
38
+ it "should handle exceptions with Exceptional" do
39
+ Exceptional.should_receive(:handle).with(@exception, 'Delayed::Job My delayed job')
40
+ @worker.handle_failed_job(@job, @exception)
41
+ end
42
+ it "should clear context" do
43
+ Exceptional.should_receive(:clear!)
44
+ @worker.handle_failed_job(@job, @exception)
45
+ end
46
+ it "should invoke the original handle_failed_job" do
47
+ @worker.should_receive(:handle_failed_job_without_exceptional).with(@job, @exception)
48
+ @worker.handle_failed_job(@job, @exception)
49
+ end
28
50
  end
29
51
  end
@@ -6,6 +6,6 @@ describe Exceptional::AlertData do
6
6
  result_json = JSON.parse(data.to_json)
7
7
  result_json['rescue_block']['name'].should == 'Alert'
8
8
  result_json['exception']['message'].should == "A string"
9
- result_json['exception']['exception_class'] == 'Exceptional::Alert'
9
+ result_json['exception']['exception_class'].should == 'Exceptional::Alert'
10
10
  end
11
11
  end
@@ -1,13 +1,37 @@
1
1
  require File.dirname(__FILE__) + '/../spec_helper'
2
2
 
3
3
  describe Exceptional::Catcher do
4
- it "should create exception_data object and send json to the api" do
5
- Exceptional::Config.should_receive(:should_send_to_api?).and_return(true)
6
- exception = mock('exception')
7
- controller = mock('controller')
8
- request = mock('request')
9
- Exceptional::ControllerExceptionData.should_receive(:new).with(exception,controller,request).and_return(data = mock('exception_data'))
10
- Exceptional::Remote.should_receive(:error).with(data)
11
- Exceptional::Catcher.handle_with_controller(exception,controller,request)
4
+ describe "when Exceptional reporting is on" do
5
+ before do
6
+ Exceptional::Config.stub(:should_send_to_api?).and_return(true)
7
+ end
8
+ it "handle_with_controller should create exception_data object and send json to the api" do
9
+ exception = mock('exception')
10
+ controller = mock('controller')
11
+ request = mock('request')
12
+ Exceptional::ControllerExceptionData.should_receive(:new).with(exception,controller,request).and_return(data = mock('exception_data'))
13
+ Exceptional::Remote.should_receive(:error).with(data)
14
+ Exceptional::Catcher.handle_with_controller(exception,controller,request)
15
+ end
16
+ # it "handle_with_rack should create exception_data object and send json to the api"
17
+ # it "handle should create exception_data object and send json to the api"
18
+ end
19
+
20
+ describe "when Exceptional reporting is off" do
21
+ before do
22
+ Exceptional::Config.stub(:should_send_to_api?).and_return(false)
23
+ end
24
+ it "handle_with_controller should reraise the exception and not report it" do
25
+ exception = mock('exception')
26
+ controller = mock('controller')
27
+ request = mock('request')
28
+ Exceptional::ControllerExceptionData.should_not_receive(:new)
29
+ Exceptional::Remote.should_not_receive(:error)
30
+ expect{
31
+ Exceptional::Catcher.handle_with_controller(exception,controller,request)
32
+ }.to raise_error
33
+ end
34
+ # it "handle_with_rack should reraise the exception and not report it"
35
+ # it "handle should reraise the exception and not report it"
12
36
  end
13
37
  end
@@ -127,6 +127,13 @@ describe Exceptional::ControllerExceptionData, 'with request/controller/params'
127
127
  data.to_hash['request']['parameters'].should == {'var1' => '[FILTERED]'}
128
128
  end
129
129
 
130
+ it "filter nested params specified in env['action_dispatch.parameter_filter']" do
131
+ @request.stub!(:env).and_return({'SOME_VAR' => 'abc', 'HTTP_CONTENT_TYPE' => 'text/html', 'action_dispatch.parameter_filter' => [:var1]})
132
+ @request.stub!(:parameters).and_return({'var1' => {'var2' => 'abc','var3' => "abc"}})
133
+ data = Exceptional::ControllerExceptionData.new(@error, @controller, @request)
134
+ data.to_hash['request']['parameters'].should == {'var1' => '[FILTERED]'}
135
+ end
136
+
130
137
  it "formats the occurred_at as iso8601" do
131
138
  @request.stub!(:env).and_return({'SOME_VAR' => 'abc', 'HTTP_CONTENT_TYPE' => 'text/html', 'action_dispatch.parameter_filter' => [:var1]})
132
139
  @request.stub!(:parameters).and_return({'var1' => 'abc'})
@@ -195,4 +202,4 @@ describe Exceptional::ControllerExceptionData, 'with request/controller/params'
195
202
  data = Exceptional::ControllerExceptionData.new(exception)
196
203
  data.uniqueness_hash.should == nil
197
204
  end
198
- end
205
+ end
@@ -37,7 +37,7 @@ describe TestingController do
37
37
  @response.code.should == '500'
38
38
  end
39
39
 
40
- it "filters paramaters based on controller filter_parameter_logging" do
40
+ it "filters parameters based on controller filter_parameter_logging" do
41
41
  Exceptional::Config.stub!(:should_send_to_api?).and_return(true)
42
42
  Exceptional::Remote.should_receive(:error) {|exception_data|
43
43
  exception_data.to_hash['request']['parameters']['credit_card_number'].should == '[FILTERED]'
@@ -92,4 +92,4 @@ if ActionController::Base.respond_to?(:rescue_from)
92
92
  Thread.current[:exceptional_context].should == nil
93
93
  end
94
94
  end
95
- end
95
+ end
@@ -0,0 +1,37 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe 'Rake integration' do
4
+ before :each do
5
+ Exceptional::Config.stub!(:should_send_to_api?).and_return(true)
6
+ Exceptional.stub(:handle)
7
+
8
+ module Rake
9
+ class Application
10
+ def standard_exception_handling; end
11
+ def display_error_message(exception); end
12
+ end
13
+ end
14
+ load File.join(File.dirname(__FILE__), '..', 'lib', 'exceptional', 'integration', 'rake.rb')
15
+ @application = Rake::Application.new
16
+ @exception = StandardError.new "Some rake error"
17
+ end
18
+
19
+ describe "Rake == 0.9.9.2" do
20
+ it "should handle exceptions with Exceptional" do
21
+ Exceptional::Catcher.should_receive(:handle).with(@exception)
22
+ lambda do
23
+ @application.standard_exception_handling do
24
+ raise @exception
25
+ end
26
+ end.should raise_error SystemExit
27
+ end
28
+ it "should clear context" do
29
+ Exceptional.should_receive(:clear!)
30
+ lambda do
31
+ @application.standard_exception_handling do
32
+ raise @exception
33
+ end
34
+ end.should raise_error SystemExit
35
+ end
36
+ end
37
+ end
@@ -8,6 +8,8 @@ end
8
8
  gem 'rails'
9
9
  require File.dirname(__FILE__) + '/../lib/exceptional' unless defined?(Exceptional)
10
10
 
11
+ alias :context :describe
12
+
11
13
  ENV['RAILS_ENV'] = 'test'
12
14
 
13
15
  require 'action_controller'
@@ -20,4 +22,4 @@ def send_request(action = nil,params={})
20
22
  @request.action = action ? action.to_s : ""
21
23
  @response = ActionController::TestResponse.new
22
24
  @controller.process(@request, @response)
23
- end
25
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exceptional
3
3
  version: !ruby/object:Gem::Version
4
- hash: 79
5
- prerelease: false
4
+ hash: 77
5
+ prerelease:
6
6
  segments:
7
7
  - 2
8
8
  - 0
9
- - 32
10
- version: 2.0.32
9
+ - 33
10
+ version: 2.0.33
11
11
  platform: ruby
12
12
  authors:
13
13
  - Contrast
@@ -15,8 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-17 00:00:00 +00:00
19
- default_executable:
18
+ date: 2012-10-05 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
21
  name: rack
@@ -32,7 +31,7 @@ dependencies:
32
31
  version: "0"
33
32
  type: :runtime
34
33
  version_requirements: *id001
35
- description: Exceptional is the Ruby gem for communicating with http://getexceptional.com (hosted error tracking service). Use it to find out about errors that happen in your live app. It captures lots of helpful information to help you fix the errors.
34
+ description: Exceptional is the Ruby gem for communicating with http://exceptional.io (hosted error tracking service). Use it to find out about errors that happen in your live app. It captures lots of helpful information to help you fix the errors.
36
35
  email: hello@contrast.ie
37
36
  executables:
38
37
  - exceptional
@@ -41,57 +40,59 @@ extensions: []
41
40
  extra_rdoc_files: []
42
41
 
43
42
  files:
44
- - lib/exceptional/alert_data.rb
43
+ - lib/exceptional.rb
44
+ - lib/tasks/exceptional_tasks.rake
45
+ - lib/exceptional/startup.rb
45
46
  - lib/exceptional/application_environment.rb
46
- - lib/exceptional/catcher.rb
47
- - lib/exceptional/config.rb
48
- - lib/exceptional/controller_exception_data.rb
49
- - lib/exceptional/exception_data.rb
50
47
  - lib/exceptional/integration/alerter.rb
51
- - lib/exceptional/integration/dj.rb
52
- - lib/exceptional/integration/rack.rb
53
- - lib/exceptional/integration/rack_rails.rb
54
48
  - lib/exceptional/integration/rails.rb
55
- - lib/exceptional/integration/sinatra.rb
49
+ - lib/exceptional/integration/rake.rb
56
50
  - lib/exceptional/integration/tester.rb
51
+ - lib/exceptional/integration/rack.rb
52
+ - lib/exceptional/integration/exception_middleware.rb
53
+ - lib/exceptional/integration/sinatra.rb
54
+ - lib/exceptional/integration/dj.rb
55
+ - lib/exceptional/integration/rack_rails.rb
56
+ - lib/exceptional/controller_exception_data.rb
57
+ - lib/exceptional/exception_data.rb
57
58
  - lib/exceptional/log_factory.rb
58
- - lib/exceptional/monkeypatches.rb
59
- - lib/exceptional/rack_exception_data.rb
59
+ - lib/exceptional/config.rb
60
60
  - lib/exceptional/railtie.rb
61
- - lib/exceptional/remote.rb
62
- - lib/exceptional/startup.rb
61
+ - lib/exceptional/alert_data.rb
62
+ - lib/exceptional/rack_exception_data.rb
63
+ - lib/exceptional/catcher.rb
63
64
  - lib/exceptional/version.rb
64
- - lib/exceptional.rb
65
- - lib/tasks/exceptional_tasks.rake
65
+ - lib/exceptional/monkeypatches.rb
66
+ - lib/exceptional/remote.rb
67
+ - spec/ginger_scenarios.rb
66
68
  - spec/bin/ginger
67
- - spec/dj_integration_spec.rb
69
+ - spec/rails_integration_spec.rb
70
+ - spec/rack_integration_spec.rb
71
+ - spec/exceptional_rescue_spec.rb
72
+ - spec/rails_rack_integration_spec.rb
73
+ - spec/fixtures/favicon.png
74
+ - spec/fixtures/exceptional_old.yml
75
+ - spec/fixtures/exceptional_disabled.yml
76
+ - spec/fixtures/exceptional.yml
77
+ - spec/rake_integration_spec.rb
78
+ - spec/exceptional/monkeypatches_spec.rb
68
79
  - spec/exceptional/alert_exception_data_spec.rb
69
80
  - spec/exceptional/catcher_spec.rb
70
- - spec/exceptional/config_spec.rb
71
81
  - spec/exceptional/controller_exception_data_spec.rb
72
- - spec/exceptional/exception_data_spec.rb
73
- - spec/exceptional/monkeypatches_spec.rb
74
- - spec/exceptional/rack_exception_data_spec.rb
75
82
  - spec/exceptional/remote_spec.rb
76
83
  - spec/exceptional/startup_spec.rb
77
- - spec/exceptional_rescue_spec.rb
78
- - spec/fixtures/exceptional.yml
79
- - spec/fixtures/exceptional_disabled.yml
80
- - spec/fixtures/exceptional_old.yml
81
- - spec/fixtures/favicon.png
82
- - spec/ginger_scenarios.rb
83
- - spec/rack_integration_spec.rb
84
- - spec/rails_integration_spec.rb
85
- - spec/rails_rack_integration_spec.rb
84
+ - spec/exceptional/config_spec.rb
85
+ - spec/exceptional/rack_exception_data_spec.rb
86
+ - spec/exceptional/exception_data_spec.rb
86
87
  - spec/spec_helper.rb
88
+ - spec/dj_integration_spec.rb
87
89
  - spec/standalone_spec.rb
88
90
  - rails/init.rb
89
91
  - init.rb
90
92
  - install.rb
91
93
  - exceptional.gemspec
92
94
  - bin/exceptional
93
- has_rdoc: true
94
- homepage: http://getexceptional.com/
95
+ homepage: http://exceptional.io/
95
96
  licenses: []
96
97
 
97
98
  post_install_message:
@@ -120,9 +121,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
121
  requirements:
121
122
  - json_pure, json-jruby or json gem required
122
123
  rubyforge_project: exceptional
123
- rubygems_version: 1.3.7
124
+ rubygems_version: 1.8.24
124
125
  signing_key:
125
126
  specification_version: 3
126
- summary: getexceptional.com is a hosted service for tracking errors in your Ruby/Rails/Rack apps
127
+ summary: exceptional.io is a hosted service for tracking errors in your Ruby/Rails/Rack apps
127
128
  test_files: []
128
129