exceptiontrap 0.0.1.alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ pkg
2
+ *.DS_Store
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in exceptiontrap_notifier.gemspec
4
+ gemspec
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 [Torsten Bühl]
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,71 @@
1
+ # Exceptiontrap
2
+
3
+ This gem is used to report your Ruby on Rails applications exceptions to the [Exceptiontrap](https://alpha.exceptiontrap.com) webservice.
4
+
5
+ The gem is compatible with the following Rails versions
6
+
7
+ - >= 2.3
8
+ - >= 3
9
+
10
+ **This is an Alpha Release**
11
+
12
+ ## Setup
13
+
14
+ ### Rails 3
15
+
16
+ #### 1. Install
17
+
18
+ Install the Exceptiontrap gem by putting this line to your `Gemfile`
19
+
20
+ gem 'exceptiontrap'
21
+
22
+ then run `bundle`
23
+
24
+ #### 2. Configure
25
+
26
+ Now generate the `config/exceptiontrap.yml` file with
27
+
28
+ rails generate exceptiontrap --api-key YOUR_API_KEY
29
+
30
+ and you should be fine.
31
+
32
+ ### Rails 2.3
33
+
34
+ #### 1a. Install (with Bundler)
35
+
36
+ Install the Exceptiontrap gem by putting this line to your `Gemfile`
37
+
38
+ gem 'exceptiontrap'
39
+
40
+ then run `bundle`
41
+
42
+ #### 1b. Install (without Bundler)
43
+
44
+ Install the Exceptiontrap gem by putting this line to your `config/environment.rb` file
45
+
46
+ config.gem 'exceptiontrap'
47
+
48
+ then run `rake gems:install`
49
+
50
+ #### 2. Configure
51
+
52
+ Now generate the `config/exceptiontrap.yml` file with
53
+
54
+ script/generate exceptiontrap --api-key YOUR_API_KEY
55
+
56
+ and you should be fine.
57
+
58
+ ## Information / Further Configuration
59
+
60
+ You can find your API-Key by login to your [Exceptiontrap Account](https://alpha.exceptiontrap.com/login), select the application and follow the `Setup` Link.
61
+
62
+ ## Known Issues / Todo
63
+
64
+ At the moment ActionController::RoutingError's are not catched in Rails 3 applications.
65
+
66
+ SSL-Support is not included.
67
+
68
+ Optimize and insert the test suite to the gem.
69
+
70
+
71
+ Copyright (c) 2012 [Torsten Bühl], released under the MIT license
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "exceptiontrap/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "exceptiontrap"
7
+ s.version = Exceptiontrap::VERSION
8
+ s.authors = ["tbuehl"]
9
+ s.email = ["tbuehl@itm-labs.de"]
10
+ s.homepage = "http://exceptiontrap.com"
11
+ s.summary = %q{Used to report your apps exceptions to the exceptiontrap webservice}
12
+ s.description = %q{The gem catches your applications exceptionts and sends those to the exceptiontrap webservice}
13
+
14
+ s.rubyforge_project = "exceptiontrap"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+ end
@@ -0,0 +1,11 @@
1
+ Description:
2
+ Run this generator to create the Exceptiontrap config file
3
+
4
+ Example:
5
+ Rails 2
6
+ ./script/generate exceptiontrap --api-key YOUR_API_KEY
7
+ Rails 3
8
+ rails generate exceptiontrap --api-key YOUR_API_KEY
9
+
10
+ This will create:
11
+ The Exceptiontrap config file in your applications config directory
@@ -0,0 +1,21 @@
1
+ class ExceptiontrapGenerator < Rails::Generator::Base
2
+ def add_options!(opt)
3
+ opt.on('-k', '--api-key=key', String, "Your Exceptiontrap API key") {|v| options[:api_key] = v}
4
+ end
5
+
6
+ def manifest
7
+ if !options[:api_key]
8
+ puts "You have to pass --api-key or create config/exceptiontrap.yml manually"
9
+ exit
10
+ end
11
+
12
+ record do |m|
13
+ m.template 'exceptiontrap.yml', 'config/exceptiontrap.yml', :assigns => {:api_key => api_key}
14
+ end
15
+ end
16
+
17
+ def api_key
18
+ return "#{options[:api_key]}"
19
+ end
20
+
21
+ end
@@ -0,0 +1,15 @@
1
+ # Exceptiontrap Config File
2
+ api-key: <%= api_key %>
3
+ ssl: false
4
+ timeout: 5000
5
+ enabledEnvironments:
6
+ - 'production'
7
+ ignoreExceptions:
8
+ - 'ActiveRecord::RecordNotFound'
9
+ - 'ActionController::RoutingError'
10
+ - 'ActionController::InvalidAuthenticityToken'
11
+ - 'CGI::Session::CookieStore::TamperedWithCookie'
12
+ - 'ActionController::UnknownAction'
13
+ filterParams:
14
+ - 'password'
15
+ - 's3-key'
data/init.rb ADDED
@@ -0,0 +1,9 @@
1
+ # Include hook code here
2
+ require 'exceptiontrap'
3
+
4
+ begin
5
+ # puts "-- Exceptiontrap is active --"
6
+ rescue => e
7
+ STDERR.puts "Problem starting Exceptiontrap Plugin. Your app will run as normal."
8
+ STDERR.puts e
9
+ end
data/install.rb ADDED
@@ -0,0 +1 @@
1
+ # Install hook code here
@@ -0,0 +1,35 @@
1
+ module Exceptiontrap
2
+ module Catcher
3
+ def self.included(base)
4
+ # Uses the public rescue method
5
+ base.send(:alias_method, :original_rescue_action_in_public, :rescue_action_in_public)
6
+ base.send(:alias_method, :rescue_action_in_public, :rescue_action_public_exceptiontrap)
7
+
8
+ # Uses the local rescue method
9
+ base.send(:alias_method, :original_rescue_action_locally, :rescue_action)
10
+ base.send(:alias_method, :rescue_action, :rescue_action_local_exceptiontrap)
11
+ end
12
+
13
+ private
14
+ # When the exception occured in public
15
+ def rescue_action_public_exceptiontrap(exception)
16
+ handle_with_exceptiontrap(exception)
17
+ original_rescue_action_in_public(exception) # to rails again
18
+ end
19
+
20
+ # When the exception occured locally
21
+ def rescue_action_local_exceptiontrap(exception)
22
+ handle_with_exceptiontrap(exception)
23
+ original_rescue_action_locally(exception) # to rails again
24
+ end
25
+
26
+ # Sends the exception to exceptiontrap
27
+ def handle_with_exceptiontrap(exception)
28
+ # puts "DEBUG: Raised Exceptiontrap::Catcher::Exception"
29
+ data = Exceptiontrap::Data.rails2_data(exception, request, session, response)
30
+ Exceptiontrap::Notifier.notify(data)
31
+ end
32
+
33
+ end
34
+
35
+ end
@@ -0,0 +1,74 @@
1
+ module Exceptiontrap
2
+ class Config
3
+ class << self
4
+ DEFAULTS = {
5
+ :ssl => false,
6
+ :disabled_by_default => %w(development test)
7
+ }
8
+
9
+ attr_accessor :api_key, :enabled, :ssl
10
+
11
+ def load(config_file=nil)
12
+ if (config_file && File.file?(config_file))
13
+ begin
14
+ config = YAML::load(File.open(config_file))
15
+ env_config = config[application_environment] || {}
16
+
17
+ @api_key = config['api-key'] || env_config['api-key']
18
+ @ssl = config['ssl'] || env_config['ssl']
19
+ @ignoreExceptions = config['ignoreExceptions']
20
+ @filterParams = config['filterParams']
21
+ @enabledEnvironments = config['enabledEnvironments']
22
+ rescue Exception => e
23
+ raise ConfigException.new("Unable to load configuration #{config_file} for environment #{application_environment} : #{e.message}")
24
+ end
25
+ end
26
+ end
27
+
28
+ def api_key
29
+ return @api_key unless @api_key.nil?
30
+ end
31
+
32
+ def enabled_environments
33
+ @enabledEnvironments ||= [""]
34
+ end
35
+
36
+ def ignored_exceptions
37
+ @ignoreExceptions ||= [""]
38
+ end
39
+
40
+ def filtered_params
41
+ @filterParams || nil
42
+ end
43
+
44
+ def application_environment
45
+ ENV['RACK_ENV'] || ENV['RAILS_ENV'] || 'development'
46
+ end
47
+
48
+ def should_send_to_api?
49
+ @enabled ||= DEFAULTS[:disabled_by_default].include?(application_environment) ? false : true
50
+ end
51
+
52
+ def application_root
53
+ defined?(Rails.root) ? Rails.root : Dir.pwd
54
+ end
55
+
56
+ def ssl?
57
+ @ssl ||= DEFAULTS[:ssl]
58
+ end
59
+
60
+ def remote_host
61
+ @remote_host ||= DEFAULTS[:remote_host_http]
62
+ end
63
+
64
+ def remote_port
65
+ @remote_port ||= ssl? ? 443 : 80
66
+ end
67
+
68
+ def reset
69
+ @enabled = @ssl = @api_key = nil
70
+ end
71
+
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,131 @@
1
+ module Exceptiontrap
2
+ class Data
3
+ class << self
4
+ # TODO: Remove the duplication
5
+ # Creates Notification Data for action controller requests (Rails 2)
6
+ def rails2_data(exception, request, session, response)
7
+ data = {
8
+ 'notifier' => NOTIFIER_NAME,
9
+ 'api-key' => Config.api_key,
10
+ 'name' => exception.class.name,
11
+ 'message' => exception.message,
12
+ 'root' => application_root,
13
+ 'app-environment' => application_environment,
14
+ 'request-uri' => request.url || REQUEST_URI,
15
+ 'request-params' => clean_params(request.params),
16
+ 'request-session' => clean_params(extrap_session_data(session)),
17
+ 'environment' => clean_params(request.env),
18
+ 'trace' => clean_backtrace(exception).join("\n"),
19
+ 'request-components' => { :controller => request.params[:controller], :action => request.params[:action] }
20
+ }
21
+ end
22
+
23
+ # Creates Notification Data for rack requests (Rails 3)
24
+ def rack_data(exception, env)
25
+ components = { }
26
+ if env["action_dispatch.request.parameters"] != nil
27
+ components[:controller] = env["action_dispatch.request.parameters"][:controller] || nil
28
+ components[:action] = env["action_dispatch.request.parameters"][:action] || nil
29
+ components[:module] = env["action_dispatch.request.parameters"][:module] || nil
30
+ end
31
+
32
+ data = {
33
+ 'notifier' => NOTIFIER_NAME,
34
+ 'api-key' => Config.api_key,
35
+ 'name' => exception.class.name,
36
+ 'message' => exception.message,
37
+ 'root' => application_root,
38
+ 'app-environment' => application_environment,
39
+ 'request-uri' => env["REQUEST_URI"],
40
+ 'request-params' => clean_params(env["action_dispatch.request.parameters"]),
41
+ 'request-session' => clean_params(extrap_session_data(env["rack.session"])),
42
+ 'environment' => clean_params(env),
43
+ 'trace' => clean_backtrace(exception).join("\n"),
44
+ 'request-components' => components
45
+ }
46
+ end
47
+
48
+ ### Cleanup
49
+ def clean_params(params)
50
+ return if params == nil
51
+
52
+ params = normalize_data(params)
53
+ params = filter_params(params)
54
+ params
55
+ end
56
+
57
+ # Deletes params from env / set in config file
58
+ def remove_params
59
+ remove_params = ["rack.request.form_hash", "rack.request.form_vars", "rack.request.form_hash"]
60
+ end
61
+
62
+ # Trims first underscore from keys, to prevent "malformed" rails XML-tags
63
+ def normalize_data(hash)
64
+ new_hash = {}
65
+
66
+ # TODO: Do this nicer
67
+ hash.each do |key, value|
68
+ key_s = key.to_s.dup
69
+ key_s.sub!("_", "") if key_s[0].chr == "_"
70
+ key_s.sub!("_", "") if key_s[0].chr == "_"
71
+
72
+ if value.respond_to?(:to_hash) # if hash, normalize these too
73
+ new_hash[key_s] = normalize_data(value.to_hash)
74
+ else
75
+ new_hash[key_s] = value.to_s
76
+ end
77
+ end
78
+
79
+ new_hash
80
+ end
81
+
82
+ # Replaces parameter values with a string / set in config file
83
+ def filter_params(params)
84
+ if Config.filtered_params
85
+ params.each do |key, value|
86
+ if filter_key?(key)
87
+ params[key] = "[FILTERED]"
88
+ elsif value.respond_to?(:to_hash)
89
+ filter_params(params[key])
90
+ end
91
+ end
92
+ end
93
+ params
94
+ end
95
+
96
+ # Check, if a key should be filtered
97
+ def filter_key?(key)
98
+ Config.filtered_params.any? do |filter|
99
+ key.to_s.include?(filter.to_s)
100
+ end
101
+ end
102
+
103
+ ### Getter
104
+ def extrap_session_data(session)
105
+ return if session == nil
106
+ if session.respond_to?(:to_hash)
107
+ session.to_hash
108
+ else
109
+ session.data
110
+ end
111
+ end
112
+
113
+ def application_environment
114
+ ENV['RACK_ENV'] || ENV['RAILS_ENV'] || 'development'
115
+ end
116
+
117
+ def application_root
118
+ defined?(Rails.root) ? Rails.root : Dir.pwd
119
+ end
120
+
121
+ def clean_backtrace(exception)
122
+ if Rails.respond_to?(:backtrace_cleaner)
123
+ Rails.backtrace_cleaner.send(:filter, exception.backtrace)
124
+ else
125
+ exception.backtrace
126
+ end
127
+ end
128
+
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,34 @@
1
+ module Exceptiontrap
2
+ class Notifier
3
+ class << self
4
+ def notify(data)
5
+ puts "DEBUG: Notify Exception"
6
+
7
+ @data = data
8
+ xml_data = data.to_xml({:root => 'problem', :skip_types => true}).to_s
9
+ send_problem(xml_data) if !ignore_exception?
10
+ end
11
+
12
+ def send_problem(xml_data)
13
+ puts "DEBUG: Send Exception"
14
+
15
+ url = URI.parse(NOTIFICATION_URL)
16
+ http = Net::HTTP.new(url.host, url.port)
17
+
18
+ response = begin
19
+ http.post(url.path, xml_data, HEADERS)
20
+ rescue TimeoutError => e
21
+ puts "ERROR: Timeout while contacting Exceptiontrap."
22
+ nil
23
+ rescue Exception => e
24
+ puts "ERROR: Error on sending: #{e.class} - #{e.message}"
25
+ end
26
+ end
27
+
28
+ def ignore_exception?
29
+ Config.ignored_exceptions.include?(@data['name'])
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,22 @@
1
+ module Exceptiontrap
2
+ class Rack
3
+ def initialize(app)
4
+ @app = app
5
+ end
6
+
7
+ def call(env)
8
+ begin
9
+ puts "DEBUG: Begin Exceptiontrap::Rack"
10
+ response = @app.call(env)
11
+ rescue Exception => raised
12
+ puts "DEBUG: Raised Exceptiontrap::Rack::Exception"
13
+ data = Exceptiontrap::Data.rack_data(raised, env)
14
+ Exceptiontrap::Notifier.notify(data)
15
+ raise
16
+ end
17
+
18
+ response
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,15 @@
1
+ require 'exceptiontrap'
2
+ require 'exceptiontrap/data'
3
+ require 'rails'
4
+
5
+ module Exceptiontrap
6
+ class ExceptiontrapRailtie < Rails::Railtie
7
+ initializer "exceptiontrap.middleware" do |app|
8
+ Exceptiontrap::Config.load(File.join(Rails.root, "/config/exceptiontrap.yml"))
9
+ if Config.enabled_environments.include?(Exceptiontrap::Data.application_environment)
10
+ # puts "-> Activated Exceptiontrap::Rack for Rails 3 (Railtie)"
11
+ app.config.middleware.insert_after 'ActionDispatch::ShowExceptions', 'Exceptiontrap::Rack'
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ module Exceptiontrap
2
+ VERSION = "0.0.1.alpha"
3
+ end
@@ -0,0 +1,38 @@
1
+ require 'net/http'
2
+ require 'net/https'
3
+ require 'uri'
4
+
5
+ require "exceptiontrap/version"
6
+ require "exceptiontrap/config"
7
+ require 'exceptiontrap/notifier'
8
+ require 'exceptiontrap/rack'
9
+
10
+ # Use Rack Middleware for Rails 3
11
+ require 'exceptiontrap/railtie' if defined?(Rails::Railtie)
12
+
13
+ # Exceptiontrap
14
+ module Exceptiontrap
15
+ API_VERSION = "0.1"
16
+ NOTIFIER_NAME = "exceptiontrap-rails"
17
+ # NOTIFICATION_URL = "http://localhost:3000/problems"
18
+ NOTIFICATION_URL = "http://alpha.exceptiontrap.com/problems"
19
+
20
+ HEADERS = {
21
+ 'Content-type' => 'text/xml',
22
+ 'Accept' => 'text/xml, application/xml'
23
+ }
24
+
25
+ # Load for Rails 2.3 (Rack and Exceptiontrap::Catcher)
26
+ if !defined?(Rails::Railtie) && defined?(Rails.configuration) && Rails.configuration.respond_to?(:middleware)
27
+ Exceptiontrap::Config.load(File.join(Rails.root, "/config/exceptiontrap.yml"))
28
+
29
+ if Config.enabled_environments.include?(Exceptiontrap::Data.application_environment)
30
+ if defined?(ActionController::Base) && !ActionController::Base.include?(Exceptiontrap::Catcher)
31
+ ActionController::Base.send(:include, Exceptiontrap::Catcher) # puts "-> Activated Exceptiontrap::Catcher for Rails 2"
32
+ end
33
+
34
+ Rails.configuration.middleware.use 'Exceptiontrap::Rack' # puts "-> Activated Exceptiontrap::Rack for Rails 2.3+"
35
+ end
36
+ end
37
+
38
+ end
@@ -0,0 +1,28 @@
1
+ require 'rails/generators'
2
+
3
+ class ExceptiontrapGenerator < Rails::Generators::Base
4
+ desc "Run this generator to create the Exceptiontrap config file"
5
+
6
+ class_option :api_key, :aliases => "-k", :type => :string, :desc => "Your Exceptiontrap API key"
7
+
8
+ def self.source_root
9
+ @source_root ||= File.join(File.dirname(__FILE__), 'templates')
10
+ end
11
+
12
+ def install
13
+ if !options[:api_key]
14
+ puts "You have to pass --api-key or create config/exceptiontrap.yml manually"
15
+ exit
16
+ end
17
+ #copy_config
18
+ end
19
+
20
+ def api_key
21
+ s = "#{options[:api_key]}"
22
+ end
23
+
24
+ def copy_config
25
+ puts "Copying config file to your app"
26
+ template 'exceptiontrap.yml', 'config/exceptiontrap.yml'
27
+ end
28
+ end
@@ -0,0 +1,15 @@
1
+ # Exceptiontrap Config File
2
+ api-key: <%= api_key %>
3
+ ssl: false
4
+ timeout: 5000
5
+ enabledEnvironments:
6
+ - 'production'
7
+ ignoreExceptions:
8
+ - 'ActiveRecord::RecordNotFound'
9
+ - 'ActionController::RoutingError'
10
+ - 'ActionController::InvalidAuthenticityToken'
11
+ - 'CGI::Session::CookieStore::TamperedWithCookie'
12
+ - 'ActionController::UnknownAction'
13
+ filterParams:
14
+ - 'password'
15
+ - 's3-key'
data/rails/init.rb ADDED
@@ -0,0 +1 @@
1
+ require File.join(File.dirname(__FILE__) , '../init.rb')
@@ -0,0 +1,4 @@
1
+ desc "Install Exceptiontrap"
2
+ task :exceptiontrap do
3
+ puts "Copy Config File to your application"
4
+ end
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ class ExceptiontrapTest < ActiveSupport::TestCase
4
+ # Replace this with your real tests.
5
+ test "the truth" do
6
+ assert true
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'active_support'
3
+ require 'active_support/test_case'
data/uninstall.rb ADDED
@@ -0,0 +1 @@
1
+ # Uninstall hook code here
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: exceptiontrap
3
+ version: !ruby/object:Gem::Version
4
+ hash: 296151482
5
+ prerelease: 6
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ - alpha
11
+ version: 0.0.1.alpha
12
+ platform: ruby
13
+ authors:
14
+ - tbuehl
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2012-01-04 00:00:00 +01:00
20
+ default_executable:
21
+ dependencies: []
22
+
23
+ description: The gem catches your applications exceptionts and sends those to the exceptiontrap webservice
24
+ email:
25
+ - tbuehl@itm-labs.de
26
+ executables: []
27
+
28
+ extensions: []
29
+
30
+ extra_rdoc_files: []
31
+
32
+ files:
33
+ - .gitignore
34
+ - Gemfile
35
+ - MIT-LICENSE
36
+ - README.md
37
+ - Rakefile
38
+ - exceptiontrap.gemspec
39
+ - generators/exceptiontrap/USAGE
40
+ - generators/exceptiontrap/exceptiontrap_generator.rb
41
+ - generators/exceptiontrap/templates/exceptiontrap.yml
42
+ - init.rb
43
+ - install.rb
44
+ - lib/exceptiontrap.rb
45
+ - lib/exceptiontrap/catcher.rb
46
+ - lib/exceptiontrap/config.rb
47
+ - lib/exceptiontrap/data.rb
48
+ - lib/exceptiontrap/notifier.rb
49
+ - lib/exceptiontrap/rack.rb
50
+ - lib/exceptiontrap/railtie.rb
51
+ - lib/exceptiontrap/version.rb
52
+ - lib/generators/exceptiontrap/exceptiontrap_generator.rb
53
+ - lib/generators/exceptiontrap/templates/exceptiontrap.yml
54
+ - rails/init.rb
55
+ - tasks/exceptiontrap_tasks.rake
56
+ - test/exceptiontrap_test.rb
57
+ - test/test_helper.rb
58
+ - uninstall.rb
59
+ has_rdoc: true
60
+ homepage: http://exceptiontrap.com
61
+ licenses: []
62
+
63
+ post_install_message:
64
+ rdoc_options: []
65
+
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ hash: 3
74
+ segments:
75
+ - 0
76
+ version: "0"
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ">"
81
+ - !ruby/object:Gem::Version
82
+ hash: 25
83
+ segments:
84
+ - 1
85
+ - 3
86
+ - 1
87
+ version: 1.3.1
88
+ requirements: []
89
+
90
+ rubyforge_project: exceptiontrap
91
+ rubygems_version: 1.6.2
92
+ signing_key:
93
+ specification_version: 3
94
+ summary: Used to report your apps exceptions to the exceptiontrap webservice
95
+ test_files:
96
+ - test/exceptiontrap_test.rb
97
+ - test/test_helper.rb