From 457bdd1cd53b7eb663eb30a9d7c33a6f77c67110 Mon Sep 17 00:00:00 2001 From: John Kodumal Date: Fri, 5 Aug 2016 09:25:08 -0700 Subject: [PATCH 1/4] api_key -> sdk_key --- lib/ldclient-rb/events.rb | 6 +++--- lib/ldclient-rb/ldclient.rb | 17 ++++++++--------- lib/ldclient-rb/requestor.rb | 6 +++--- lib/ldclient-rb/stream.rb | 6 +++--- spec/stream_spec.rb | 4 ++-- 5 files changed, 19 insertions(+), 20 deletions(-) diff --git a/lib/ldclient-rb/events.rb b/lib/ldclient-rb/events.rb index 47b4ac23..5eb8899f 100644 --- a/lib/ldclient-rb/events.rb +++ b/lib/ldclient-rb/events.rb @@ -4,9 +4,9 @@ module LaunchDarkly class EventProcessor - def initialize(api_key, config) + def initialize(sdk_key, config) @queue = Queue.new - @api_key = api_key + @sdk_key = sdk_key @config = config @client = Faraday.new @worker = create_worker @@ -27,7 +27,7 @@ def create_worker def post_flushed_events(events) res = @client.post (@config.events_uri + "/bulk") do |req| - req.headers["Authorization"] = "api_key " + @api_key + req.headers["Authorization"] = @sdk_key req.headers["User-Agent"] = "RubyClient/" + LaunchDarkly::VERSION req.headers["Content-Type"] = "application/json" req.body = events.to_json diff --git a/lib/ldclient-rb/ldclient.rb b/lib/ldclient-rb/ldclient.rb index 6da0e5f3..d28323c1 100644 --- a/lib/ldclient-rb/ldclient.rb +++ b/lib/ldclient-rb/ldclient.rb @@ -7,7 +7,7 @@ module LaunchDarkly # - # A client for the LaunchDarkly API. Client instances are thread-safe. Users + # A client for LaunchDarkly. Client instances are thread-safe. Users # should create a single client instance for the lifetime of the application. # # @@ -19,26 +19,26 @@ class LDClient # but for most use cases, the default configuration is appropriate. # # - # @param api_key [String] the API key for your LaunchDarkly account + # @param sdk_key [String] the SDK key for your LaunchDarkly account # @param config [Config] an optional client configuration object # # @return [LDClient] The LaunchDarkly client instance - def initialize(api_key, config = Config.default, wait_for_sec = 5) - @api_key = api_key + def initialize(sdk_key, config = Config.default, wait_for_sec = 5) + @sdk_key = sdk_key @config = config @store = config.feature_store - requestor = Requestor.new(api_key, config) + requestor = Requestor.new(sdk_key, config) if !@config.offline? if @config.stream? - @update_processor = StreamProcessor.new(api_key, config, requestor) + @update_processor = StreamProcessor.new(sdk_key, config, requestor) else @update_processor = PollingProcessor.new(config, requestor) end @update_processor.start end - @event_processor = EventProcessor.new(api_key, config) + @event_processor = EventProcessor.new(sdk_key, config) if !@config.offline? && wait_for_sec > 0 begin @@ -61,8 +61,7 @@ def toggle?(key, user, default = False) end def secure_mode_hash(user) - puts @api_key - OpenSSL::HMAC.hexdigest('sha256', @api_key, user[:key].to_s) + OpenSSL::HMAC.hexdigest('sha256', @sdk_key, user[:key].to_s) end # diff --git a/lib/ldclient-rb/requestor.rb b/lib/ldclient-rb/requestor.rb index 72c8d493..16e1d34e 100644 --- a/lib/ldclient-rb/requestor.rb +++ b/lib/ldclient-rb/requestor.rb @@ -5,8 +5,8 @@ module LaunchDarkly class Requestor - def initialize(api_key, config) - @api_key = api_key + def initialize(sdk_key, config) + @sdk_key = sdk_key @config = config @client = Faraday.new do |builder| builder.use :http_cache, store: @config.cache_store @@ -25,7 +25,7 @@ def request_flag(key) def make_request(path) res = @client.get (@config.base_uri + path) do |req| - req.headers["Authorization"] = "api_key " + @api_key + req.headers["Authorization"] = @sdk_key req.headers["User-Agent"] = "RubyClient/" + LaunchDarkly::VERSION req.options.timeout = @config.read_timeout req.options.open_timeout = @config.connect_timeout diff --git a/lib/ldclient-rb/stream.rb b/lib/ldclient-rb/stream.rb index b0b52a2e..fd97b8aa 100644 --- a/lib/ldclient-rb/stream.rb +++ b/lib/ldclient-rb/stream.rb @@ -10,8 +10,8 @@ module LaunchDarkly INDIRECT_PATCH = :'indirect/patch' class StreamProcessor - def initialize(api_key, config, requestor) - @api_key = api_key + def initialize(sdk_key, config, requestor) + @sdk_key = sdk_key @config = config @store = config.feature_store @requestor = requestor @@ -30,7 +30,7 @@ def start headers = { - 'Authorization' => 'api_key ' + @api_key, + 'Authorization' => @sdk_key, 'User-Agent' => 'RubyClient/' + LaunchDarkly::VERSION } opts = {:headers => headers, :with_credentials => true} diff --git a/spec/stream_spec.rb b/spec/stream_spec.rb index 9a43355c..d4a31a86 100644 --- a/spec/stream_spec.rb +++ b/spec/stream_spec.rb @@ -33,8 +33,8 @@ describe LaunchDarkly::StreamProcessor do subject { LaunchDarkly::StreamProcessor } let(:config) { LaunchDarkly::Config.new } - let(:requestor) { LaunchDarkly::Requestor.new("api_key", config)} - let(:processor) { subject.new("api_key", config, requestor) } + let(:requestor) { LaunchDarkly::Requestor.new("sdk_key", config)} + let(:processor) { subject.new("sdk_key", config, requestor) } describe '#process_message' do let(:put_message) { OpenStruct.new({data: '{"key": {"value": "asdf"}}'}) } From 4cf82204061bea8d0e8b9277bddadf52b53cb861 Mon Sep 17 00:00:00 2001 From: John Kodumal Date: Fri, 5 Aug 2016 11:29:53 -0700 Subject: [PATCH 2/4] Send prereqOf and version in flag request events --- lib/ldclient-rb/evaluation.rb | 2 +- lib/ldclient-rb/ldclient.rb | 42 ++++++++++++++++++++--------------- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/lib/ldclient-rb/evaluation.rb b/lib/ldclient-rb/evaluation.rb index 03b1ee3d..90df5159 100644 --- a/lib/ldclient-rb/evaluation.rb +++ b/lib/ldclient-rb/evaluation.rb @@ -118,7 +118,7 @@ def eval_internal(flag, user, store, events) begin prereq_res = eval_internal(prereq_flag, user, store, events) variation = get_variation(prereq_flag, prerequisite[:variation]) - events.push(kind: "feature", key: prereq_flag[:key], value: prereq_res) + events.push(kind: "feature", key: prereq_flag[:key], value: prereq_res, version: prereq_flag[:version], prereqOf: flag[:key]) if prereq_res.nil? || prereq_res!= variation failed_prereq = true end diff --git a/lib/ldclient-rb/ldclient.rb b/lib/ldclient-rb/ldclient.rb index d28323c1..aa4e4224 100644 --- a/lib/ldclient-rb/ldclient.rb +++ b/lib/ldclient-rb/ldclient.rb @@ -114,26 +114,32 @@ def variation(key, user, default) sanitize_user(user) feature = @store.get(key) - begin - res = evaluate(feature, user, @store) - if !res[:events].nil? - res[:events].each do |event| - @event_processor.add_event(event) - end - end - if !res[:value].nil? - @event_processor.add_event(kind: "feature", key: key, user: user, value: res[:value], default: default) - return res[:value] - else - @config.logger.debug("[LDClient] Result value is null in toggle") - @event_processor.add_event(kind: "feature", key: key, user: user, value: default, default: default) - return default + if !feature.nil? + @config.logger.error("[LDClient] Unknown feature flag #{key}. Returning default value") + @event_processor.add_event(kind: "feature", key: key, value: default, default: default) + return default + end + + begin + res = evaluate(feature, user, @store) + if !res[:events].nil? + res[:events].each do |event| + @event_processor.add_event(event) end - rescue => exn - @config.logger.warn("[LDClient] Error evaluating feature flag: #{exn.inspect}. \nTrace: #{exn.backtrace}") - @event_processor.add_event(kind: "feature", key: key, user: user, value: default, default: default) - return default end + if !res[:value].nil? + @event_processor.add_event(kind: "feature", key: key, user: user, value: res[:value], default: default, version: feature[:version]) + return res[:value] + else + @config.logger.debug("[LDClient] Result value is null in toggle") + @event_processor.add_event(kind: "feature", key: key, user: user, value: default, default: default, version: feature[:version]) + return default + end + rescue => exn + @config.logger.warn("[LDClient] Error evaluating feature flag: #{exn.inspect}. \nTrace: #{exn.backtrace}") + @event_processor.add_event(kind: "feature", key: key, user: user, value: default, default: default, version: feature[:version]) + return default + end end # From b6791d195c0f3ebf3cf850c6d294a0bdb98ca047 Mon Sep 17 00:00:00 2001 From: John Kodumal Date: Fri, 5 Aug 2016 11:31:09 -0700 Subject: [PATCH 3/4] Fix nil check for feature --- lib/ldclient-rb/ldclient.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ldclient-rb/ldclient.rb b/lib/ldclient-rb/ldclient.rb index aa4e4224..1af095e5 100644 --- a/lib/ldclient-rb/ldclient.rb +++ b/lib/ldclient-rb/ldclient.rb @@ -114,7 +114,7 @@ def variation(key, user, default) sanitize_user(user) feature = @store.get(key) - if !feature.nil? + if feature.nil? @config.logger.error("[LDClient] Unknown feature flag #{key}. Returning default value") @event_processor.add_event(kind: "feature", key: key, value: default, default: default) return default From 6840126ce93c2290ec2c15e285ab930df522406f Mon Sep 17 00:00:00 2001 From: John Kodumal Date: Fri, 5 Aug 2016 12:59:48 -0700 Subject: [PATCH 4/4] Additional references to SDK key --- README.md | 6 +++--- lib/ldclient-rb/requestor.rb | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 35969b68..2e0324f9 100644 --- a/README.md +++ b/README.md @@ -23,10 +23,10 @@ gem install ldclient-rb require 'ldclient-rb' ``` -2. Create a new LDClient with your API key: +2. Create a new LDClient with your SDK key: ```ruby -client = LaunchDarkly::LDClient.new("your_api_key") +client = LaunchDarkly::LDClient.new("your_sdk_key") ``` ### Ruby on Rails @@ -36,7 +36,7 @@ client = LaunchDarkly::LDClient.new("your_api_key") 1. Initialize the launchdarkly client in `config/initializers/launchdarkly.rb`: ```ruby -Rails.configuration.ld_client = LaunchDarkly::LDClient.new("your_api_key") +Rails.configuration.ld_client = LaunchDarkly::LDClient.new("your_sdk_key") ``` 2. You may want to include a function in your ApplicationController diff --git a/lib/ldclient-rb/requestor.rb b/lib/ldclient-rb/requestor.rb index 16e1d34e..69a1ac98 100644 --- a/lib/ldclient-rb/requestor.rb +++ b/lib/ldclient-rb/requestor.rb @@ -32,7 +32,7 @@ def make_request(path) end if res.status == 401 - @config.logger.error("[LDClient] Invalid API key") + @config.logger.error("[LDClient] Invalid SDK key") return nil end