crashlog 1.0.4 → 1.0.5

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/Gemfile.lock CHANGED
@@ -8,13 +8,13 @@ GIT
8
8
  PATH
9
9
  remote: .
10
10
  specs:
11
- crashlog (1.0.3)
11
+ crashlog (1.0.4)
12
12
  crashlog-auth-hmac (~> 1.1.6)
13
13
  faraday (~> 0.8.4)
14
14
  hashr
15
15
  json
16
- multi_json (~> 1.3.6)
17
- rabl (>= 0.6.14)
16
+ multi_json (>= 1.1.0)
17
+ rabl (>= 0.6.13)
18
18
  uuid
19
19
 
20
20
  GEM
@@ -50,9 +50,9 @@ GEM
50
50
  rb-inotify (~> 0.8.8)
51
51
  macaddr (1.6.1)
52
52
  systemu (~> 2.5.0)
53
- multi_json (1.3.6)
53
+ multi_json (1.3.7)
54
54
  multipart-post (1.1.5)
55
- rabl (0.7.3)
55
+ rabl (0.7.6)
56
56
  activesupport (>= 2.3.14)
57
57
  multi_json (~> 1.0)
58
58
  rack (1.4.1)
data/README.md CHANGED
@@ -21,7 +21,11 @@ Or install it yourself as:
21
21
 
22
22
  $ gem install crashlog
23
23
 
24
- ## Configuration
24
+ Generate a Rails Initializer:
25
+
26
+ $ rails generate crashlog KEY:SECRET
27
+
28
+ ## Custom Configuration
25
29
 
26
30
  ### Basic:
27
31
 
data/crashlog.gemspec CHANGED
@@ -16,9 +16,9 @@ Gem::Specification.new do |gem|
16
16
  gem.version = CrashLog::VERSION
17
17
 
18
18
  gem.add_dependency("faraday", '~> 0.8.4')
19
- gem.add_dependency("multi_json", '~> 1.3.6')
19
+ gem.add_dependency("multi_json", '>= 1.1.0')
20
20
  gem.add_dependency("crashlog-auth-hmac", '~> 1.1.6')
21
- gem.add_dependency("rabl", '>= 0.6.14')
21
+ gem.add_dependency("rabl", '>= 0.6.13')
22
22
  gem.add_dependency("uuid")
23
23
  gem.add_dependency("hashr")
24
24
  gem.add_dependency("json")
@@ -0,0 +1,15 @@
1
+ Description:
2
+ Generates an initializer in config/initializers and
3
+ runs `rake crashlog:test` to ensure you're able to send exceptions.
4
+
5
+ Example:
6
+
7
+ rails generate crashlog KEY:SECRET
8
+
9
+ Help:
10
+ If you receive an error during the connection test it is most likely that your
11
+ KEY or SECRET are incorrect.
12
+
13
+ If you continue to have issues, or you just want to say hi, send
14
+ an email to support@crashlog.io
15
+
@@ -1,7 +1,100 @@
1
+ # Use this hook to configure how you want CrashLog to behave in your application.
2
+
3
+ # If you're using Bundler.setup instead of Bundler.require you will need to
4
+ # require CrashLog explicitly:
5
+ #
6
+ # require 'crashlog'
7
+
1
8
  <% if Rails::VERSION::MAJOR < 3 && Rails::VERSION::MINOR < 2 -%>
2
9
  require 'crash_log/rails'
3
10
  <% end -%>
4
11
  CrashLog.configure do |config|
12
+ # ==> Authentication credentials
13
+ # Enter your authentication credentials here. You can get these from the
14
+ # 'Authentication' tab of your project in the CrashLog UI https://crashlog.io
5
15
  config.api_key = <%= api_key_expression %>
6
16
  config.secret = <%= secret_expression %>
17
+
18
+ # ==> Ignored exceptions
19
+ # By default we ignore:
20
+ # - ActiveRecord::RecordNotFound,
21
+ # - ActionController::RoutingError,
22
+ # - ActionController::InvalidAuthenticityToken
23
+ # - CGI::Session::CookieStore::TamperedWithCookie
24
+ # - ActionController::UnknownAction
25
+ # - AbstractController::ActionNotFound
26
+ # - Mongoid::Errors::DocumentNotFound
27
+ #
28
+ # Generally most of these result in a 404 being sent back to the client,
29
+ # as such they can create a lot of noise.
30
+ #
31
+ # To disable any of them uncomment and update this line:
32
+ # config.ignore -= %w(ActionController::RoutingError)
33
+ # or, don't ignore anything:
34
+ # config.ignore = []
35
+
36
+ # ==> Release stages
37
+ # Configure the stages that you can to capture exceptions in. By default
38
+ # we only activate in production and staging.
39
+ #
40
+ # When your application starts it will set the current stage to the name
41
+ # of the current environment.
42
+ #
43
+ # Add another stage:
44
+ # config.release_stages << 'integration'
45
+
46
+ # ==> HTTP Adapter
47
+ # Change adapter used to talk to CrashLog collection endpoints.
48
+ # Available options:
49
+ #
50
+ # - :test - Test adapter, used for running tests.
51
+ # - :net_http - (Default) Ruby Net::HTTP
52
+ # - :net_http_persistent - Ruby Net::HTTP in persistent mode
53
+ # - :typhoeus - High performance parallel HTTP adapter
54
+ # - :patron - Ruby HTTP client based on libcurl
55
+ # - :em_synchrony - Asynchronous EventMachine based adapter
56
+ # - :em_http - Pretty much the same of above.
57
+ # - :excon - The wonderful adapter used by Fog.
58
+ # - :rack - Rack adapter
59
+ # - :httpclient - 'httpclient' gives something like the
60
+ # functionality of libwww-perl (LWP) in Ruby
61
+ #
62
+ # config.adapter = :net_http
63
+
64
+ # ==> Timeouts
65
+ # Increase these if you experience connection issues.
66
+ #
67
+ # Timeout for connecting to CrashLog collector interface (in seconds)
68
+ # config.http_open_timeout = 5
69
+ #
70
+ # Timeout for actually sending the exeption payload (in seconds)
71
+ # config.http_read_timeout = 2
72
+
73
+ # ==> Environment filters
74
+ # Filters for filtering ENV[] which gets sent with each exception.
75
+ # Refer to https://github.com/crashlog/crashlog/blob/master/lib/crash_log/configuration.rb
76
+ #
77
+ # config.environment_filters += [/SOMETHING_SECRET/]
78
+
79
+ # ==> Backtrace filters
80
+ # Standard backtrace filters (processed by every line)
81
+ # config.backtrace_filters += lambda { |line| }
82
+
83
+ # ==> JSON Engine
84
+ # If you have trouble encoding or decoding, or you're using a specific JSON
85
+ # engine in your app, set it here.
86
+ #
87
+ # We use MultiJson behind the scenes so any option available to MultiJson can
88
+ # be set.
89
+ # config.json_parser = :yajl
90
+
91
+ # ==> SSL certificate chain
92
+ # On some platforms the SSL implementation available to Ruby doesn't include
93
+ # our SSL providers certificate in the default chain. Because of this we package
94
+ # our own certificate chain and use if by default. If you want to use the
95
+ # system chain, set this to false.
96
+ # config.use_system_ssl_cert_chain = false
97
+
98
+ # ==> Advanced options
99
+ # Refer to https://github.com/crashlog/crashlog/blob/master/lib/crash_log/configuration.rb
7
100
  end
@@ -156,7 +156,9 @@ module CrashLog
156
156
  :service_name => 'CrashLog',
157
157
 
158
158
  # MultiJson adapter
159
- :json_parser => MultiJson.default_adapter,
159
+ :json_parser => MultiJson.respond_to?(:default_adapter) ?
160
+ MultiJson.default_adapter :
161
+ MultiJson.default_engine,
160
162
 
161
163
  # Development mode
162
164
  # When enabled we don't swallow internal exceptions.
@@ -19,10 +19,10 @@ module CrashLog
19
19
  @announce_endpoint = config.announce == true ?
20
20
  config.announce_endpoint : nil
21
21
 
22
- # Old versions of MultiJson don't support #use.
23
- # TODO: Figure out what they do support. IV.
24
22
  if MultiJson.respond_to?(:use)
25
23
  MultiJson.use(config.json_parser || MultiJson.default_adapter)
24
+ elsif MultiJson.respond_to?(:engine=)
25
+ MultiJson.engine = (config.json_parser || MultiJson.default_engine)
26
26
  end
27
27
  end
28
28
 
@@ -31,7 +31,7 @@ module CrashLog
31
31
 
32
32
  # TODO: Move this to Payload.
33
33
  payload[:data] = CrashLog::Helpers.cleanup_obj(payload[:data])
34
- payload_string = MultiJson.encode({:payload => payload})
34
+ payload_string = encode({:payload => payload})
35
35
 
36
36
  # Useful to make sure we're successfully capturing the right data
37
37
  debug(payload.inspect) if config.development_mode?
@@ -50,9 +50,9 @@ module CrashLog
50
50
  return if dry_run?
51
51
  return "Unknown application" unless announce_endpoint
52
52
 
53
- response = post(config.announce_endpoint, MultiJson.encode({:payload => identification_hash}))
53
+ response = post(config.announce_endpoint, encode({:payload => identification_hash}))
54
54
  if response.status == 201
55
- MultiJson.load(response.body).symbolize_keys.fetch(:application_name, 'Default')
55
+ decode(response.body).symbolize_keys.fetch(:application_name, 'Default')
56
56
  else
57
57
  nil
58
58
  end
@@ -63,7 +63,7 @@ module CrashLog
63
63
  end
64
64
 
65
65
  def report_result(body)
66
- @result = MultiJson.load(body).symbolize_keys
66
+ @result = decode(body).symbolize_keys
67
67
  end
68
68
 
69
69
  def url
@@ -117,5 +117,28 @@ module CrashLog
117
117
  def adapter
118
118
  config.adapter
119
119
  end
120
+
121
+ # FIXME: This is some seriously annoying shit.
122
+ # MultiJson should not have deprecated its old API and we wouldn't need
123
+ # to do this.
124
+ def encode(object)
125
+ if MultiJson.respond_to?(:dump)
126
+ # MultiJson >= 1.3
127
+ MultiJson.dump(object)
128
+ elsif MultiJson.respond_to?(:encode)
129
+ # MultiJson < 1.3
130
+ MultiJson.encode(object)
131
+ end
132
+ end
133
+
134
+ def decode(string, options = {})
135
+ if MultiJson.respond_to?(:load)
136
+ # MultiJson >= 1.3
137
+ MultiJson.load(string, options)
138
+ elsif MultiJson.respond_to?(:decode)
139
+ # MultiJson < 1.3
140
+ MultiJson.decode(string, options)
141
+ end
142
+ end
120
143
  end
121
144
  end
@@ -1,3 +1,3 @@
1
1
  module CrashLog
2
- VERSION = "1.0.4"
2
+ VERSION = "1.0.5"
3
3
  end
@@ -1,37 +1,41 @@
1
1
  require 'rails/generators'
2
2
 
3
3
  class CrashlogGenerator < Rails::Generators::Base
4
-
5
- class_option :api_key, :aliases => "-k", :type => :string, :desc => "Your CrashLog API key"
6
- class_option :secret, :aliases => "-s", :type => :string, :desc => "Your CrashLog API secret"
7
-
8
- def self.source_root
9
- @_crashlog_source_root ||= File.expand_path("../../../../../generators/crashlog/templates", __FILE__)
10
- end
4
+ argument :api_key, :type => :string
5
+ class_option :force, :aliases => "-f", :type => :boolean, :desc => "Replace existing crashlog.rb file"
6
+ source_root File.expand_path("../../../../../generators/crashlog/templates", __FILE__)
11
7
 
12
8
  def install
13
- ensure_api_key_was_configured
9
+ ensure_api_key_is_valid_format
14
10
  generate_initializer unless api_key_configured?
15
11
  test_crashlog
16
12
  end
17
13
 
18
14
  private
19
15
 
20
- def ensure_api_key_was_configured
21
- if !options[:api_key] &&
22
- !options[:secret] &&
23
- !api_key_configured?
24
- puts "Must pass --api-key and --secret or create config/initializers/crashlog.rb"
25
- exit
16
+ def ensure_api_key_is_valid_format
17
+ unless api_key_pair_provided?
18
+ puts "API_KEY does not match required format: <KEY>:<SECRET>"
19
+ exit(1)
26
20
  end
27
21
  end
28
22
 
23
+ def api_key_pair_provided?
24
+ !!(self.api_key =~ /^(\h){8}-(\h){4}-(\h){4}-(\h){4}-(\h){12}\:\w+$/)
25
+ end
26
+
27
+ def api_key_pair
28
+ /(?<api_key>^(\h){8}-(\h){4}-(\h){4}-(\h){4}-(\h){12})\:(?<secret>\w+)$/.match(self.api_key)
29
+ end
30
+
29
31
  def api_key_expression
30
- "'#{options[:api_key]}'"
32
+ api_key = api_key_pair[:api_key]
33
+ "'#{api_key}'"
31
34
  end
32
35
 
33
36
  def secret_expression
34
- "'#{options[:secret]}'"
37
+ secret = api_key_pair[:secret]
38
+ "'#{secret}'"
35
39
  end
36
40
 
37
41
  def generate_initializer
@@ -39,11 +43,11 @@ class CrashlogGenerator < Rails::Generators::Base
39
43
  end
40
44
 
41
45
  def api_key_configured?
46
+ return false if options[:force]
42
47
  File.exists?('config/initializers/crashlog.rb')
43
48
  end
44
49
 
45
50
  def test_crashlog
46
- puts run("rake crashlog:test")
51
+ run("rake crashlog:test")
47
52
  end
48
53
  end
49
-
@@ -14,7 +14,9 @@ require File.expand_path('../../rails/init', __FILE__)
14
14
 
15
15
  fail "Please supply an API Key as the first argument" if ARGV.empty?
16
16
 
17
- host = ARGV[2]
17
+ staging = ARGV.find { |arg| arg == '--staging' }
18
+ host = ARGV.find { |arg| arg =~ /^http/ }
19
+
18
20
  host = "https://stdin.crashlog.io" if host.blank?
19
21
 
20
22
  class SimulatedExceptionRaiser
@@ -39,7 +41,7 @@ CrashLog.configure(true) do |config|
39
41
  config.host = URI.parse(host).host
40
42
  config.port = URI.parse(host).port
41
43
  config.development_mode = true
42
- # config.service_name = 'Staging'
44
+ config.service_name = 'Staging' if staging
43
45
  end
44
46
 
45
47
  secure = CrashLog.configuration.secure?
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crashlog
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-25 00:00:00.000000000 Z
12
+ date: 2012-11-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
16
- requirement: &70334148342160 !ruby/object:Gem::Requirement
16
+ requirement: &70229446276380 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,21 +21,21 @@ dependencies:
21
21
  version: 0.8.4
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70334148342160
24
+ version_requirements: *70229446276380
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: multi_json
27
- requirement: &70334148341620 !ruby/object:Gem::Requirement
27
+ requirement: &70229446274140 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
- - - ~>
30
+ - - ! '>='
31
31
  - !ruby/object:Gem::Version
32
- version: 1.3.6
32
+ version: 1.1.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70334148341620
35
+ version_requirements: *70229446274140
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: crashlog-auth-hmac
38
- requirement: &70334148340920 !ruby/object:Gem::Requirement
38
+ requirement: &70229446273460 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,21 +43,21 @@ dependencies:
43
43
  version: 1.1.6
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70334148340920
46
+ version_requirements: *70229446273460
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rabl
49
- requirement: &70334148340160 !ruby/object:Gem::Requirement
49
+ requirement: &70229446272540 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
- version: 0.6.14
54
+ version: 0.6.13
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70334148340160
57
+ version_requirements: *70229446272540
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: uuid
60
- requirement: &70334148339540 !ruby/object:Gem::Requirement
60
+ requirement: &70229446271620 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70334148339540
68
+ version_requirements: *70229446271620
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: hashr
71
- requirement: &70334148338780 !ruby/object:Gem::Requirement
71
+ requirement: &70229446287340 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *70334148338780
79
+ version_requirements: *70229446287340
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: json
82
- requirement: &70334148337940 !ruby/object:Gem::Requirement
82
+ requirement: &70229446286920 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: '0'
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *70334148337940
90
+ version_requirements: *70229446286920
91
91
  description: CrashLog Exception reporter
92
92
  email:
93
93
  - support@crashlog.io
@@ -105,6 +105,7 @@ files:
105
105
  - README.md
106
106
  - Rakefile
107
107
  - crashlog.gemspec
108
+ - generators/crashlog/USAGE
108
109
  - generators/crashlog/templates/initializer.rb
109
110
  - install.rb
110
111
  - lib/core_ext/hash/keys.rb