Skip to content

Commit 30606a8

Browse files
prepare 5.8.1 release (#166)
1 parent fa93b41 commit 30606a8

File tree

8 files changed

+58
-145
lines changed

8 files changed

+58
-145
lines changed

Gemfile.lock

Lines changed: 44 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -3,92 +3,81 @@ PATH
33
specs:
44
launchdarkly-server-sdk (5.8.0)
55
concurrent-ruby (~> 1.0)
6-
json (>= 1.8, < 3)
6+
json (~> 2.3.1)
77
ld-eventsource (= 1.0.3)
88
semantic (~> 1.6)
99

1010
GEM
1111
remote: https://rubygems.org/
1212
specs:
13-
aws-eventstream (1.0.1)
14-
aws-partitions (1.128.0)
15-
aws-sdk-core (3.44.2)
16-
aws-eventstream (~> 1.0)
17-
aws-partitions (~> 1.0)
18-
aws-sigv4 (~> 1.0)
13+
aws-eventstream (1.1.0)
14+
aws-partitions (1.388.0)
15+
aws-sdk-core (3.109.1)
16+
aws-eventstream (~> 1, >= 1.0.2)
17+
aws-partitions (~> 1, >= 1.239.0)
18+
aws-sigv4 (~> 1.1)
1919
jmespath (~> 1.0)
20-
aws-sdk-dynamodb (1.19.0)
21-
aws-sdk-core (~> 3, >= 3.39.0)
22-
aws-sigv4 (~> 1.0)
23-
aws-sigv4 (1.0.3)
24-
codeclimate-test-reporter (0.6.0)
25-
simplecov (>= 0.7.1, < 1.0.0)
26-
concurrent-ruby (1.1.6)
27-
connection_pool (2.2.1)
28-
diff-lcs (1.3)
29-
diplomat (2.0.2)
30-
faraday (~> 0.9)
31-
json
32-
docile (1.1.5)
33-
faraday (0.15.4)
20+
aws-sdk-dynamodb (1.55.0)
21+
aws-sdk-core (~> 3, >= 3.109.0)
22+
aws-sigv4 (~> 1.1)
23+
aws-sigv4 (1.2.2)
24+
aws-eventstream (~> 1, >= 1.0.2)
25+
concurrent-ruby (1.1.7)
26+
connection_pool (2.2.3)
27+
deep_merge (1.2.1)
28+
diff-lcs (1.4.4)
29+
diplomat (2.4.2)
30+
deep_merge (~> 1.0, >= 1.0.1)
31+
faraday (>= 0.9, < 1.1.0)
32+
faraday (0.17.3)
3433
multipart-post (>= 1.2, < 3)
35-
ffi (1.9.25)
36-
ffi (1.9.25-java)
34+
ffi (1.12.0)
3735
hitimes (1.3.1)
38-
hitimes (1.3.1-java)
3936
http_tools (0.4.5)
4037
jmespath (1.4.0)
41-
json (1.8.6)
42-
json (1.8.6-java)
38+
json (2.3.1)
4339
ld-eventsource (1.0.3)
4440
concurrent-ruby (~> 1.0)
4541
http_tools (~> 0.4.5)
4642
socketry (~> 0.5.1)
47-
listen (3.1.5)
48-
rb-fsevent (~> 0.9, >= 0.9.4)
49-
rb-inotify (~> 0.9, >= 0.9.7)
50-
ruby_dep (~> 1.2)
51-
multipart-post (2.0.0)
52-
rb-fsevent (0.10.3)
53-
rb-inotify (0.9.10)
54-
ffi (>= 0.5.0, < 2)
43+
listen (3.2.1)
44+
rb-fsevent (~> 0.10, >= 0.10.3)
45+
rb-inotify (~> 0.9, >= 0.9.10)
46+
multipart-post (2.1.1)
47+
rb-fsevent (0.10.4)
48+
rb-inotify (0.10.1)
49+
ffi (~> 1.0)
5550
redis (3.3.5)
56-
rspec (3.7.0)
57-
rspec-core (~> 3.7.0)
58-
rspec-expectations (~> 3.7.0)
59-
rspec-mocks (~> 3.7.0)
60-
rspec-core (3.7.1)
61-
rspec-support (~> 3.7.0)
62-
rspec-expectations (3.7.0)
51+
rspec (3.9.0)
52+
rspec-core (~> 3.9.0)
53+
rspec-expectations (~> 3.9.0)
54+
rspec-mocks (~> 3.9.0)
55+
rspec-core (3.9.3)
56+
rspec-support (~> 3.9.3)
57+
rspec-expectations (3.9.3)
6358
diff-lcs (>= 1.2.0, < 2.0)
64-
rspec-support (~> 3.7.0)
65-
rspec-mocks (3.7.0)
59+
rspec-support (~> 3.9.0)
60+
rspec-mocks (3.9.1)
6661
diff-lcs (>= 1.2.0, < 2.0)
67-
rspec-support (~> 3.7.0)
68-
rspec-support (3.7.0)
62+
rspec-support (~> 3.9.0)
63+
rspec-support (3.9.4)
6964
rspec_junit_formatter (0.3.0)
7065
rspec-core (>= 2, < 4, != 2.12.0)
71-
ruby_dep (1.5.0)
7266
semantic (1.6.1)
73-
simplecov (0.15.1)
74-
docile (~> 1.1.0)
75-
json (>= 1.8, < 3)
76-
simplecov-html (~> 0.10.0)
77-
simplecov-html (0.10.2)
7867
socketry (0.5.1)
7968
hitimes (~> 1.2)
80-
timecop (0.9.1)
69+
timecop (0.9.2)
8170

8271
PLATFORMS
83-
java
8472
ruby
8573

8674
DEPENDENCIES
8775
aws-sdk-dynamodb (~> 1.18)
88-
bundler (~> 1.7)
89-
codeclimate-test-reporter (~> 0)
76+
bundler (~> 1.17)
9077
connection_pool (>= 2.1.2)
9178
diplomat (>= 2.0.2)
79+
faraday (~> 0.17)
80+
ffi (<= 1.12)
9281
launchdarkly-server-sdk!
9382
listen (~> 3.0)
9483
redis (~> 3.3.5)

launchdarkly-server-sdk.gemspec

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,25 @@ Gem::Specification.new do |spec|
2121
spec.require_paths = ["lib"]
2222

2323
spec.add_development_dependency "aws-sdk-dynamodb", "~> 1.18"
24-
spec.add_development_dependency "bundler", "~> 1.7"
24+
spec.add_development_dependency "bundler", "~> 1.17"
2525
spec.add_development_dependency "rspec", "~> 3.2"
26-
spec.add_development_dependency "codeclimate-test-reporter", "~> 0"
2726
spec.add_development_dependency "diplomat", ">= 2.0.2"
2827
spec.add_development_dependency "redis", "~> 3.3.5"
2928
spec.add_development_dependency "connection_pool", ">= 2.1.2"
3029
spec.add_development_dependency "rspec_junit_formatter", "~> 0.3.0"
3130
spec.add_development_dependency "timecop", "~> 0.9.1"
3231
spec.add_development_dependency "listen", "~> 3.0" # see file_data_source.rb
32+
# these are transitive dependencies of listen and consul respectively
33+
# we constrain them here to make sure the ruby 2.2, 2.3, and 2.4 CI
34+
# cases all pass
35+
spec.add_development_dependency "ffi", "<= 1.12" # >1.12 doesnt support ruby 2.2
36+
spec.add_development_dependency "faraday", "~> 0.17" # >=0.18 doesnt support ruby 2.2
3337

34-
spec.add_runtime_dependency "json", [">= 1.8", "< 3"]
3538
spec.add_runtime_dependency "semantic", "~> 1.6"
3639
spec.add_runtime_dependency "concurrent-ruby", "~> 1.0"
3740
spec.add_runtime_dependency "ld-eventsource", "1.0.3"
41+
42+
# lock json to 2.3.x as ruby libraries often remove
43+
# support for older ruby versions in minor releases
44+
spec.add_runtime_dependency "json", "~> 2.3.1"
3845
end

lib/ldclient-rb/ldclient.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -363,12 +363,12 @@ def create_default_data_source(sdk_key, config, diagnostic_accumulator)
363363
return NullUpdateProcessor.new
364364
end
365365
raise ArgumentError, "sdk_key must not be nil" if sdk_key.nil? # see LDClient constructor comment on sdk_key
366-
requestor = Requestor.new(sdk_key, config)
367366
if config.stream?
368-
StreamProcessor.new(sdk_key, config, requestor, diagnostic_accumulator)
367+
StreamProcessor.new(sdk_key, config, diagnostic_accumulator)
369368
else
370369
config.logger.info { "Disabling streaming API" }
371370
config.logger.warn { "You should only disable the streaming API if instructed to do so by LaunchDarkly support" }
371+
requestor = Requestor.new(sdk_key, config)
372372
PollingProcessor.new(config, requestor)
373373
end
374374
end

lib/ldclient-rb/requestor.rb

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,6 @@ def initialize(sdk_key, config)
2626
@cache = @config.cache_store
2727
end
2828

29-
def request_flag(key)
30-
make_request("/sdk/latest-flags/" + key)
31-
end
32-
33-
def request_segment(key)
34-
make_request("/sdk/latest-segments/" + key)
35-
end
36-
3729
def request_all_data()
3830
make_request("/sdk/latest-all")
3931
end

lib/ldclient-rb/stream.rb

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,6 @@ module LaunchDarkly
1010
# @private
1111
DELETE = :delete
1212
# @private
13-
INDIRECT_PUT = :'indirect/put'
14-
# @private
15-
INDIRECT_PATCH = :'indirect/patch'
16-
# @private
1713
READ_TIMEOUT_SECONDS = 300 # 5 minutes; the stream should send a ping every 3 minutes
1814

1915
# @private
@@ -24,11 +20,10 @@ module LaunchDarkly
2420

2521
# @private
2622
class StreamProcessor
27-
def initialize(sdk_key, config, requestor, diagnostic_accumulator = nil)
23+
def initialize(sdk_key, config, diagnostic_accumulator = nil)
2824
@sdk_key = sdk_key
2925
@config = config
3026
@feature_store = config.feature_store
31-
@requestor = requestor
3227
@initialized = Concurrent::AtomicBoolean.new(false)
3328
@started = Concurrent::AtomicBoolean.new(false)
3429
@stopped = Concurrent::AtomicBoolean.new(false)
@@ -112,24 +107,6 @@ def process_message(message)
112107
break
113108
end
114109
end
115-
elsif method == INDIRECT_PUT
116-
all_data = @requestor.request_all_data
117-
@feature_store.init({
118-
FEATURES => all_data[:flags],
119-
SEGMENTS => all_data[:segments]
120-
})
121-
@initialized.make_true
122-
@config.logger.info { "[LDClient] Stream initialized (via indirect message)" }
123-
elsif method == INDIRECT_PATCH
124-
key = key_for_path(FEATURES, message.data)
125-
if key
126-
@feature_store.upsert(FEATURES, @requestor.request_flag(key))
127-
else
128-
key = key_for_path(SEGMENTS, message.data)
129-
if key
130-
@feature_store.upsert(SEGMENTS, @requestor.request_segment(key))
131-
end
132-
end
133110
else
134111
@config.logger.warn { "[LDClient] Unknown message received: #{method}" }
135112
end

spec/requestor_spec.rb

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -193,38 +193,4 @@ def with_requestor(base_uri, opts = {})
193193
end
194194
end
195195
end
196-
197-
describe "request_flag" do
198-
it "uses expected URI and headers" do
199-
with_server do |server|
200-
with_requestor(server.base_uri.to_s) do |requestor|
201-
server.setup_ok_response("/", "{}")
202-
requestor.request_flag("key")
203-
expect(server.requests.count).to eq 1
204-
expect(server.requests[0].unparsed_uri).to eq "/sdk/latest-flags/key"
205-
expect(server.requests[0].header).to include({
206-
"authorization" => [ $sdk_key ],
207-
"user-agent" => [ "RubyClient/" + LaunchDarkly::VERSION ]
208-
})
209-
end
210-
end
211-
end
212-
end
213-
214-
describe "request_segment" do
215-
it "uses expected URI and headers" do
216-
with_server do |server|
217-
with_requestor(server.base_uri.to_s) do |requestor|
218-
server.setup_ok_response("/", "{}")
219-
requestor.request_segment("key")
220-
expect(server.requests.count).to eq 1
221-
expect(server.requests[0].unparsed_uri).to eq "/sdk/latest-segments/key"
222-
expect(server.requests[0].header).to include({
223-
"authorization" => [ $sdk_key ],
224-
"user-agent" => [ "RubyClient/" + LaunchDarkly::VERSION ]
225-
})
226-
end
227-
end
228-
end
229-
end
230196
end

spec/spec_helper.rb

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
require "codeclimate-test-reporter"
2-
CodeClimate::TestReporter.start
3-
41
require "ldclient-rb"
52

63
$null_log = ::Logger.new($stdout)

spec/stream_spec.rb

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,14 @@
44
describe LaunchDarkly::StreamProcessor do
55
subject { LaunchDarkly::StreamProcessor }
66
let(:config) { LaunchDarkly::Config.new }
7-
let(:requestor) { double() }
8-
let(:processor) { subject.new("sdk_key", config, requestor) }
7+
let(:processor) { subject.new("sdk_key", config) }
98

109
describe '#process_message' do
1110
let(:put_message) { SSE::StreamEvent.new(:put, '{"data":{"flags":{"asdf": {"key": "asdf"}},"segments":{"segkey": {"key": "segkey"}}}}') }
1211
let(:patch_flag_message) { SSE::StreamEvent.new(:patch, '{"path": "/flags/key", "data": {"key": "asdf", "version": 1}}') }
1312
let(:patch_seg_message) { SSE::StreamEvent.new(:patch, '{"path": "/segments/key", "data": {"key": "asdf", "version": 1}}') }
1413
let(:delete_flag_message) { SSE::StreamEvent.new(:delete, '{"path": "/flags/key", "version": 2}') }
1514
let(:delete_seg_message) { SSE::StreamEvent.new(:delete, '{"path": "/segments/key", "version": 2}') }
16-
let(:indirect_patch_flag_message) { SSE::StreamEvent.new(:'indirect/patch', "/flags/key") }
17-
let(:indirect_patch_segment_message) { SSE::StreamEvent.new(:'indirect/patch', "/segments/key") }
1815

1916
it "will accept PUT methods" do
2017
processor.send(:process_message, put_message)
@@ -39,18 +36,6 @@
3936
processor.send(:process_message, delete_seg_message)
4037
expect(config.feature_store.get(LaunchDarkly::SEGMENTS, "key")).to eq(nil)
4138
end
42-
it "will accept INDIRECT PATCH method for flags" do
43-
flag = { key: 'key', version: 1 }
44-
allow(requestor).to receive(:request_flag).with(flag[:key]).and_return(flag)
45-
processor.send(:process_message, indirect_patch_flag_message);
46-
expect(config.feature_store.get(LaunchDarkly::FEATURES, flag[:key])).to eq(flag)
47-
end
48-
it "will accept INDIRECT PATCH method for segments" do
49-
segment = { key: 'key', version: 1 }
50-
allow(requestor).to receive(:request_segment).with(segment[:key]).and_return(segment)
51-
processor.send(:process_message, indirect_patch_segment_message);
52-
expect(config.feature_store.get(LaunchDarkly::SEGMENTS, segment[:key])).to eq(segment)
53-
end
5439
it "will log a warning if the method is not recognized" do
5540
expect(processor.instance_variable_get(:@config).logger).to receive :warn
5641
processor.send(:process_message, SSE::StreamEvent.new(type: :get, data: "", id: nil))

0 commit comments

Comments
 (0)