crashdesk-rails 0.1.0

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.
@@ -0,0 +1,17 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/crashdesk-rails/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.name = 'crashdesk-rails'
6
+ gem.version = CrashdeskRails::VERSION
7
+ gem.authors = ["Ladislav Martincik"]
8
+ gem.summary = "Crashde.sk Rails Integration"
9
+ gem.description = "crashdesk-rails is the Rails gem for integration with crashde.sk servers"
10
+ gem.email = "info@crashde.sk"
11
+ gem.files = Dir['lib/**/*'] + Dir['spec/**/*'] + Dir['*.rb'] + ["crashdesk-rails.gemspec"]
12
+ gem.homepage = "http://crashde.sk"
13
+ gem.require_paths = ["lib"]
14
+ gem.rubyforge_project = "crashdesk-rails"
15
+ gem.add_dependency('crashdesk', '~> 0')
16
+ gem.add_dependency('rails', '~> 3.0')
17
+ end
@@ -0,0 +1,92 @@
1
+ module CrashdeskRails
2
+
3
+ class ActionControllerContext < Crashdesk::ContextBase
4
+
5
+ def initialize(controller, request)
6
+ @controller = controller
7
+ @request = request
8
+ end
9
+
10
+ # Extract all meaningfull data from our controller.
11
+ def to_hash
12
+ {
13
+ 'url' => request_url,
14
+ 'controller_name' => controller_name,
15
+ 'action_name' => action_name,
16
+ 'parameters' => parameters,
17
+ 'request_method' => request_method,
18
+ 'remote_ip' => remote_ip,
19
+ 'headers' => headers,
20
+ 'session' => session
21
+ }
22
+ end
23
+
24
+ def framework
25
+ "rails"
26
+ end
27
+
28
+ def framework_version
29
+ Rails::VERSION::STRING
30
+ end
31
+
32
+ def request_url
33
+ @request.respond_to?(:url) ? @request.url : "#{@request.protocol}#{@request.host}#{@request.request_uri}"
34
+ end
35
+
36
+ def controller_name
37
+ @controller.class.to_s
38
+ end
39
+
40
+ def action_name
41
+ @request.respond_to?(:parameters) ? @request.parameters['action'] : @request.params['action']
42
+ end
43
+
44
+ def remote_ip
45
+ @request.respond_to?(:remote_ip) ? @request.remote_ip : @request.ip
46
+ end
47
+
48
+ def parameters
49
+ filter_parameters(@request.respond_to?(:parameters) ? @request.parameters : @request.params)
50
+ end
51
+
52
+ def request_method
53
+ @request.request_method.to_s
54
+ end
55
+
56
+ def headers
57
+ extract_http_headers(@request.env)
58
+ end
59
+
60
+ def session
61
+ extract_session(@request)
62
+ end
63
+
64
+ private
65
+
66
+ def filter_hash(keys_to_filter, hash)
67
+ keys_to_filter.map! {|x| x.to_s}
68
+ if keys_to_filter.is_a?(Array) && !keys_to_filter.empty?
69
+ hash.each do |key, value|
70
+ if key_match?(key, keys_to_filter)
71
+ hash[key] = "[FILTERED]"
72
+ elsif value.respond_to?(:to_hash)
73
+ filter_hash(keys_to_filter, hash[key])
74
+ end
75
+ end
76
+ end
77
+ hash
78
+ end
79
+
80
+ def filter_parameters(hash)
81
+ if @request.respond_to?(:env) && @request.env["action_dispatch.parameter_filter"]
82
+ filter_hash(@request.env["action_dispatch.parameter_filter"], hash)
83
+ elsif @controller.respond_to?(:filter_parameters)
84
+ @controller.send(:filter_parameters, hash)
85
+ else
86
+ hash
87
+ end
88
+ end
89
+
90
+ end
91
+
92
+ end
@@ -0,0 +1,21 @@
1
+ module CrashdeskRails
2
+ module DebugExceptions
3
+
4
+ def self.included(base)
5
+ base.send(:alias_method_chain, :render_exception, :crashdesk)
6
+ end
7
+
8
+ # We are overriding this method as we don't want
9
+ # to write our own middleware yet.
10
+ def render_exception_with_crashdesk(env, exception)
11
+ request = Rack::Request.new(env)
12
+ context = ActionControllerContext.new(env['action_controller.instance'], request)
13
+
14
+ crashlog = Crashdesk.crashlog(exception, request, context)
15
+ crashlog.report
16
+
17
+ render_exception_without_crashdesk(env, exception)
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,28 @@
1
+ module CrashdeskRails
2
+ class Middleware
3
+
4
+ def initialize(app)
5
+ @app = app
6
+ end
7
+
8
+ def call(env)
9
+ begin
10
+ status, headers, body = @app.call(env)
11
+ rescue Exception => exception
12
+
13
+ request = Rack::Request.new(env)
14
+ context = ActionControllerContext.new(env['action_controller.instance'], request)
15
+
16
+ crashlog = Crashdesk.crashlog(exception, request, context)
17
+ crashlog.report
18
+
19
+ env['crashdesk.crashlog_crc'] = crashlog.crc
20
+
21
+ raise
22
+ end
23
+
24
+ [status, headers, body]
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ module CrashdeskRails
2
+ class Railtie < Rails::Railtie
3
+
4
+ config.after_initialize do |app|
5
+ Crashdesk.configure do |config|
6
+ config.logger ||= ::Rails.logger
7
+ config.environment_name ||= ::Rails.env
8
+ config.project_root ||= ::Rails.root
9
+ end
10
+
11
+ Crashdesk.logger.info 'Crahsdesk initializing.'
12
+
13
+ if defined? ::ActionDispatch::DebugExceptions
14
+ Crashdesk.logger.debug 'Crashdesk integrated via including DebugExceptions module.'
15
+ # DebugException is middleware inside Rails
16
+ # Would be nice to have our own with nice message rendering.
17
+ ::ActionDispatch::DebugExceptions.send(:include, CrashdeskRails::DebugExceptions)
18
+
19
+ # Also there's ShowException middleware we could override with much
20
+ # nicer default rendering.
21
+ else
22
+ Crashdesk.logger.debug 'Crashdesk integrated via middleware.'
23
+ app.config.middleware.use "CrashdeskRails::Middleware"
24
+ end
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,3 @@
1
+ module CrashdeskRails
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,10 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+
3
+ require 'crashdesk'
4
+
5
+ require 'crashdesk-rails/debug_exceptions'
6
+ require 'crashdesk-rails/middleware'
7
+ require 'crashdesk-rails/action_controller_context'
8
+ require 'crashdesk-rails/version'
9
+
10
+ require 'crashdesk-rails/railtie' if defined?(Rails::Railtie)
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: crashdesk-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ladislav Martincik
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-26 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: crashdesk
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rails
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '3.0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '3.0'
46
+ description: crashdesk-rails is the Rails gem for integration with crashde.sk servers
47
+ email: info@crashde.sk
48
+ executables: []
49
+ extensions: []
50
+ extra_rdoc_files: []
51
+ files:
52
+ - lib/crashdesk-rails/action_controller_context.rb
53
+ - lib/crashdesk-rails/debug_exceptions.rb
54
+ - lib/crashdesk-rails/middleware.rb
55
+ - lib/crashdesk-rails/railtie.rb
56
+ - lib/crashdesk-rails/version.rb
57
+ - lib/crashdesk-rails.rb
58
+ - crashdesk-rails.gemspec
59
+ homepage: http://crashde.sk
60
+ licenses: []
61
+ post_install_message:
62
+ rdoc_options: []
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ requirements: []
78
+ rubyforge_project: crashdesk-rails
79
+ rubygems_version: 1.8.24
80
+ signing_key:
81
+ specification_version: 3
82
+ summary: Crashde.sk Rails Integration
83
+ test_files: []