Class: Flipper::Adapters::Http
- Inherits:
-
Object
- Object
- Flipper::Adapters::Http
show all
- Includes:
- Flipper::Adapter
- Defined in:
- lib/flipper/adapters/http.rb,
lib/flipper/adapters/http/error.rb,
lib/flipper/adapters/http/client.rb
Defined Under Namespace
Classes: Client, Error
Instance Attribute Summary collapse
Instance Method Summary
collapse
#default_config, #import, included
Constructor Details
#initialize(options = {}) ⇒ Http
Returns a new instance of Http.
15
16
17
18
19
20
21
22
23
24
|
# File 'lib/flipper/adapters/http.rb', line 15
def initialize(options = {})
@client = Client.new(url: options.fetch(:url),
headers: options[:headers],
basic_auth_username: options[:basic_auth_username],
basic_auth_password: options[:basic_auth_password],
read_timeout: options[:read_timeout],
open_timeout: options[:open_timeout],
debug_output: options[:debug_output])
@name = :http
end
|
Instance Attribute Details
#name ⇒ Object
Returns the value of attribute name.
13
14
15
|
# File 'lib/flipper/adapters/http.rb', line 13
def name
@name
end
|
Instance Method Details
#add(feature) ⇒ Object
38
39
40
41
42
|
# File 'lib/flipper/adapters/http.rb', line 38
def add(feature)
body = JSON.generate(name: feature.key)
response = @client.post('/features', body)
response.is_a?(Net::HTTPOK)
end
|
#clear(feature) ⇒ Object
115
116
117
118
|
# File 'lib/flipper/adapters/http.rb', line 115
def clear(feature)
response = @client.delete("/features/#{feature.key}/clear")
response.is_a?(Net::HTTPNoContent)
end
|
#disable(feature, gate, thing) ⇒ Object
102
103
104
105
106
107
108
109
110
111
112
113
|
# File 'lib/flipper/adapters/http.rb', line 102
def disable(feature, gate, thing)
body = request_body_for_gate(gate, thing.value.to_s)
query_string = gate.key == :groups ? "?allow_unregistered_groups=true" : ""
response =
case gate.key
when :percentage_of_actors, :percentage_of_time
@client.post("/features/#{feature.key}/#{gate.key}#{query_string}", body)
else
@client.delete("/features/#{feature.key}/#{gate.key}#{query_string}", body)
end
response.is_a?(Net::HTTPOK)
end
|
#enable(feature, gate, thing) ⇒ Object
95
96
97
98
99
100
|
# File 'lib/flipper/adapters/http.rb', line 95
def enable(feature, gate, thing)
body = request_body_for_gate(gate, thing.value.to_s)
query_string = gate.key == :groups ? "?allow_unregistered_groups=true" : ""
response = @client.post("/features/#{feature.key}/#{gate.key}#{query_string}", body)
response.is_a?(Net::HTTPOK)
end
|
#features ⇒ Object
82
83
84
85
86
87
88
|
# File 'lib/flipper/adapters/http.rb', line 82
def features
response = @client.get('/features')
raise Error, response unless response.is_a?(Net::HTTPOK)
parsed_response = JSON.parse(response.body)
parsed_response['features'].map { |feature| feature['key'] }.to_set
end
|
#get(feature) ⇒ Object
26
27
28
29
30
31
32
33
34
35
36
|
# File 'lib/flipper/adapters/http.rb', line 26
def get(feature)
response = @client.get("/features/#{feature.key}")
if response.is_a?(Net::HTTPOK)
parsed_response = JSON.parse(response.body)
result_for_feature(feature, parsed_response.fetch('gates'))
elsif response.is_a?(Net::HTTPNotFound)
default_config
else
raise Error, response
end
end
|
#get_all ⇒ Object
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# File 'lib/flipper/adapters/http.rb', line 63
def get_all
response = @client.get("/features")
raise Error, response unless response.is_a?(Net::HTTPOK)
parsed_response = JSON.parse(response.body)
parsed_features = parsed_response.fetch('features')
gates_by_key = parsed_features.each_with_object({}) do |parsed_feature, hash|
hash[parsed_feature['key']] = parsed_feature['gates']
hash
end
result = {}
gates_by_key.keys.each do |key|
feature = Feature.new(key, self)
result[feature.key] = result_for_feature(feature, gates_by_key[feature.key])
end
result
end
|
#get_multi(features) ⇒ Object
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/flipper/adapters/http.rb', line 44
def get_multi(features)
csv_keys = features.map(&:key).join(',')
response = @client.get("/features?keys=#{csv_keys}")
raise Error, response unless response.is_a?(Net::HTTPOK)
parsed_response = JSON.parse(response.body)
parsed_features = parsed_response.fetch('features')
gates_by_key = parsed_features.each_with_object({}) do |parsed_feature, hash|
hash[parsed_feature['key']] = parsed_feature['gates']
hash
end
result = {}
features.each do |feature|
result[feature.key] = result_for_feature(feature, gates_by_key[feature.key])
end
result
end
|
#remove(feature) ⇒ Object
90
91
92
93
|
# File 'lib/flipper/adapters/http.rb', line 90
def remove(feature)
response = @client.delete("/features/#{feature.key}")
response.is_a?(Net::HTTPNoContent)
end
|