http-exceptions 0.0.4 → 0.1.0

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: b3cbfab4c8ab282ed02c2aaf6b10d9e4bb8c63a0
4
- data.tar.gz: 977eec99de141b1ae88616d289462b2b6f263845
3
+ metadata.gz: 3dd2e0213e9efb0ed35cb07bd193f9b86ce0f9d5
4
+ data.tar.gz: 243069506cecfd6c0ddfc1bd547147316a555f18
5
5
  SHA512:
6
- metadata.gz: aca9e8547cd540fb16e999d39b7843a52e55f09d377d8dcb69b0545e49ca346b1f4f7d3ba228d8ab89719dfdaf8a0b6a41e7d4f20107855288af5c4da9d28e1d
7
- data.tar.gz: ebb9b8326a72386e708b22bd1d0b73ffeab46e61ab3257a73c2ad32aa514302ddb4b740570916ee263d77fa673c89906dc67c56dbe7958b22d7c7f5e1ece3721
6
+ metadata.gz: 7deb67a6d04d8eb57c9e23a57862630f241f1958b5e3fc7378abcd9510ec36fc5f909211a4c07d5ffcef4289877b7ad966c4e7d82d6f6ae6f516737c237ea810
7
+ data.tar.gz: e106195b15e6c5edb957d7a26549b19c3f8ccabb2af0ab9388d5bae449d9f20a9c0219be35d5a57eafa3ef5a3e6d30ef22d9c3dc092ada8d0d687ddca2dee872
data/.gitignore CHANGED
@@ -21,3 +21,6 @@ tmp
21
21
  *.a
22
22
  mkmf.log
23
23
  tags
24
+
25
+ # RubyMine project files
26
+ .idea/
data/.travis.yml CHANGED
@@ -1,6 +1,20 @@
1
+ # Send builds to container-based infrastructure
2
+ # http://docs.travis-ci.com/user/workers/container-based-infrastructure/
3
+ sudo: false
1
4
  language: ruby
5
+ cache:
6
+ - bundler
2
7
  rvm:
3
- - 2.1.2
4
- - 2.0.0
5
- - 1.9.3
8
+ - 2.0
9
+ - 2.1.8
10
+ - 2.2.4
11
+ - 2.3.0
12
+ - ruby-head
6
13
  script: bundle exec rspec spec
14
+ # ! Update bundler before running test in Travis to avoid buggy version of bundler
15
+ before_install:
16
+ - gem update bundler
17
+ matrix:
18
+ fast_finish: true
19
+ allow_failures:
20
+ - rvm: ruby-head
@@ -0,0 +1,28 @@
1
+ module Http
2
+ module Exceptions
3
+ class Configuration
4
+ DEFAULT_EXCEPTIONS_TO_CONVERT = [
5
+ SocketError,
6
+ Errno::ETIMEDOUT,
7
+ (Net.const_defined?(:ReadTimeout) ? Net::ReadTimeout : EOFError),
8
+ (Net.const_defined?(:OpenTimeout) ? Net::OpenTimeout : EOFError),
9
+ Net::ProtocolError,
10
+ Errno::ECONNREFUSED,
11
+ Errno::EHOSTDOWN,
12
+ Errno::ECONNRESET,
13
+ Errno::ENETUNREACH,
14
+ Errno::EHOSTUNREACH,
15
+ Errno::ECONNABORTED,
16
+ OpenSSL::SSL::SSLError,
17
+ EOFError,
18
+ ].uniq.freeze
19
+
20
+ # Exception classes to be converted to Http::Exceptions::HttpException
21
+ attr_accessor :exceptions_to_convert
22
+
23
+ def initialize
24
+ self.exceptions_to_convert = DEFAULT_EXCEPTIONS_TO_CONVERT
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,5 +1,5 @@
1
1
  module Http
2
2
  module Exceptions
3
- VERSION = "0.0.4"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
@@ -1,4 +1,5 @@
1
1
  require "http/exceptions/version"
2
+ require "http/exceptions/configuration"
2
3
  require "http/exceptions/http_exception"
3
4
 
4
5
  module Http
@@ -12,6 +13,9 @@ module Http
12
13
  Errno::ECONNREFUSED,
13
14
  Errno::EHOSTDOWN,
14
15
  Errno::ECONNRESET,
16
+ Errno::ENETUNREACH,
17
+ Errno::EHOSTUNREACH,
18
+ Errno::ECONNABORTED,
15
19
  OpenSSL::SSL::SSLError,
16
20
  EOFError,
17
21
  ].freeze
@@ -19,7 +23,7 @@ module Http
19
23
  def self.wrap_exception
20
24
  begin
21
25
  yield
22
- rescue *Exceptions::EXCEPTIONS => e
26
+ rescue *configuration.exceptions_to_convert => e
23
27
  raise HttpException.new original_exception: e
24
28
  end
25
29
  end
@@ -34,5 +38,23 @@ module Http
34
38
  check_response! yield
35
39
  end
36
40
  end
41
+
42
+ # Call this method to modify defaults in your initializers.
43
+ #
44
+ # @example
45
+ # Http::Exceptions.configure do |config|
46
+ # config.exceptions_to_convert = [Net::ProtocolError]
47
+ # config.exceptions_to_convert << EOFError
48
+ # end
49
+ def self.configure
50
+ yield(configuration)
51
+ self
52
+ end
53
+
54
+ # The configuration object.
55
+ # @see Http::Exceptions.configure
56
+ def self.configuration
57
+ @configuration ||= Configuration.new
58
+ end
37
59
  end
38
60
  end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe Http::Exceptions::Configuration do
4
+ attribute_name_and_default_value_mappings = {
5
+ exceptions_to_convert: Http::Exceptions::Configuration::DEFAULT_EXCEPTIONS_TO_CONVERT,
6
+ }.freeze
7
+
8
+ describe "default values" do
9
+ subject(:model) { described_class.new }
10
+
11
+ attribute_name_and_default_value_mappings.each do |attribute_name, default_value|
12
+ context "for attribute #{attribute_name}" do
13
+ subject { model.public_send(attribute_name) }
14
+
15
+ it {should eq(default_value)}
16
+ end
17
+ end
18
+ end
19
+
20
+ describe "configurable attributes" do
21
+ subject(:model) { described_class.new }
22
+
23
+ attribute_name_and_default_value_mappings.each_key do |attribute_name|
24
+ context "for attribute #{attribute_name}" do
25
+ let(:attribute_name) { attribute_name }
26
+ let(:new_value) { :dummy_value_for_attribute }
27
+
28
+ subject { model.public_send(attribute_name) }
29
+
30
+ before do
31
+ expect(model.public_send(attribute_name)).to_not eq(new_value)
32
+ model.public_send("#{attribute_name}=", new_value)
33
+ end
34
+
35
+ it {should eq(new_value)}
36
+ end
37
+ end
38
+ end
39
+ end
@@ -8,30 +8,41 @@ describe Http::Exceptions do
8
8
  end
9
9
 
10
10
  describe ".wrap_exception" do
11
- it "raises an HttpException on supported http exceptions" do
12
- expect do
13
- described_class.wrap_exception do
14
- raise SocketError
15
- end
16
- end.to raise_error(Http::Exceptions::HttpException)
17
- end
11
+ let(:supported_exception_class) { Http::Exceptions::Configuration::DEFAULT_EXCEPTIONS_TO_CONVERT.first }
12
+ let(:unsupported_exception_class) { TestException }
18
13
 
19
- it "saves the original exception against the HttpException" do
20
- begin
21
- described_class.wrap_exception do
22
- raise SocketError
14
+ context "when exception class is supported" do
15
+ before { expect(Http::Exceptions.configuration.exceptions_to_convert).to include(supported_exception_class) }
16
+
17
+ it "raises an HttpException on supported http exceptions" do
18
+ expect do
19
+ described_class.wrap_exception do
20
+ raise supported_exception_class
21
+ end
22
+ end.to raise_error(Http::Exceptions::HttpException)
23
+ end
24
+
25
+ it "saves the original exception against the HttpException" do
26
+ begin
27
+ described_class.wrap_exception do
28
+ raise supported_exception_class
29
+ end
30
+ rescue Http::Exceptions::HttpException => e
31
+ expect(e.original_exception).to be_a(supported_exception_class)
23
32
  end
24
- rescue Http::Exceptions::HttpException => e
25
- expect(e.original_exception).to be_a(SocketError)
26
33
  end
27
34
  end
28
35
 
29
- it "ignores other exceptions" do
30
- expect do
31
- described_class.wrap_exception do
32
- raise TestException
33
- end
34
- end.to raise_error(TestException)
36
+ context "when exception class is NOT supported" do
37
+ before { expect(Http::Exceptions.configuration.exceptions_to_convert).to_not include(unsupported_exception_class) }
38
+
39
+ it "ignores other exceptions" do
40
+ expect do
41
+ described_class.wrap_exception do
42
+ raise unsupported_exception_class
43
+ end
44
+ end.to raise_error(unsupported_exception_class)
45
+ end
35
46
  end
36
47
  end
37
48
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: http-exceptions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Mathieu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-22 00:00:00.000000000 Z
11
+ date: 2016-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -55,8 +55,10 @@ files:
55
55
  - Rakefile
56
56
  - http-exceptions.gemspec
57
57
  - lib/http/exceptions.rb
58
+ - lib/http/exceptions/configuration.rb
58
59
  - lib/http/exceptions/http_exception.rb
59
60
  - lib/http/exceptions/version.rb
61
+ - spec/http/exceptions/configuration_spec.rb
60
62
  - spec/http_exception_spec.rb
61
63
  - spec/spec_helper.rb
62
64
  homepage: ''
@@ -79,10 +81,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
81
  version: '0'
80
82
  requirements: []
81
83
  rubyforge_project:
82
- rubygems_version: 2.4.5
84
+ rubygems_version: 2.5.1
83
85
  signing_key:
84
86
  specification_version: 4
85
87
  summary: An easy way to rescue exceptions that might be thrown by your Http library
86
88
  test_files:
89
+ - spec/http/exceptions/configuration_spec.rb
87
90
  - spec/http_exception_spec.rb
88
91
  - spec/spec_helper.rb
92
+ has_rdoc: