ae_network_connection_exception 1.3.0 → 1.4.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
- SHA1:
3
- metadata.gz: dd0753dcb7f0a1ee3c16fb466e38634f8b24e4ad
4
- data.tar.gz: b35ab554e22841ad7471514da0f8b8c2dd33b4bd
2
+ SHA256:
3
+ metadata.gz: 5b7cafe89fcbcdaf9925c573d2634a2bb132c1e455410a58eb37aec03ee2f08d
4
+ data.tar.gz: f78429a43ab640d0ebb3c957b35a111811fa6e34a715904bcf9881b06b4a093e
5
5
  SHA512:
6
- metadata.gz: d5b9fd6ee16871e2da071b8488e8b28845de354824de6ea08de51e55c1185e2e5038b2f7b4188d769458ea1a72594ba82a05cfb51d8d3a5efa65c5d56b78f8c1
7
- data.tar.gz: 4766a393b3f12df852a9154fc8627fc4c81d49f4020fe259be28a0b8cc384612e3f3ac82d7ccedf6b74ab05cee16a884643bc5326cd561c4eca1eabc57723130
6
+ metadata.gz: a571e1b3cc34c30bde269b5a3fcf756e2cd74eeef8d1399b6cc76b22404932d2a87a5988a72c5e20d6f2d7a1c07a02f6018bd5fadc02dfb0387034b7e4456175
7
+ data.tar.gz: 7b5cab2ccc00495417184b0dbbd7c3a42fd639d8051584273daef29e37f581bfa3004156b36483e6492cb89c9063911021d188559c0f81c44730e181f2a9e765
@@ -0,0 +1,30 @@
1
+ defaults: &defaults
2
+ working_directory: ~/repo
3
+
4
+ steps:
5
+ - checkout
6
+ - run: bundle install
7
+ - run: bundle exec appraisal install
8
+ - run: bundle exec appraisal rake test
9
+
10
+ version: 2
11
+ jobs:
12
+ test-ruby-2.3.3:
13
+ <<: *defaults
14
+ docker:
15
+ - image: circleci/ruby:2.3.3
16
+
17
+ test-ruby-2.5.3:
18
+ <<: *defaults
19
+ docker:
20
+ - image: circleci/ruby:2.5.3-stretch
21
+
22
+ workflows:
23
+ version: 2
24
+ rc:
25
+ jobs:
26
+ - test-ruby-2.3.3:
27
+ context: appfolio_test_context
28
+ - test-ruby-2.5.3:
29
+ context: appfolio_test_context
30
+
data/.gitignore CHANGED
@@ -13,3 +13,4 @@
13
13
  *.a
14
14
  .idea
15
15
  mkmf.log
16
+ gemfiles/*lock
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.3.3
data/Appraisals ADDED
@@ -0,0 +1,11 @@
1
+ case(RUBY_VERSION)
2
+
3
+ when '2.3.3', '2.5.3' then
4
+
5
+ appraise "ruby-#{RUBY_VERSION}" do
6
+ end
7
+
8
+ else
9
+ raise "Unsupported Ruby version #{RUBY_VERSION}"
10
+
11
+ end
data/Gemfile CHANGED
@@ -5,3 +5,8 @@ gemspec
5
5
 
6
6
  gem 'minitest', '~> 5.0'
7
7
 
8
+ source 'https://gemini.atl.appfolio.net' do
9
+ gem 'af_gems'
10
+ end
11
+
12
+ gem 'rest-client', '~> 2.0', require: false
data/Rakefile CHANGED
@@ -1,11 +1,24 @@
1
- require "bundler/gem_tasks"
2
- require 'rake'
3
- require 'rake/testtask'
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+
11
+ require 'af_gems/gem_tasks'
12
+ require 'af_gems/appraisal'
4
13
 
5
- Rake::TestTask.new do |test|
14
+ Rake::TestTask.new(:test) do |test|
6
15
  test.libs << 'lib' << 'test'
7
16
  test.pattern = 'test/unit/**/*_test.rb'
8
17
  test.verbose = true
9
18
  end
10
19
 
20
+ task :default => :test
11
21
 
22
+ namespace :test do
23
+ AfGems::RubyAppraisalTask.new(:all, [ 'ruby-2.3.3', 'ruby-2.5.3' ])
24
+ end
@@ -0,0 +1,11 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "minitest", "~> 5.0"
6
+
7
+ source "https://gemini.atl.appfolio.net" do
8
+ gem "af_gems"
9
+ end
10
+
11
+ gemspec path: "../"
@@ -0,0 +1,11 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "minitest", "~> 5.0"
6
+
7
+ source "https://gemini.atl.appfolio.net" do
8
+ gem "af_gems"
9
+ end
10
+
11
+ gemspec path: "../"
@@ -1,15 +1,22 @@
1
1
  require "ae_network_connection_exception/version"
2
+ require "net/http"
2
3
  require "socket"
3
4
 
4
5
  module AeNetworkConnectionException
5
-
6
6
  class ConnectionNotEstablished < StandardError
7
7
  end
8
8
 
9
+ OTHER_EXCEPTIONS = []
10
+ if defined?(RestClient::Exceptions::OpenTimeout)
11
+ puts "here"
12
+ OTHER_EXCEPTIONS << RestClient::Exceptions::OpenTimeout
13
+ end
14
+ OTHER_EXCEPTIONS.freeze
15
+
9
16
  class << self
10
17
  def try
11
18
  yield
12
- rescue SocketError, Net::OpenTimeout => e
19
+ rescue SocketError, Net::OpenTimeout, *OTHER_EXCEPTIONS => e
13
20
  # SocketError happens when we fail to connect to a socket. Common problems here are DNS resolution (i.e. getaddrinfo)
14
21
  # Net::OpenTimeout happens when we are unable to establish an HTTP connection before the open_timeout
15
22
 
@@ -25,25 +32,25 @@ module AeNetworkConnectionException
25
32
  raise_if_exception_message_matches(e, /connect\(2\)/)
26
33
  rescue Errno::ECONNRESET => e
27
34
  # Errno::ECONNRESET happens when the connection is reset. This can happen during ssl negotiation
28
-
35
+
29
36
  raise_if_exception_message_matches(e, /SSL_connect/)
30
37
  end
31
-
38
+
32
39
  # An array of examples for all the exceptions that we will catch
33
40
  def exception_signatures
34
41
  [
35
- SocketError.new('getaddrinfo: Name or service not known'),
36
- Errno::ECONNREFUSED.new('Connection refused - connect(2) for "example.com" port 443'),
37
- Errno::ETIMEDOUT.new('Connection timed out - connect(2) for "example.com" port 443'),
38
- Net::OpenTimeout.new('message'),
39
- Errno::ECONNRESET.new('Connection reset by peer - SSL_connect', Errno::ECONNREFUSED.new('Connection refused - connect(2) for "example.com" port 443')),
40
- Errno::EHOSTUNREACH.new('No route to host - connect(2) for "example.com" port 443'),
41
- Errno::ENETUNREACH.new('Network is unreachable - connect(2) for "example.com" port 443')
42
+ SocketError.new('getaddrinfo: Name or service not known'),
43
+ Errno::ECONNREFUSED.new('Connection refused - connect(2) for "example.com" port 443'),
44
+ Errno::ETIMEDOUT.new('Connection timed out - connect(2) for "example.com" port 443'),
45
+ Net::OpenTimeout.new('message'),
46
+ Errno::ECONNRESET.new('Connection reset by peer - SSL_connect', Errno::ECONNREFUSED.new('Connection refused - connect(2) for "example.com" port 443')),
47
+ Errno::EHOSTUNREACH.new('No route to host - connect(2) for "example.com" port 443'),
48
+ Errno::ENETUNREACH.new('Network is unreachable - connect(2) for "example.com" port 443')
42
49
  ]
43
50
  end
44
-
51
+
45
52
  private
46
-
53
+
47
54
  def raise_if_exception_message_matches(exception, pattern)
48
55
  if exception.message =~ pattern
49
56
  raise ConnectionNotEstablished
@@ -1,3 +1,3 @@
1
1
  module AeNetworkConnectionException
2
- VERSION = "1.3.0"
2
+ VERSION = "1.4.0"
3
3
  end
data/test/test_helper.rb CHANGED
@@ -2,3 +2,31 @@ require 'rubygems'
2
2
  require 'minitest/autorun'
3
3
  require 'ae_network_connection_exception'
4
4
 
5
+ private
6
+
7
+ class Minitest::Test
8
+ def assert_connection_not_established_thrown_for(exception)
9
+ e = return_raised_error do
10
+ AeNetworkConnectionException.try do
11
+ raise exception
12
+ end
13
+ end
14
+ assert_equal AeNetworkConnectionException::ConnectionNotEstablished, e.class
15
+ assert_equal exception, e.cause
16
+ end
17
+
18
+ def assert_connection_not_established_not_thrown_for(exception)
19
+ e = return_raised_error do
20
+ AeNetworkConnectionException.try do
21
+ raise exception
22
+ end
23
+ end
24
+ assert_equal exception, e
25
+ end
26
+
27
+ def return_raised_error
28
+ yield
29
+ rescue => e
30
+ return e
31
+ end
32
+ end
@@ -1,3 +1,4 @@
1
+ require 'rest-client'
1
2
  require 'test_helper'
2
3
 
3
4
  module AeNetworkConnectionException
@@ -5,10 +6,10 @@ module AeNetworkConnectionException
5
6
  def test_connection_not_established_exception
6
7
  # Exception Causes are standard with ruby 2.1
7
8
  # http://devblog.avdi.org/2013/12/25/exception-causes-in-ruby-2-1
8
-
9
+
9
10
  parent_exception = AeNetworkConnectionException::ConnectionNotEstablished.new('Parent Message')
10
11
 
11
- assert_equal nil, parent_exception.cause
12
+ assert_nil parent_exception.cause
12
13
  assert_equal 'Parent Message', parent_exception.message
13
14
 
14
15
  begin
@@ -36,16 +37,20 @@ module AeNetworkConnectionException
36
37
  end
37
38
  assert_equal exception, e
38
39
  end
39
-
40
+
40
41
  def test_ae_network_connection_exception_try__raises_connection_not_establised_exception
41
42
  AeNetworkConnectionException.exception_signatures.each do |e|
42
43
  assert_connection_not_established_thrown_for(e)
43
44
  end
44
-
45
+
45
46
  assert_connection_not_established_not_thrown_for(Errno::ECONNRESET.new('Connection timed out - connect(2) for "example.com" port 443'))
46
47
  assert_connection_not_established_not_thrown_for(Errno::ETIMEDOUT.new('Connection timed out - recvfrom(2) for "example.com" port 443'))
47
48
  end
48
-
49
+
50
+ def test_ae_network_connection_exception_try__raises_connection_not_establised_exception_for_rest_client_open_timeout
51
+ assert_connection_not_established_thrown_for(RestClient::Exceptions::OpenTimeout.new)
52
+ end
53
+
49
54
  def test_exception_signatures
50
55
  expected_signatures = [
51
56
  SocketError.new('getaddrinfo: Name or service not known'),
@@ -56,39 +61,12 @@ module AeNetworkConnectionException
56
61
  Errno::EHOSTUNREACH.new('No route to host - connect(2) for "example.com" port 443'),
57
62
  Errno::ENETUNREACH.new('Network is unreachable - connect(2) for "example.com" port 443')
58
63
  ]
59
-
64
+
60
65
  assert_equal expected_signatures.size, AeNetworkConnectionException.exception_signatures.size
61
-
62
- expected_signatures.each do |e|
63
- assert_includes AeNetworkConnectionException.exception_signatures, e
64
- end
65
- end
66
66
 
67
- private
68
-
69
- def assert_connection_not_established_thrown_for(exception)
70
- e = return_raised_error do
71
- AeNetworkConnectionException.try do
72
- raise exception
73
- end
74
- end
75
- assert_equal AeNetworkConnectionException::ConnectionNotEstablished, e.class
76
- assert_equal exception, e.cause
77
- end
78
-
79
- def assert_connection_not_established_not_thrown_for(exception)
80
- e = return_raised_error do
81
- AeNetworkConnectionException.try do
82
- raise exception
83
- end
67
+ expected_signatures.each do |e|
68
+ assert_includes AeNetworkConnectionException.exception_signatures, e
84
69
  end
85
- assert_equal exception, e
86
- end
87
-
88
- def return_raised_error
89
- yield
90
- rescue => e
91
- return e
92
70
  end
93
71
  end
94
72
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ae_network_connection_exception
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Boyd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-09 00:00:00.000000000 Z
11
+ date: 2020-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -46,12 +46,17 @@ executables: []
46
46
  extensions: []
47
47
  extra_rdoc_files: []
48
48
  files:
49
+ - ".circleci/config.yml"
49
50
  - ".gitignore"
51
+ - ".ruby-version"
52
+ - Appraisals
50
53
  - Gemfile
51
54
  - LICENSE.txt
52
55
  - README.md
53
56
  - Rakefile
54
57
  - ae_network_connection_exception.gemspec
58
+ - gemfiles/ruby_2.3.3.gemfile
59
+ - gemfiles/ruby_2.5.3.gemfile
55
60
  - lib/ae_network_connection_exception.rb
56
61
  - lib/ae_network_connection_exception/version.rb
57
62
  - test/test_helper.rb
@@ -75,8 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
80
  - !ruby/object:Gem::Version
76
81
  version: '0'
77
82
  requirements: []
78
- rubyforge_project:
79
- rubygems_version: 2.4.8
83
+ rubygems_version: 3.0.6
80
84
  signing_key:
81
85
  specification_version: 4
82
86
  summary: Provides sane exceptions for network failures