ldclient-rb 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.hound.yml +2 -0
- data/.rspec +2 -0
- data/.rubocop.yml +601 -0
- data/.simplecov +4 -0
- data/CONTRIBUTING.md +10 -0
- data/Gemfile +1 -1
- data/LICENSE.txt +1 -1
- data/README.md +72 -13
- data/Rakefile +3 -0
- data/circle.yml +29 -0
- data/ldclient-rb.gemspec +8 -6
- data/lib/ldclient-rb/config.rb +73 -76
- data/lib/ldclient-rb/ldclient.rb +201 -199
- data/lib/ldclient-rb/newrelic.rb +4 -7
- data/lib/ldclient-rb/store.rb +10 -11
- data/lib/ldclient-rb/stream.rb +67 -67
- data/lib/ldclient-rb/version.rb +1 -1
- data/spec/config_spec.rb +45 -0
- data/spec/fixtures/feature.json +67 -0
- data/spec/fixtures/user.json +9 -0
- data/spec/ldclient_spec.rb +226 -0
- data/spec/newrelic_spec.rb +5 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/store_spec.rb +10 -0
- data/spec/stream_spec.rb +118 -0
- data/spec/version_spec.rb +7 -0
- metadata +82 -31
data/spec/spec_helper.rb
ADDED
data/spec/store_spec.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe LaunchDarkly::ThreadSafeMemoryStore do
|
4
|
+
subject { LaunchDarkly::ThreadSafeMemoryStore }
|
5
|
+
let(:store) { subject.new }
|
6
|
+
it "can read and write" do
|
7
|
+
store.write("key", "value")
|
8
|
+
expect(store.read("key")).to eq "value"
|
9
|
+
end
|
10
|
+
end
|
data/spec/stream_spec.rb
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe LaunchDarkly::InMemoryFeatureStore do
|
4
|
+
subject { LaunchDarkly::InMemoryFeatureStore }
|
5
|
+
let(:store) { subject.new }
|
6
|
+
let(:key) { :asdf }
|
7
|
+
let(:feature) { { value: "qwer", version: 0 } }
|
8
|
+
|
9
|
+
describe '#all' do
|
10
|
+
it "will get all keys" do
|
11
|
+
store.upsert(key, feature)
|
12
|
+
data = store.all
|
13
|
+
expect(data).to eq(key => feature)
|
14
|
+
end
|
15
|
+
it "will not get deleted keys" do
|
16
|
+
store.upsert(key, feature)
|
17
|
+
store.delete(key, 1)
|
18
|
+
data = store.all
|
19
|
+
expect(data).to eq({})
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#initialized?' do
|
24
|
+
it "will return whether the store has been initialized" do
|
25
|
+
expect(store.initialized?).to eq false
|
26
|
+
store.init(key => feature)
|
27
|
+
expect(store.initialized?).to eq true
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe LaunchDarkly::StreamProcessor do
|
33
|
+
subject { LaunchDarkly::StreamProcessor }
|
34
|
+
let(:config) { LaunchDarkly::Config.new }
|
35
|
+
let(:processor) { subject.new("api_key", config) }
|
36
|
+
describe '#start' do
|
37
|
+
it "will check if the reactor has started" do
|
38
|
+
expect(processor).to receive(:start_reactor).and_return false
|
39
|
+
expect(EM).to_not receive(:defer)
|
40
|
+
processor.start
|
41
|
+
end
|
42
|
+
it "will check if the stream processor has already started" do
|
43
|
+
expect(processor).to receive(:start_reactor).and_return true
|
44
|
+
processor.instance_variable_get(:@started).make_true
|
45
|
+
expect(EM).to_not receive(:defer)
|
46
|
+
processor.start
|
47
|
+
end
|
48
|
+
it "will boot the stream processor" do
|
49
|
+
expect(processor).to receive(:start_reactor).and_return true
|
50
|
+
expect(EM).to receive(:defer)
|
51
|
+
processor.start
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe '#boot_event_manager' do
|
56
|
+
let(:message) { "asdf" }
|
57
|
+
before do
|
58
|
+
processor.instance_variable_get(:@config).instance_variable_set(:@stream_uri, "http://example.com/streaming")
|
59
|
+
expect_any_instance_of(EM::EventSource).to receive(:start)
|
60
|
+
source = processor.send(:boot_event_manager)
|
61
|
+
@req = source.instance_variable_get "@req"
|
62
|
+
# It seems testing EventManager is hard/impossible
|
63
|
+
end
|
64
|
+
it "will start" do
|
65
|
+
end
|
66
|
+
xit "will process put messages" do
|
67
|
+
expect(processor).to receive(:process_message).with(message, LaunchDarkly::PUT)
|
68
|
+
@req.stream_data("data: #{message}\nevent:#{LaunchDarkly::PUT}\n")
|
69
|
+
end
|
70
|
+
xit "will process patch messages" do
|
71
|
+
expect(processor).to receive(:process_message).with(message, LaunchDarkly::PATCH)
|
72
|
+
end
|
73
|
+
xit "will process delete messages" do
|
74
|
+
expect(processor).to receive(:process_message).with(message, LaunchDarkly::DELETE)
|
75
|
+
end
|
76
|
+
xit "will process errors" do
|
77
|
+
expect(processor).to receive(:set_disconnected)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe '#process_message' do
|
82
|
+
let(:put_message) { '{"key": {"value": "asdf"}}' }
|
83
|
+
let(:patch_message) { '{"path": "akey", "data": {"value": "asdf", "version": 1}}' }
|
84
|
+
let(:delete_message) { '{"path": "akey", "version": 2}' }
|
85
|
+
it "will accept PUT methods" do
|
86
|
+
processor.send(:process_message, put_message, LaunchDarkly::PUT)
|
87
|
+
expect(processor.instance_variable_get(:@store).get("key")).to eq(value: "asdf")
|
88
|
+
end
|
89
|
+
it "will accept PATCH methods" do
|
90
|
+
processor.send(:process_message, patch_message, LaunchDarkly::PATCH)
|
91
|
+
expect(processor.instance_variable_get(:@store).get("key")).to eq(value: "asdf", version: 1)
|
92
|
+
end
|
93
|
+
it "will accept DELETE methods" do
|
94
|
+
processor.send(:process_message, patch_message, LaunchDarkly::PATCH)
|
95
|
+
processor.send(:process_message, delete_message, LaunchDarkly::DELETE)
|
96
|
+
expect(processor.instance_variable_get(:@store).get("key")).to eq(nil)
|
97
|
+
end
|
98
|
+
it "will log an error if the method is not recognized" do
|
99
|
+
expect(processor.instance_variable_get(:@config).logger).to receive :error
|
100
|
+
processor.send(:process_message, put_message, "get")
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe '#should_fallback_update' do
|
105
|
+
it "will return true if the stream is disconnected for more than 120 seconds" do
|
106
|
+
processor.send(:set_disconnected)
|
107
|
+
future_time = Time.now + 200
|
108
|
+
expect(Time).to receive(:now).and_return(future_time)
|
109
|
+
value = processor.send(:should_fallback_update)
|
110
|
+
expect(value).to eq true
|
111
|
+
end
|
112
|
+
it "will return false otherwise" do
|
113
|
+
processor.send(:set_connected)
|
114
|
+
value = processor.send(:should_fallback_update)
|
115
|
+
expect(value).to eq false
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
metadata
CHANGED
@@ -1,153 +1,181 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ldclient-rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- LaunchDarkly
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.7'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.7'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.2'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.2'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: codeclimate-test-reporter
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
70
|
name: json
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
44
72
|
requirements:
|
45
|
-
- -
|
73
|
+
- - ~>
|
46
74
|
- !ruby/object:Gem::Version
|
47
75
|
version: '1.8'
|
48
76
|
type: :runtime
|
49
77
|
prerelease: false
|
50
78
|
version_requirements: !ruby/object:Gem::Requirement
|
51
79
|
requirements:
|
52
|
-
- -
|
80
|
+
- - ~>
|
53
81
|
- !ruby/object:Gem::Version
|
54
82
|
version: '1.8'
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
84
|
name: faraday
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
58
86
|
requirements:
|
59
|
-
- -
|
87
|
+
- - ~>
|
60
88
|
- !ruby/object:Gem::Version
|
61
89
|
version: '0.9'
|
62
90
|
type: :runtime
|
63
91
|
prerelease: false
|
64
92
|
version_requirements: !ruby/object:Gem::Requirement
|
65
93
|
requirements:
|
66
|
-
- -
|
94
|
+
- - ~>
|
67
95
|
- !ruby/object:Gem::Version
|
68
96
|
version: '0.9'
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: faraday-http-cache
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
72
100
|
requirements:
|
73
|
-
- -
|
101
|
+
- - ~>
|
74
102
|
- !ruby/object:Gem::Version
|
75
103
|
version: '0.4'
|
76
104
|
type: :runtime
|
77
105
|
prerelease: false
|
78
106
|
version_requirements: !ruby/object:Gem::Requirement
|
79
107
|
requirements:
|
80
|
-
- -
|
108
|
+
- - ~>
|
81
109
|
- !ruby/object:Gem::Version
|
82
110
|
version: '0.4'
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: thread_safe
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
86
114
|
requirements:
|
87
|
-
- -
|
115
|
+
- - ~>
|
88
116
|
- !ruby/object:Gem::Version
|
89
117
|
version: '0.3'
|
90
118
|
type: :runtime
|
91
119
|
prerelease: false
|
92
120
|
version_requirements: !ruby/object:Gem::Requirement
|
93
121
|
requirements:
|
94
|
-
- -
|
122
|
+
- - ~>
|
95
123
|
- !ruby/object:Gem::Version
|
96
124
|
version: '0.3'
|
97
125
|
- !ruby/object:Gem::Dependency
|
98
126
|
name: net-http-persistent
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|
100
128
|
requirements:
|
101
|
-
- -
|
129
|
+
- - ~>
|
102
130
|
- !ruby/object:Gem::Version
|
103
131
|
version: '2.9'
|
104
132
|
type: :runtime
|
105
133
|
prerelease: false
|
106
134
|
version_requirements: !ruby/object:Gem::Requirement
|
107
135
|
requirements:
|
108
|
-
- -
|
136
|
+
- - ~>
|
109
137
|
- !ruby/object:Gem::Version
|
110
138
|
version: '2.9'
|
111
139
|
- !ruby/object:Gem::Dependency
|
112
140
|
name: concurrent-ruby
|
113
141
|
requirement: !ruby/object:Gem::Requirement
|
114
142
|
requirements:
|
115
|
-
- -
|
143
|
+
- - ~>
|
116
144
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
145
|
+
version: 1.0.0
|
118
146
|
type: :runtime
|
119
147
|
prerelease: false
|
120
148
|
version_requirements: !ruby/object:Gem::Requirement
|
121
149
|
requirements:
|
122
|
-
- -
|
150
|
+
- - ~>
|
123
151
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
152
|
+
version: 1.0.0
|
125
153
|
- !ruby/object:Gem::Dependency
|
126
154
|
name: hashdiff
|
127
155
|
requirement: !ruby/object:Gem::Requirement
|
128
156
|
requirements:
|
129
|
-
- -
|
157
|
+
- - ~>
|
130
158
|
- !ruby/object:Gem::Version
|
131
159
|
version: '0.2'
|
132
160
|
type: :runtime
|
133
161
|
prerelease: false
|
134
162
|
version_requirements: !ruby/object:Gem::Requirement
|
135
163
|
requirements:
|
136
|
-
- -
|
164
|
+
- - ~>
|
137
165
|
- !ruby/object:Gem::Version
|
138
166
|
version: '0.2'
|
139
167
|
- !ruby/object:Gem::Dependency
|
140
168
|
name: ld-em-eventsource
|
141
169
|
requirement: !ruby/object:Gem::Requirement
|
142
170
|
requirements:
|
143
|
-
- -
|
171
|
+
- - ~>
|
144
172
|
- !ruby/object:Gem::Version
|
145
173
|
version: '0.2'
|
146
174
|
type: :runtime
|
147
175
|
prerelease: false
|
148
176
|
version_requirements: !ruby/object:Gem::Requirement
|
149
177
|
requirements:
|
150
|
-
- -
|
178
|
+
- - ~>
|
151
179
|
- !ruby/object:Gem::Version
|
152
180
|
version: '0.2'
|
153
181
|
description: Official LaunchDarkly SDK for Ruby
|
@@ -157,11 +185,17 @@ executables: []
|
|
157
185
|
extensions: []
|
158
186
|
extra_rdoc_files: []
|
159
187
|
files:
|
160
|
-
-
|
188
|
+
- .gitignore
|
189
|
+
- .hound.yml
|
190
|
+
- .rspec
|
191
|
+
- .rubocop.yml
|
192
|
+
- .simplecov
|
193
|
+
- CONTRIBUTING.md
|
161
194
|
- Gemfile
|
162
195
|
- LICENSE.txt
|
163
196
|
- README.md
|
164
197
|
- Rakefile
|
198
|
+
- circle.yml
|
165
199
|
- ldclient-rb.gemspec
|
166
200
|
- lib/ldclient-rb.rb
|
167
201
|
- lib/ldclient-rb/config.rb
|
@@ -170,7 +204,16 @@ files:
|
|
170
204
|
- lib/ldclient-rb/store.rb
|
171
205
|
- lib/ldclient-rb/stream.rb
|
172
206
|
- lib/ldclient-rb/version.rb
|
173
|
-
|
207
|
+
- spec/config_spec.rb
|
208
|
+
- spec/fixtures/feature.json
|
209
|
+
- spec/fixtures/user.json
|
210
|
+
- spec/ldclient_spec.rb
|
211
|
+
- spec/newrelic_spec.rb
|
212
|
+
- spec/spec_helper.rb
|
213
|
+
- spec/store_spec.rb
|
214
|
+
- spec/stream_spec.rb
|
215
|
+
- spec/version_spec.rb
|
216
|
+
homepage: https://github.com/launchdarkly/ruby-client
|
174
217
|
licenses:
|
175
218
|
- Apache 2.0
|
176
219
|
metadata: {}
|
@@ -180,19 +223,27 @@ require_paths:
|
|
180
223
|
- lib
|
181
224
|
required_ruby_version: !ruby/object:Gem::Requirement
|
182
225
|
requirements:
|
183
|
-
- -
|
226
|
+
- - '>='
|
184
227
|
- !ruby/object:Gem::Version
|
185
228
|
version: '0'
|
186
229
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
187
230
|
requirements:
|
188
|
-
- -
|
231
|
+
- - '>='
|
189
232
|
- !ruby/object:Gem::Version
|
190
233
|
version: '0'
|
191
234
|
requirements: []
|
192
235
|
rubyforge_project:
|
193
|
-
rubygems_version: 2.
|
236
|
+
rubygems_version: 2.5.0
|
194
237
|
signing_key:
|
195
238
|
specification_version: 4
|
196
239
|
summary: LaunchDarkly SDK for Ruby
|
197
|
-
test_files:
|
198
|
-
|
240
|
+
test_files:
|
241
|
+
- spec/config_spec.rb
|
242
|
+
- spec/fixtures/feature.json
|
243
|
+
- spec/fixtures/user.json
|
244
|
+
- spec/ldclient_spec.rb
|
245
|
+
- spec/newrelic_spec.rb
|
246
|
+
- spec/spec_helper.rb
|
247
|
+
- spec/store_spec.rb
|
248
|
+
- spec/stream_spec.rb
|
249
|
+
- spec/version_spec.rb
|