ldclient-rb 0.1.0 → 0.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 80585fb99df9069ece05ebb56d7bb8368daba554
4
- data.tar.gz: 4e159d25726a447551f0b40dd53796b4a919027b
3
+ metadata.gz: 2a73519d15b98bcb02f0fb8e111d301839fb8401
4
+ data.tar.gz: 3a6a476a10a497bc7695028f1a197c91069f07a0
5
5
  SHA512:
6
- metadata.gz: 2664a3dc182dea123051ab19f34ef094c189c9f07bed2793de3681c5d11d229b4e86d5d3a7c276406023250b69293024432085f2cc03425770ee5fcc4c514ff2
7
- data.tar.gz: 92711ce5b40245a1b4c153c069f0075e2ddde2a89e3769b8f00677c0c253de4b51c91f944af665b877d978aa72dd8d1db79a194fd9c4fbf88212c5a89c17457b
6
+ metadata.gz: 451e8ea84cb0be1a56d2b7050fe92929d64d9cacf2e2396ca1e0f953dfcfeff3df8b9dc7e89c5e849bb36463a40b369b722e26a73fb8f1dc82be49dd73f04463
7
+ data.tar.gz: 09a5bc459d836a586c5996e61e80acc31475db8d35db2466c11f020570df00a7ab07cbc87651270a35087c569dc8b666e89326418fc121c28b2de96efe1017cd
data/.gitignore CHANGED
@@ -1,6 +1,5 @@
1
1
  /.bundle/
2
2
  /.yardoc
3
- /Gemfile.lock
4
3
  /_yardoc/
5
4
  /coverage/
6
5
  /doc/
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in launchdarkly.gemspec
3
+ # Specify your gem's dependencies in ldclient-rb.gemspec
4
4
  gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,30 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ ldclient-rb (0.1.0)
5
+ faraday (~> 0.9)
6
+ faraday-http-cache (~> 0.4)
7
+ json (~> 1.8)
8
+ net-http-persistent (~> 2.9.4)
9
+ thread_safe (~> 0.3)
10
+
11
+ GEM
12
+ remote: https://rubygems.org/
13
+ specs:
14
+ faraday (0.9.1)
15
+ multipart-post (>= 1.2, < 3)
16
+ faraday-http-cache (0.4.2)
17
+ faraday (~> 0.8)
18
+ json (1.8.2)
19
+ multipart-post (2.0.0)
20
+ net-http-persistent (2.9.4)
21
+ rake (10.4.2)
22
+ thread_safe (0.3.4)
23
+
24
+ PLATFORMS
25
+ ruby
26
+
27
+ DEPENDENCIES
28
+ bundler (~> 1.7)
29
+ ldclient-rb!
30
+ rake (~> 10.0)
data/ldclient-rb.gemspec CHANGED
@@ -25,4 +25,5 @@ Gem::Specification.new do |spec|
25
25
  spec.add_runtime_dependency "faraday", "~> 0.9"
26
26
  spec.add_runtime_dependency "faraday-http-cache", "~> 0.4"
27
27
  spec.add_runtime_dependency "thread_safe", "~> 0.3"
28
+ spec.add_runtime_dependency "net-http-persistent", "~> 2.9.4"
28
29
  end
@@ -3,10 +3,12 @@ require 'json'
3
3
  require 'digest/sha1'
4
4
  require 'thread'
5
5
  require 'logger'
6
+ require 'net/http/persistent'
7
+ require 'benchmark'
6
8
 
7
9
  module LaunchDarkly
8
10
 
9
- BUILTINS = [:key, :ip, :country, :email, :firstName, :lastName, :avatar, :name]
11
+ BUILTINS = [:key, :ip, :country, :email, :firstName, :lastName, :avatar, :name, :anonymous]
10
12
 
11
13
  #
12
14
  # A client for the LaunchDarkly API. Client instances are thread-safe. Users
@@ -32,7 +34,7 @@ module LaunchDarkly
32
34
  @client = Faraday.new do |builder|
33
35
  builder.use :http_cache, store: @config.store
34
36
 
35
- builder.adapter Faraday.default_adapter
37
+ builder.adapter :net_http_persistent
36
38
  end
37
39
  @offline = false
38
40
 
@@ -51,15 +53,16 @@ module LaunchDarkly
51
53
 
52
54
 
53
55
  if !events.empty?()
54
- res =
55
- @client.post (@config.base_uri + "/api/events/bulk") do |req|
56
- req.headers['Authorization'] = 'api_key ' + @api_key
57
- req.headers['User-Agent'] = 'RubyClient/' + LaunchDarkly::VERSION
58
- req.headers['Content-Type'] = 'application/json'
59
- req.body = events.to_json
60
- req.options.timeout = @config.read_timeout
61
- req.options.open_timeout = @config.connect_timeout
62
- end
56
+ res = log_timings("Flush events") {
57
+ next @client.post (@config.base_uri + "/api/events/bulk") do |req|
58
+ req.headers['Authorization'] = 'api_key ' + @api_key
59
+ req.headers['User-Agent'] = 'RubyClient/' + LaunchDarkly::VERSION
60
+ req.headers['Content-Type'] = 'application/json'
61
+ req.body = events.to_json
62
+ req.options.timeout = @config.read_timeout
63
+ req.options.open_timeout = @config.connect_timeout
64
+ end
65
+ }
63
66
  if res.status != 200
64
67
  @config.logger.error("[LDClient] Unexpected status code while processing events: #{res.status}")
65
68
  end
@@ -75,12 +78,16 @@ module LaunchDarkly
75
78
 
76
79
  sleep(@config.flush_interval)
77
80
  rescue Exception => exn
78
- @config.logger.error("[LDClient] Unexpected exception in create_worker: #{exn.message}")
81
+ @config.logger.error("[LDClient] Unexpected exception in create_worker: #{exn.inspect} #{exn.to_s}\n\t#{exn.backtrace.join("\n\t")}")
79
82
  end
80
83
  end
81
84
  end
82
85
  end
83
86
 
87
+ def get_flag?(key, user, default=false)
88
+ toggle?(key, user, default)
89
+ end
90
+
84
91
  #
85
92
  # Calculates the value of a feature flag for a given user. At a minimum, the user hash
86
93
  # should contain a +:key+ .
@@ -111,7 +118,7 @@ module LaunchDarkly
111
118
  # @param default=false [Boolean] the default value of the flag
112
119
  #
113
120
  # @return [Boolean] whether or not the flag should be enabled, or the default value if the flag is disabled on the LaunchDarkly control panel
114
- def get_flag?(key, user, default=false)
121
+ def toggle?(key, user, default=false)
115
122
  begin
116
123
  if @offline
117
124
  return default
@@ -121,7 +128,7 @@ module LaunchDarkly
121
128
  add_event({:kind => 'feature', :key => key, :user => user, :value => value})
122
129
  return value
123
130
  rescue StandardError => error
124
- @config.logger.error("[LDClient] Unhandled exception in get_flag: #{error.message}")
131
+ @config.logger.error("[LDClient] Unhandled exception in get_flag: (#{error.class.name}) #{error.to_s}\n\t#{error.backtrace.join("\n\t")}")
125
132
  default
126
133
  end
127
134
  end
@@ -182,13 +189,14 @@ module LaunchDarkly
182
189
  return default
183
190
  end
184
191
 
185
- res =
186
- @client.get (@config.base_uri + '/api/eval/features/' + key) do |req|
187
- req.headers['Authorization'] = 'api_key ' + @api_key
188
- req.headers['User-Agent'] = 'RubyClient/' + LaunchDarkly::VERSION
189
- req.options.timeout = @config.read_timeout
190
- req.options.open_timeout = @config.connect_timeout
191
- end
192
+ res = log_timings("Flush events") {
193
+ next @client.get (@config.base_uri + '/api/eval/features/' + key) do |req|
194
+ req.headers['Authorization'] = 'api_key ' + @api_key
195
+ req.headers['User-Agent'] = 'RubyClient/' + LaunchDarkly::VERSION
196
+ req.options.timeout = @config.read_timeout
197
+ req.options.open_timeout = @config.connect_timeout
198
+ end
199
+ }
192
200
 
193
201
  if res.status == 401
194
202
  @config.logger.error("[LDClient] Invalid API key")
@@ -315,8 +323,27 @@ module LaunchDarkly
315
323
 
316
324
  end
317
325
 
318
- private :add_event, :get_flag_int, :param_for_user, :match_target?, :match_user?, :match_variation?, :evaluate, :create_worker
326
+ def log_timings(label, &block)
327
+ if !@config.logger.debug?
328
+ return block.call
329
+ end
330
+ res = nil
331
+ exn = nil
332
+ bench = Benchmark.measure {
333
+ begin
334
+ res = block.call
335
+ rescue Exception => e
336
+ exn = e
337
+ end
338
+ }
339
+ @config.logger.debug { "[LDClient] #{label} timing: #{bench}".chomp }
340
+ if exn
341
+ raise exn
342
+ end
343
+ return res
344
+ end
319
345
 
346
+ private :add_event, :get_flag_int, :param_for_user, :match_target?, :match_user?, :match_variation?, :evaluate, :create_worker, :log_timings
320
347
 
321
348
  end
322
349
  end
@@ -1,3 +1,3 @@
1
1
  module LaunchDarkly
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ldclient-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Catamorphic Co
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-07 00:00:00.000000000 Z
11
+ date: 2015-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0.3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: net-http-persistent
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 2.9.4
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 2.9.4
97
111
  description: Official LaunchDarkly SDK for Ruby
98
112
  email:
99
113
  - team@catamorphic.com
@@ -103,6 +117,7 @@ extra_rdoc_files: []
103
117
  files:
104
118
  - ".gitignore"
105
119
  - Gemfile
120
+ - Gemfile.lock
106
121
  - LICENSE.txt
107
122
  - README.md
108
123
  - Rakefile