crashbreak 1.0.8 → 1.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e1f7b323bc59848e1bfacea41f7a51473da45add
4
- data.tar.gz: d2ea8950c5f1e0aca334002262a37b8f6e1aa137
3
+ metadata.gz: 2c212f45cf4606d87ba6a1e6b51717cfce678b8d
4
+ data.tar.gz: 99f162f5a918d72b446e29fe4818e17587f01a90
5
5
  SHA512:
6
- metadata.gz: 6665aca68f5f3671cac26e529c786a393da1dd28d7a3d6cc2e1fcc6a265a46353b670c64075d0e39c1237bad0639a9dd221dee14d235a6ef69089720b37e2e1e
7
- data.tar.gz: fbd36e78a41cefaa9635f1962493adae01e03162f8f4b04069bf9f12f3639c51955c9fb18eabe3a5f247ecb21b6591ff98a5f80002aabb2deb6177776bc9dca0
6
+ metadata.gz: 922ed25a212e112ba96d9eac46c4f57c3e95a8c61d6ed25abbf4f265d2d6fbb11f37b352f6c3b995e4af472fd277f82fc112442dc350060de5db3423233d98be
7
+ data.tar.gz: e85e395e00b7a1bab9935c7ee79f652baddfcdb9ff6c800da910567d4f49a75fee6014a6cb7c7bf7d40f6969c66e7b8632338a738a4e84e7ed5c491bdbefb83f
@@ -26,6 +26,7 @@ require 'crashbreak/AWS'
26
26
  require 'crashbreak/async_exception_notifier'
27
27
  require 'crashbreak/tiny_exception_notifier'
28
28
  require 'crashbreak/fork_exception_notifier'
29
+ require 'crashbreak/predefined_settings'
29
30
 
30
31
  require 'dumpers/database_dumper'
31
32
  require 'dumpers/request_dumper'
@@ -15,35 +15,35 @@ module Crashbreak
15
15
  attr_accessor :github_development_branch
16
16
 
17
17
  def exception_notifier
18
- @exception_notifier || ExceptionNotifier.new
18
+ @exception_notifier ||= ExceptionNotifier.new
19
19
  end
20
20
 
21
21
  def ignored_environments
22
- @ignored_environments || ['development', 'test']
22
+ @ignored_environments ||= ['development', 'test']
23
23
  end
24
24
 
25
25
  def error_serializers
26
- @error_serializers || []
26
+ @error_serializers ||= []
27
27
  end
28
28
 
29
29
  def github_spec_file_path
30
- @github_spec_file_path || 'spec/crashbreak_error_spec.rb'
30
+ @github_spec_file_path ||= 'spec/crashbreak_error_spec.rb'
31
31
  end
32
32
 
33
33
  def github_development_branch
34
- @github_development_branch || 'master'
34
+ @github_development_branch ||= 'master'
35
35
  end
36
36
 
37
37
  def dumpers
38
- @dumpers || []
38
+ @dumpers ||= []
39
39
  end
40
40
 
41
41
  def dumper_options
42
- @dumper_options || {}
42
+ @dumper_options ||= {}
43
43
  end
44
44
 
45
45
  def restorer_options
46
- @restorer_options || {}
46
+ @restorer_options ||= {}
47
47
  end
48
48
  end
49
49
  end
@@ -8,10 +8,12 @@ module Crashbreak
8
8
  begin
9
9
  @app.call(env)
10
10
  rescue ::Exception => exception
11
- RequestStore.store[:exception] = exception
12
- store_variables_from_env env
11
+ unless skip_exception?
12
+ RequestStore.store[:exception] = exception
13
+ store_variables_from_env env
14
+ notify_about_exception
15
+ end
13
16
 
14
- notify_about_exception
15
17
  raise
16
18
  end
17
19
  end
@@ -57,5 +59,9 @@ module Crashbreak
57
59
  def request(env)
58
60
  Rack::Request.new(env)
59
61
  end
62
+
63
+ def skip_exception?
64
+ Crashbreak.configure.ignored_environments.include?(ENV['RACK_ENV'] || ENV['RAILS_ENV'])
65
+ end
60
66
  end
61
67
  end
@@ -1,7 +1,6 @@
1
1
  module Crashbreak
2
2
  class ExceptionNotifier
3
3
  def notify
4
- return if skip_exception?
5
4
  response = exceptions_repository.create serialize_exception
6
5
  GithubIntegrationService.new(response).push_test if Crashbreak.configure.github_repo_name.present? && response['similar'] == false
7
6
  end
@@ -23,10 +22,6 @@ module Crashbreak
23
22
  end
24
23
  end
25
24
 
26
- def skip_exception?
27
- Crashbreak.configure.ignored_environments.include? ENV['RACK_ENV']
28
- end
29
-
30
25
  def dumpers
31
26
  Crashbreak.configure.dumpers
32
27
  end
@@ -0,0 +1,36 @@
1
+ module Crashbreak
2
+ class PredefinedSettings
3
+ def postgresql(db_name)
4
+ restorer_for_postgresql
5
+
6
+ config.dumper_options.reverse_merge!(
7
+ dump_location: "#{Rails.root}/tmp/db.dump",
8
+ dump_command: "pg_dump -Fc #{db_name} > #{Rails.root}/tmp/db.dump"
9
+ )
10
+ end
11
+
12
+ def heroku_postgresql(db_name, app_name)
13
+ restorer_for_postgresql
14
+
15
+ config.dumper_options.reverse_merge!(
16
+ dump_location: "#{Rails.root}/tmp/db.dump",
17
+ dump_command: "/app/vendor/heroku-toolbelt/bin/heroku pg:backups capture #{db_name} -a #{app_name} &&" +
18
+ "curl -o #{Rails.root}/tmp/db.dump `/app/vendor/heroku-toolbelt/bin/heroku pg:backups public-url --app #{app_name}`"
19
+ )
20
+ end
21
+
22
+ private
23
+
24
+ def config
25
+ Crashbreak.configurator
26
+ end
27
+
28
+ def restorer_for_postgresql
29
+ config.restorer_options.reverse_merge!(
30
+ drop_test_database_command: 'dropdb crashbreak-test',
31
+ create_test_database_command: 'createdb -T template0 crashbreak-test',
32
+ restore_command: "pg_restore -O #{Rails.root}/tmp/db.dump -d crashbreak-test",
33
+ )
34
+ end
35
+ end
36
+ end
@@ -1,3 +1,3 @@
1
1
  module Crashbreak
2
- VERSION = '1.0.8'
2
+ VERSION = '1.0.9'
3
3
  end
@@ -7,8 +7,8 @@ module Crashbreak
7
7
  end
8
8
 
9
9
  def restore
10
- system('dropdb crashbreak-test')
11
- system('createdb -T template0 crashbreak-test')
10
+ system(drop_test_database_command)
11
+ system(create_test_database_command)
12
12
  prepare_aws
13
13
  download_dump
14
14
  restore_database
@@ -31,10 +31,6 @@ module Crashbreak
31
31
  end
32
32
  end
33
33
 
34
- def restore_command
35
- Crashbreak.configure.restorer_options[:restore_command]
36
- end
37
-
38
34
  def setup_connection_to_restored_database
39
35
  if Crashbreak.configure.restorer_options[:setup_database_connection].present?
40
36
  Crashbreak.configure.restorer_options[:setup_database_connection].call
@@ -46,5 +42,17 @@ module Crashbreak
46
42
  def database_config
47
43
  @database_config ||= YAML.load(File.read('config/database.yml')).try(:[], 'test')
48
44
  end
45
+
46
+ def restore_command
47
+ Crashbreak.configure.restorer_options[:restore_command]
48
+ end
49
+
50
+ def drop_test_database_command
51
+ Crashbreak.configure.restorer_options[:drop_test_database_command]
52
+ end
53
+
54
+ def create_test_database_command
55
+ Crashbreak.configure.restorer_options[:create_test_database_command]
56
+ end
49
57
  end
50
58
  end
@@ -4,7 +4,7 @@ describe Crashbreak::ExceptionCatcherMiddleware do
4
4
 
5
5
  let(:env) { Hash['action_controller.instance' => example_controller ]}
6
6
  let(:example_controller) { double(:controller) }
7
- let(:error) { StandardError.new }
7
+ let(:error) { RegexpError.new }
8
8
 
9
9
  before(:each) do
10
10
  allow(app_with_crashes).to receive(:call).with(env).and_raise(error)
@@ -16,7 +16,7 @@ describe Crashbreak::ExceptionCatcherMiddleware do
16
16
 
17
17
  before(:each) do
18
18
  expect_any_instance_of(Crashbreak::ExceptionNotifier).to receive(:notify).and_return(true)
19
- expect{ subject.call(env) }.to raise_error(StandardError)
19
+ expect{ subject.call(env) }.to raise_error(error.class)
20
20
  end
21
21
 
22
22
  it 'sets exception in store' do
@@ -32,11 +32,31 @@ describe Crashbreak::ExceptionCatcherMiddleware do
32
32
  end
33
33
  end
34
34
 
35
+ context 'app that raises exception but current env is ignored' do
36
+ subject { described_class.new app_with_crashes }
37
+
38
+ before(:each) do
39
+ expect_any_instance_of(Crashbreak::ExceptionNotifier).to_not receive(:notify)
40
+ end
41
+
42
+ it 'skips development environment by default' do
43
+ expect(ENV).to receive(:[]).with('RACK_ENV').and_return('development')
44
+ expect{ subject.call(env) }.to raise_error(error.class)
45
+ end
46
+
47
+ it 'skips all environments in config' do
48
+ Crashbreak.configure.ignored_environments = ['staging']
49
+
50
+ expect(ENV).to receive(:[]).with('RACK_ENV').and_return('staging')
51
+ expect{ subject.call(env) }.to raise_error(error.class)
52
+ end
53
+ end
54
+
35
55
  context 'app that works without exceptions' do
36
56
  subject { described_class.new app_without_crashes }
37
57
 
38
58
  it 'does nothing' do
39
- expect_any_instance_of(Crashbreak::ExceptionNotifier).to_not receive(:notify).and_return(true)
59
+ expect_any_instance_of(Crashbreak::ExceptionNotifier).to_not receive(:notify)
40
60
  expect(subject.call(env)).to eq(:ok)
41
61
  end
42
62
  end
@@ -61,24 +61,6 @@ describe Crashbreak::ExceptionNotifier do
61
61
  end
62
62
  end
63
63
 
64
- context 'skipping environment' do
65
- before(:each) do
66
- expect_any_instance_of(Crashbreak::ExceptionsRepository).to_not receive(:create)
67
- end
68
-
69
- it 'skips development environment by default' do
70
- expect(ENV).to receive(:[]).with('RACK_ENV').and_return('development')
71
- subject.notify
72
- end
73
-
74
- it 'skips all environments in config' do
75
- Crashbreak.configure.ignored_environments = ['staging']
76
-
77
- expect(ENV).to receive(:[]).with('RACK_ENV').and_return('staging')
78
- subject.notify
79
- end
80
- end
81
-
82
64
  context 'github integration' do
83
65
  let(:error_hash) { Hash['id' => 1, 'deploy_revision' => 'test', 'similar' => false] }
84
66
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crashbreak
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8
4
+ version: 1.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michal Janeczek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-01 00:00:00.000000000 Z
11
+ date: 2015-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -240,6 +240,7 @@ files:
240
240
  - lib/crashbreak/formatters/hash_formatter.rb
241
241
  - lib/crashbreak/formatters/summary_formatter.rb
242
242
  - lib/crashbreak/github_integration_service.rb
243
+ - lib/crashbreak/predefined_settings.rb
243
244
  - lib/crashbreak/request_parser.rb
244
245
  - lib/crashbreak/tiny_exception_notifier.rb
245
246
  - lib/crashbreak/version.rb