bandiera-client 3.0.4 → 3.1.0
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 +4 -4
- data/.hound.yml +1 -0
- data/.rubocop.yml +70 -5
- data/.travis.yml +3 -1
- data/HISTORY +4 -0
- data/bandiera-client.gemspec +1 -1
- data/lib/bandiera/client.rb +21 -12
- data/lib/bandiera/client/errors.rb +12 -0
- data/lib/bandiera/client/version.rb +1 -1
- data/spec/lib/bandiera/client_spec.rb +47 -6
- metadata +5 -4
- data/.hound.yml +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: af9fac1412763441ed0e77c4373acda416c2eb11
|
4
|
+
data.tar.gz: 4afd81a7571125fecff204ab9e7f35689e05f325
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58d25b937aeebbd0a6dcf6eb6eb72cf8a1dbf1c1a7f7e252a82d9e2fce7a1c9daa8f5b07f073aa93ebfc88fefc1933290583958af7f7a00cd783ec40fbd5e539
|
7
|
+
data.tar.gz: 8603383f510a8ee339b8773d6919509d3083c988f02ed41a0b588021cdada2dbfccff5584199d75133b3834380b9ebdcce4606cf8d94d2772e3397310c59ff57
|
data/.hound.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
./.rubocop.yml
|
data/.rubocop.yml
CHANGED
@@ -1,28 +1,61 @@
|
|
1
|
+
AllCops:
|
2
|
+
StyleGuideCopsOnly: true
|
3
|
+
|
1
4
|
Metrics/LineLength:
|
2
5
|
Description: 'Limit lines to 120 characters.'
|
3
6
|
Max: 120
|
7
|
+
Enabled: true
|
8
|
+
|
9
|
+
Metrics/BlockLength:
|
10
|
+
ExcludedMethods:
|
11
|
+
- describe
|
12
|
+
- context
|
13
|
+
Enabled: true
|
14
|
+
|
15
|
+
Metrics/MethodLength:
|
16
|
+
CountComments: false
|
17
|
+
Max: 20
|
18
|
+
Enabled: true
|
19
|
+
|
20
|
+
Metrics/AbcSize:
|
21
|
+
Max: 40
|
22
|
+
Enabled: true
|
4
23
|
|
5
24
|
Style/Documentation:
|
6
25
|
Enabled: false
|
7
26
|
|
8
|
-
|
27
|
+
Layout/SpaceBeforeFirstArg:
|
9
28
|
Enabled: false
|
10
29
|
|
11
30
|
Style/BracesAroundHashParameters:
|
12
31
|
Enabled: false
|
13
32
|
|
14
|
-
Style/
|
33
|
+
Style/CaseEquality:
|
34
|
+
Enabled: false
|
35
|
+
|
36
|
+
Style/GuardClause:
|
37
|
+
Enabled: false
|
38
|
+
|
39
|
+
Style/ConditionalAssignment:
|
40
|
+
Enabled: false
|
41
|
+
|
42
|
+
Layout/IndentHash:
|
15
43
|
EnforcedStyle: consistent
|
44
|
+
Enabled: true
|
16
45
|
|
17
|
-
|
46
|
+
Layout/AlignHash:
|
47
|
+
Severity: fatal
|
48
|
+
Enabled: true
|
18
49
|
EnforcedHashRocketStyle: table
|
19
50
|
EnforcedColonStyle: table
|
20
51
|
|
21
|
-
|
52
|
+
Layout/AlignParameters:
|
22
53
|
EnforcedStyle: with_fixed_indentation
|
54
|
+
Enabled: true
|
23
55
|
|
24
56
|
Style/StringLiterals:
|
25
57
|
EnforcedStyle: single_quotes
|
58
|
+
Enabled: true
|
26
59
|
|
27
60
|
Style/CollectionMethods:
|
28
61
|
PreferredMethods:
|
@@ -31,9 +64,41 @@ Style/CollectionMethods:
|
|
31
64
|
inject: 'reduce'
|
32
65
|
detect: 'find'
|
33
66
|
find_all: 'select'
|
67
|
+
Enabled: true
|
34
68
|
|
35
|
-
|
69
|
+
Layout/DotPosition:
|
36
70
|
EnforcedStyle: leading
|
71
|
+
Enabled: true
|
37
72
|
|
38
73
|
Style/DoubleNegation:
|
39
74
|
Enabled: false
|
75
|
+
|
76
|
+
Style/Alias:
|
77
|
+
# I like alias_method with symbol parameters
|
78
|
+
Enabled: false
|
79
|
+
|
80
|
+
Layout/SpaceAroundOperators:
|
81
|
+
# When true, allows most uses of extra spacing if the intent is to align
|
82
|
+
# with an operator on the previous or next line, not counting empty lines
|
83
|
+
# or comment lines.
|
84
|
+
AllowForAlignment: true
|
85
|
+
Enabled: true
|
86
|
+
|
87
|
+
Style/SymbolArray:
|
88
|
+
# Turned off because the associated auto-correct makes a real mess
|
89
|
+
Enabled: false
|
90
|
+
|
91
|
+
Style/FrozenStringLiteralComment:
|
92
|
+
# An 'every file in the repo' recommendation.
|
93
|
+
Enabled: false
|
94
|
+
Severity: warning
|
95
|
+
|
96
|
+
Layout/EmptyLineAfterMagicComment:
|
97
|
+
# Nooo not another 'every file in the repo' recommendation.
|
98
|
+
Enabled: false
|
99
|
+
Severity: warning
|
100
|
+
|
101
|
+
Style/GlobalVars:
|
102
|
+
# Doesn't justify a critical
|
103
|
+
Enabled: true
|
104
|
+
Severity: warning
|
data/.travis.yml
CHANGED
data/HISTORY
CHANGED
data/bandiera-client.gemspec
CHANGED
data/lib/bandiera/client.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
-
require '
|
1
|
+
require 'typhoeus'
|
2
2
|
require 'json'
|
3
3
|
require 'logger'
|
4
|
+
require 'bandiera/client/errors'
|
4
5
|
|
5
6
|
module Bandiera
|
6
7
|
##
|
@@ -25,11 +26,11 @@ module Bandiera
|
|
25
26
|
# @param [String] client_name A client name to pass through along with the HTTP requests
|
26
27
|
#
|
27
28
|
def initialize(base_uri = 'http://localhost', logger = Logger.new($stdout), client_name = nil)
|
28
|
-
@base_uri
|
29
|
-
@base_uri
|
30
|
-
@logger
|
31
|
-
@timeout
|
32
|
-
@client_name
|
29
|
+
@base_uri = base_uri
|
30
|
+
@base_uri << '/api' unless @base_uri.match(/\/api$/)
|
31
|
+
@logger = logger
|
32
|
+
@timeout = 0.2 # 0.4s (0.2 + 0.2) default timeout
|
33
|
+
@client_name = client_name
|
33
34
|
end
|
34
35
|
|
35
36
|
# @deprecated This functionality was deprecated/removed in 3.0.0
|
@@ -108,7 +109,7 @@ module Bandiera
|
|
108
109
|
end
|
109
110
|
|
110
111
|
EXCEPTIONS_TO_HANDLE = (
|
111
|
-
Errno.constants.map { |cla| Errno.const_get(cla) } + [
|
112
|
+
Errno.constants.map { |cla| Errno.const_get(cla) } + [Bandiera::Client::Error, JSON::ParserError, SocketError]
|
112
113
|
).flatten
|
113
114
|
|
114
115
|
def get_and_handle_exceptions(path, params, http_opts, return_upon_error, error_msg_prefix, &block)
|
@@ -127,11 +128,19 @@ module Bandiera
|
|
127
128
|
end
|
128
129
|
|
129
130
|
def get(path, params, passed_http_opts)
|
130
|
-
default_http_opts = { method: :get, timeout: timeout,
|
131
|
-
resource
|
132
|
-
response
|
133
|
-
|
134
|
-
|
131
|
+
default_http_opts = { method: :get, timeout: timeout, headers: headers, params: clean_params(params) }
|
132
|
+
resource = Typhoeus::Request.new("#{@base_uri}#{path}", default_http_opts.merge(passed_http_opts))
|
133
|
+
response = resource.run
|
134
|
+
|
135
|
+
if response.success?
|
136
|
+
JSON.parse(response.body)
|
137
|
+
elsif response.timed_out?
|
138
|
+
raise Bandiera::Client::TimeoutError, 'Connection timed out'
|
139
|
+
elsif response.code == 0
|
140
|
+
raise Bandiera::Client::Error, response.return_message
|
141
|
+
else
|
142
|
+
raise Bandiera::Client::ResponseError, "HTTP request failed: " + response.code.to_s
|
143
|
+
end
|
135
144
|
end
|
136
145
|
|
137
146
|
def clean_params(passed_params)
|
@@ -53,16 +53,16 @@ describe Bandiera::Client do
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
context 'when some
|
57
|
-
it 'passes them onto the
|
56
|
+
context 'when some Typhoeus::Request options are passed' do
|
57
|
+
it 'passes them onto the Typhoeus::Resource' do
|
58
58
|
params = {}
|
59
59
|
options = { timeout: 24, open_timeout: 24 }
|
60
|
-
response = double(:response, body: JSON.generate({ response: {} }))
|
61
|
-
resource = double(:resource,
|
60
|
+
response = double(:response, body: JSON.generate({ response: {} }), success?: true)
|
61
|
+
resource = double(:resource, run: response)
|
62
62
|
|
63
|
-
expect(
|
63
|
+
expect(Typhoeus::Request)
|
64
64
|
.to receive(:new)
|
65
|
-
.with(api_uri, method: :get, timeout: 24, open_timeout: 24, headers:
|
65
|
+
.with("#{api_uri}/v2/groups/foo/features/bar", method: :get, timeout: 24, open_timeout: 24, headers: {"User-Agent"=>"Bandiera Ruby Client / #{Bandiera::Client::VERSION}"}, params: {})
|
66
66
|
.once
|
67
67
|
.and_return(resource)
|
68
68
|
|
@@ -70,6 +70,47 @@ describe Bandiera::Client do
|
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
+
context 'raises a Bandiera::Client::Error, Bandiera::Client::TimeoutError or Bandiera::Client::ResponseError if there is a problem' do
|
74
|
+
context 'Bandiera::Client::Error' do
|
75
|
+
it 'is raised if the response code is 0' do
|
76
|
+
params = {}
|
77
|
+
response = double(:response, body: JSON.generate({ response: {} }), success?: false, timed_out?: false, code: 0, return_message: 'test')
|
78
|
+
resource = double(:resource, run: response)
|
79
|
+
|
80
|
+
allow(Typhoeus::Request).to receive(:new).and_return(resource)
|
81
|
+
expect(logger).to receive(:warn).with('Bandiera::Client - HANDLED EXCEPTION #<Bandiera::Client::Error: test> - CLASS Bandiera::Client::Error')
|
82
|
+
|
83
|
+
subject.enabled?('foo', 'bar', params)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context 'Bandiera::Client::TimeoutError' do
|
88
|
+
it 'is raised if the response is flagged as timed out' do
|
89
|
+
params = {}
|
90
|
+
response = double(:response, body: JSON.generate({ response: {} }), success?: false, timed_out?: true)
|
91
|
+
resource = double(:resource, run: response)
|
92
|
+
|
93
|
+
allow(Typhoeus::Request).to receive(:new).and_return(resource)
|
94
|
+
expect(logger).to receive(:warn).with('Bandiera::Client - HANDLED EXCEPTION #<Bandiera::Client::TimeoutError: Connection timed out> - CLASS Bandiera::Client::TimeoutError')
|
95
|
+
|
96
|
+
subject.enabled?('foo', 'bar', params)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context 'Bandiera::Client::ResponseError' do
|
101
|
+
it 'is raised if the response is flagged as timed out' do
|
102
|
+
params = {}
|
103
|
+
response = double(:response, body: JSON.generate({ response: {} }), success?: false, timed_out?: false, code: 404)
|
104
|
+
resource = double(:resource, run: response)
|
105
|
+
|
106
|
+
allow(Typhoeus::Request).to receive(:new).and_return(resource)
|
107
|
+
expect(logger).to receive(:warn).with('Bandiera::Client - HANDLED EXCEPTION #<Bandiera::Client::ResponseError: HTTP request failed: 404> - CLASS Bandiera::Client::ResponseError')
|
108
|
+
|
109
|
+
subject.enabled?('foo', 'bar', params)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
73
114
|
describe '#get_feature' do
|
74
115
|
let(:group) { 'pubserv' }
|
75
116
|
let(:feature) { 'log-stats' }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bandiera-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Springer Nature
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: typhoeus
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
@@ -157,6 +157,7 @@ files:
|
|
157
157
|
- Rakefile
|
158
158
|
- bandiera-client.gemspec
|
159
159
|
- lib/bandiera/client.rb
|
160
|
+
- lib/bandiera/client/errors.rb
|
160
161
|
- lib/bandiera/client/version.rb
|
161
162
|
- lib/bandiera/middleware.rb
|
162
163
|
- spec/lib/bandiera/client_spec.rb
|
@@ -182,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
182
183
|
version: '0'
|
183
184
|
requirements: []
|
184
185
|
rubyforge_project:
|
185
|
-
rubygems_version: 2.
|
186
|
+
rubygems_version: 2.6.13
|
186
187
|
signing_key:
|
187
188
|
specification_version: 4
|
188
189
|
summary: Simple feature flagging API client.
|
data/.hound.yml
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
Metrics/LineLength:
|
2
|
-
Description: 'Limit lines to 120 characters.'
|
3
|
-
Max: 120
|
4
|
-
|
5
|
-
Style/Documentation:
|
6
|
-
Enabled: false
|
7
|
-
|
8
|
-
Style/SpaceBeforeFirstArg:
|
9
|
-
Enabled: false
|
10
|
-
|
11
|
-
Style/BracesAroundHashParameters:
|
12
|
-
Enabled: false
|
13
|
-
|
14
|
-
Style/IndentHash:
|
15
|
-
EnforcedStyle: consistent
|
16
|
-
|
17
|
-
Style/AlignHash:
|
18
|
-
EnforcedHashRocketStyle: table
|
19
|
-
EnforcedColonStyle: table
|
20
|
-
|
21
|
-
Style/AlignParameters:
|
22
|
-
EnforcedStyle: with_fixed_indentation
|
23
|
-
|
24
|
-
Style/StringLiterals:
|
25
|
-
EnforcedStyle: single_quotes
|
26
|
-
|
27
|
-
Style/CollectionMethods:
|
28
|
-
PreferredMethods:
|
29
|
-
collect: 'map'
|
30
|
-
collect!: 'map!'
|
31
|
-
inject: 'reduce'
|
32
|
-
detect: 'find'
|
33
|
-
find_all: 'select'
|
34
|
-
|
35
|
-
Style/DotPosition:
|
36
|
-
EnforcedStyle: leading
|
37
|
-
|
38
|
-
Style/DoubleNegation:
|
39
|
-
Enabled: false
|