semian 0.7.7 → 0.7.8

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.
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