lib/flipper/adapters/http.rb in flipper-1.0.0 vs lib/flipper/adapters/http.rb in flipper-1.1.0
- old
+ new
@@ -8,11 +8,11 @@
module Flipper
module Adapters
class Http
include Flipper::Adapter
- attr_reader :name, :client
+ attr_reader :client
def initialize(options = {})
@client = Client.new(url: options.fetch(:url),
headers: options[:headers],
basic_auth_username: options[:basic_auth_username],
@@ -20,17 +20,16 @@
read_timeout: options[:read_timeout],
open_timeout: options[:open_timeout],
write_timeout: options[:write_timeout],
max_retries: options[:max_retries],
debug_output: options[:debug_output])
- @name = :http
end
def get(feature)
response = @client.get("/features/#{feature.key}")
if response.is_a?(Net::HTTPOK)
- parsed_response = JSON.parse(response.body)
+ parsed_response = Typecast.from_json(response.body)
result_for_feature(feature, parsed_response.fetch('gates'))
elsif response.is_a?(Net::HTTPNotFound)
default_config
else
raise Error, response
@@ -40,11 +39,11 @@
def get_multi(features)
csv_keys = features.map(&:key).join(',')
response = @client.get("/features?keys=#{csv_keys}&exclude_gate_names=true")
raise Error, response unless response.is_a?(Net::HTTPOK)
- parsed_response = JSON.parse(response.body)
+ parsed_response = Typecast.from_json(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
@@ -58,30 +57,30 @@
def get_all
response = @client.get("/features?exclude_gate_names=true")
raise Error, response unless response.is_a?(Net::HTTPOK)
- parsed_response = JSON.parse(response.body)
+ parsed_response = Typecast.from_json(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|
+ gates_by_key.each_key do |key|
feature = Feature.new(key, self)
result[feature.key] = result_for_feature(feature, gates_by_key[feature.key])
end
result
end
def features
response = @client.get('/features?exclude_gate_names=true')
raise Error, response unless response.is_a?(Net::HTTPOK)
- parsed_response = JSON.parse(response.body)
+ parsed_response = Typecast.from_json(response.body)
parsed_response['features'].map { |feature| feature['key'] }.to_set
end
def add(feature)
body = JSON.generate(name: feature.key)
@@ -95,19 +94,19 @@
raise Error, response unless response.is_a?(Net::HTTPNoContent)
true
end
def enable(feature, gate, thing)
- body = request_body_for_gate(gate, thing.value.to_s)
+ body = request_body_for_gate(gate, thing.value)
query_string = gate.key == :groups ? "?allow_unregistered_groups=true" : ""
response = @client.post("/features/#{feature.key}/#{gate.key}#{query_string}", body)
raise Error, response unless response.is_a?(Net::HTTPOK)
true
end
def disable(feature, gate, thing)
- body = request_body_for_gate(gate, thing.value.to_s)
+ body = request_body_for_gate(gate, thing.value)
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
@@ -136,15 +135,17 @@
def request_body_for_gate(gate, value)
data = case gate.key
when :boolean
{}
when :groups
- { name: value }
+ { name: value.to_s }
when :actors
- { flipper_id: value }
+ { flipper_id: value.to_s }
when :percentage_of_actors, :percentage_of_time
- { percentage: value }
+ { percentage: value.to_s }
+ when :expression
+ value
else
raise "#{gate.key} is not a valid flipper gate key"
end
JSON.generate(data)
end
@@ -164,15 +165,19 @@
def value_for_gate(gate, api_gate)
value = api_gate['value']
case gate.data_type
when :boolean, :integer
value ? value.to_s : value
+ when :json
+ value
when :set
value ? value.to_set : Set.new
else
- unsupported_data_type(gate.data_type)
+ unsupported_data_type gate.data_type
end
end
+
+ private
def unsupported_data_type(data_type)
raise "#{data_type} is not supported by this adapter"
end
end