semian 0.7.7 → 0.7.8

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: ae61214e329f0ae974e46bb1ec7183f1f2e88362
4
- data.tar.gz: 8489c43990b8ef3eb3a8745ef37c75719934f553
3
+ metadata.gz: 4a3b9442939974d625257b6cfe0c0d450abe891b
4
+ data.tar.gz: 4b15314ebcee0b7abc7eb840431c26d823d82735
5
5
  SHA512:
6
- metadata.gz: e2dbe1f6907f4fd00581e8a8ebca3c2f963c1dc1c4555438d6842264d52b3c5d8a105994dd3d7faaefd3556fb5302a386ccddc317a35119303c86ae70633b699
7
- data.tar.gz: b37b76b5be3c53df825ff905cf494d0b86bd2fe498c4a626dd060d49aa0f9147e0d0997c17a42cdb2593e4ca3021163bc76997ed68e0a43183e72b5c2462a7c2
6
+ metadata.gz: 025d34c3dd67ee1822b2fdea88747779cc57bb08ad5f5a8ae00e0842025d863c6c0c48b51b108559b754ef9fb159f6b68ced52a3153905a3ed52f4c4e477cb1f
7
+ data.tar.gz: 74d232c886d8dfca1e1023069d57a07340a58e0293ba3054bfc571e8b362b497b99ad57b0769c5fc5e650f854704d2a4f36e36318e3680e5163111ab3fd4b148
@@ -234,7 +234,7 @@ module Semian
234
234
  def create_circuit_breaker(name, **options)
235
235
  circuit_breaker = options.fetch(:circuit_breaker, true)
236
236
  return unless circuit_breaker
237
- raise ArgumentError unless required_keys?([:success_threshold, :error_threshold, :error_timeout], options)
237
+ require_keys!([:success_threshold, :error_threshold, :error_timeout], options)
238
238
  implementation = options[:thread_safety_disabled] ? ::Semian::Simple : ::Semian::ThreadSafe
239
239
 
240
240
  exceptions = options[:exceptions] || []
@@ -257,8 +257,11 @@ module Semian
257
257
  Resource.new(name, tickets: options[:tickets], quota: options[:quota], permissions: permissions, timeout: timeout)
258
258
  end
259
259
 
260
- def required_keys?(required = [], **options)
261
- required.all? { |key| options.key? key }
260
+ def require_keys!(required = [], **options)
261
+ diff = required - options.keys
262
+ unless diff.empty?
263
+ raise ArgumentError, "Missing required arguments for Semian: #{diff}"
264
+ end
262
265
  end
263
266
  end
264
267
 
@@ -14,6 +14,7 @@ class Redis
14
14
 
15
15
  ResourceBusyError = Class.new(SemianError)
16
16
  CircuitOpenError = Class.new(SemianError)
17
+ ResolveError = Class.new(SemianError)
17
18
 
18
19
  alias_method :_original_initialize, :initialize
19
20
 
@@ -48,6 +49,7 @@ module Semian
48
49
 
49
50
  ResourceBusyError = ::Redis::ResourceBusyError
50
51
  CircuitOpenError = ::Redis::CircuitOpenError
52
+ ResolveError = ::Redis::ResolveError
51
53
 
52
54
  # The naked methods are exposed as `raw_query` and `raw_connect` for instrumentation purpose
53
55
  def self.included(base)
@@ -71,7 +73,14 @@ module Semian
71
73
  end
72
74
 
73
75
  def connect
74
- acquire_semian_resource(adapter: :redis, scope: :connection) { raw_connect }
76
+ acquire_semian_resource(adapter: :redis, scope: :connection) do
77
+ begin
78
+ raw_connect
79
+ rescue SocketError, RuntimeError => e
80
+ raise ResolveError.new(semian_identifier) if e.message =~ /(can't resolve)|(name or service not known)/i
81
+ raise
82
+ end
83
+ end
75
84
  end
76
85
 
77
86
  private
@@ -1,3 +1,3 @@
1
1
  module Semian
2
- VERSION = '0.7.7'
2
+ VERSION = '0.7.8'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: semian
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.7
4
+ version: 0.7.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Francis
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2018-03-22 00:00:00.000000000 Z
13
+ date: 2018-04-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake-compiler