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