prefab-cloud-ruby 0.0.10 → 0.0.11

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: e4ae024730e476fe81b2d5e1130bb13e0dfee4f6
4
- data.tar.gz: aa819d0f9c64ffcd8826751d176133fce7a1a57e
3
+ metadata.gz: 005df99ad579e508b3b7a826ef11884b2b6495a9
4
+ data.tar.gz: b36bfa20a612c17628c12b57c01cde87dbfa25dc
5
5
  SHA512:
6
- metadata.gz: c10adec4b6866caee1045830c4ad45f2f36b20011e3ed8c3d4670331e62f0b65b3b57bd91c0c19dbe9ce4e164787cc5717d622fbe8cbe6cbbca21e03e54bfcf0
7
- data.tar.gz: e75c1d4c816f403e974e7b1f105d233fa1578e667d4cfaa804daea81e9ba633478cdba059dab2705ddc45721b3ee734edf1dd2d52dbb1990cc16bd4f28ef203b
6
+ metadata.gz: 7a60d508e8469950990c7d79d1095bc4c253f02a467fc50727d8cfd56263db3d5821e0fe6aa6f93e95ae2bb0782b7106a539203b4534b403eb21e4021b4ebe50
7
+ data.tar.gz: '0944f4059e6b9ec37fd652bd7c457e149a5facfc3426334af8b63001c2988ca3de97ea562dd4c10a3c1022e72c3c4fd35e1730a7fe0e23c29012ad6f426b3bf8'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.10
1
+ 0.0.11
@@ -19,12 +19,16 @@ module Prefab
19
19
  @config_resolver.get(prop)
20
20
  end
21
21
 
22
- def set(key, config_value, namespace = nil)
22
+ def upsert(key, config_value, namespace = nil, previous_key = nil)
23
23
  raise "key must not contain ':' set namespaces separately" if key.include? ":"
24
24
  raise "namespace must not contain ':'" if namespace&.include?(":")
25
25
  config_delta = Prefab::ConfigClient.value_to_delta(key, config_value, namespace)
26
- Retry.it method(:stub_with_timeout), :upsert, config_delta, @timeout, method(:reset)
26
+ upsert_req = Prefab::UpsertRequest.new(config_delta: config_delta)
27
+ upsert_req.previous_key = previous_key if previous_key&.present?
28
+
29
+ Retry.it method(:stub_with_timeout), :upsert, upsert_req, @timeout, method(:reset)
27
30
  @config_loader.set(config_delta)
31
+ @config_loader.rm(previous_key) if previous_key&.present?
28
32
  end
29
33
 
30
34
  def reset
@@ -18,7 +18,15 @@ module Prefab
18
18
  end
19
19
 
20
20
  def set(delta)
21
- @api_config[delta.key] = delta
21
+ if delta.value.nil?
22
+ @api_config.delete(delta.key)
23
+ else
24
+ @api_config[delta.key] = delta
25
+ end
26
+ end
27
+
28
+ def rm(key)
29
+ @api_config.delete key
22
30
  end
23
31
 
24
32
  def get_api_deltas
@@ -64,13 +72,13 @@ module Prefab
64
72
  def value_from(raw)
65
73
  case raw
66
74
  when String
67
- {string: raw}
75
+ { string: raw }
68
76
  when Integer
69
- {int: raw}
77
+ { int: raw }
70
78
  when TrueClass, FalseClass
71
- {bool: raw}
79
+ { bool: raw }
72
80
  when Float
73
- {double: raw}
81
+ { double: raw }
74
82
  end
75
83
  end
76
84
  end
@@ -7,7 +7,7 @@ module Prefab
7
7
  end
8
8
 
9
9
  def upsert(feature_obj)
10
- @base_client.config_client.set(feature_config_name(feature_obj.feature), Prefab::ConfigValue.new(feature_flag: feature_obj))
10
+ @base_client.config_client.upsert(feature_config_name(feature_obj.feature), Prefab::ConfigValue.new(feature_flag: feature_obj))
11
11
  end
12
12
 
13
13
  def feature_is_on?(feature_name)
@@ -46,7 +46,7 @@ module Prefab
46
46
  end
47
47
 
48
48
  def feature_config_name(feature)
49
- "Feature.#{feature}"
49
+ feature
50
50
  end
51
51
 
52
52
  end
data/lib/prefab/retry.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  class Retry
2
- DEFAULT_TIMEOUT = 10
3
2
  MAX_SLEEP_SEC = 10
4
3
  BASE_SLEEP_SEC = 0.5
5
4
 
@@ -13,13 +12,14 @@ class Retry
13
12
  attempts += 1
14
13
  return stub_factory.call.send(rpc, req)
15
14
  rescue => exception
15
+
16
16
  if Time.now - start_time > timeout
17
17
  raise exception
18
18
  end
19
-
20
19
  sleep_seconds = [BASE_SLEEP_SEC * (2 ** (attempts - 1)), MAX_SLEEP_SEC].min
21
20
  sleep_seconds = sleep_seconds * (0.5 * (1 + rand()))
22
21
  sleep_seconds = [BASE_SLEEP_SEC, sleep_seconds].max
22
+ puts "Sleep #{sleep_seconds} and Reset"
23
23
  sleep sleep_seconds
24
24
  reset.call
25
25
  retry
data/lib/prefab_pb.rb CHANGED
@@ -26,6 +26,11 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
26
26
  add_message "prefab.ConfigDeltas" do
27
27
  repeated :deltas, :message, 1, "prefab.ConfigDelta"
28
28
  end
29
+ add_message "prefab.UpsertRequest" do
30
+ optional :account_id, :int64, 1
31
+ optional :config_delta, :message, 2, "prefab.ConfigDelta"
32
+ optional :previous_key, :string, 3
33
+ end
29
34
  add_message "prefab.LimitResponse" do
30
35
  optional :passed, :bool, 1
31
36
  optional :expires_at, :int64, 2
@@ -61,7 +66,6 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
61
66
  value :MAXIMUM, 2
62
67
  end
63
68
  add_message "prefab.FeatureFlag" do
64
- optional :feature, :string, 2
65
69
  optional :pct, :double, 3
66
70
  repeated :whitelisted, :string, 4
67
71
  end
@@ -87,15 +91,6 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
87
91
  repeated :flags, :message, 1, "prefab.FeatureFlag"
88
92
  optional :cache_expiry, :int64, 2
89
93
  end
90
- add_message "prefab.BucketWrite" do
91
- optional :tokenBucket, :message, 1, "prefab.TokenBucket"
92
- optional :bucket, :string, 2
93
- end
94
- add_message "prefab.TokenBucket" do
95
- optional :current_value, :int64, 1
96
- optional :time_key, :int64, 2
97
- repeated :expiries, :int64, 3
98
- end
99
94
  add_message "prefab.BufferedRequest" do
100
95
  optional :account_id, :int64, 1
101
96
  optional :method, :string, 2
@@ -127,6 +122,7 @@ module Prefab
127
122
  ConfigDelta = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.ConfigDelta").msgclass
128
123
  ConfigValue = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.ConfigValue").msgclass
129
124
  ConfigDeltas = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.ConfigDeltas").msgclass
125
+ UpsertRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.UpsertRequest").msgclass
130
126
  LimitResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.LimitResponse").msgclass
131
127
  LimitResponse::LimitPolicyNames = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.LimitResponse.LimitPolicyNames").enummodule
132
128
  LimitRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.LimitRequest").msgclass
@@ -136,8 +132,6 @@ module Prefab
136
132
  LimitDefinition::SafetyLevel = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.LimitDefinition.SafetyLevel").enummodule
137
133
  LimitDefinitions = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.LimitDefinitions").msgclass
138
134
  FeatureFlags = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.FeatureFlags").msgclass
139
- BucketWrite = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.BucketWrite").msgclass
140
- TokenBucket = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.TokenBucket").msgclass
141
135
  BufferedRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.BufferedRequest").msgclass
142
136
  BatchRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.BatchRequest").msgclass
143
137
  OnFailure = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.OnFailure").enummodule
@@ -29,7 +29,7 @@ module Prefab
29
29
  self.service_name = 'prefab.ConfigService'
30
30
 
31
31
  rpc :GetConfig, ConfigServicePointer, stream(ConfigDeltas)
32
- rpc :Upsert, ConfigDelta, ConfigServicePointer
32
+ rpc :Upsert, UpsertRequest, ConfigServicePointer
33
33
  end
34
34
 
35
35
  Stub = Service.rpc_stub_class
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: prefab-cloud-ruby 0.0.10 ruby lib
5
+ # stub: prefab-cloud-ruby 0.0.11 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "prefab-cloud-ruby".freeze
9
- s.version = "0.0.10"
9
+ s.version = "0.0.11"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Jeff Dwyer".freeze]
14
- s.date = "2018-01-12"
14
+ s.date = "2018-02-02"
15
15
  s.description = "RateLimits & Config as a service".freeze
16
16
  s.email = "jdwyer@prefab.cloud".freeze
17
17
  s.extra_rdoc_files = [
@@ -33,6 +33,18 @@ class TestConfigLoader < Minitest::Test
33
33
  assert_equal deltas, @loader.get_api_deltas
34
34
  end
35
35
 
36
+ def test_loading_tombstones_removes_entries
37
+ val = Prefab::ConfigValue.new(int: 456)
38
+ delta = Prefab::ConfigDelta.new(key: "sample_int", value: val)
39
+ @loader.set(delta)
40
+
41
+ delta = Prefab::ConfigDelta.new(key: "sample_int", value: nil)
42
+ @loader.set(delta)
43
+
44
+ deltas = Prefab::ConfigDeltas.new
45
+ assert_equal deltas, @loader.get_api_deltas
46
+ end
47
+
36
48
  private
37
49
 
38
50
  def should_be(type, value, key)
@@ -5,60 +5,60 @@ class TestFeatureFlagClient < Minitest::Test
5
5
  def test_pct
6
6
  client = Prefab::FeatureFlagClient.new(MockBaseClient.new)
7
7
  Prefab::FeatureFlagClient.send(:public, :is_on?)
8
-
9
- flag = Prefab::FeatureFlag.new(feature: "FlagName", pct: 0.5)
8
+ feature = "FlagName"
9
+ flag = Prefab::FeatureFlag.new( pct: 0.5)
10
10
 
11
11
  assert_equal false,
12
- client.is_on?(flag.feature, "hashes high", [], flag)
12
+ client.is_on?(feature, "hashes high", [], flag)
13
13
 
14
14
  assert_equal true,
15
- client.is_on?(flag.feature, "hashes low", [], flag)
15
+ client.is_on?(feature, "hashes low", [], flag)
16
16
  end
17
17
 
18
18
 
19
19
  def test_off
20
20
  client = Prefab::FeatureFlagClient.new(MockBaseClient.new)
21
21
  Prefab::FeatureFlagClient.send(:public, :is_on?)
22
-
23
- flag = Prefab::FeatureFlag.new(feature: "FlagName", pct: 0)
22
+ feature = "FlagName"
23
+ flag = Prefab::FeatureFlag.new(pct: 0)
24
24
 
25
25
  assert_equal false,
26
- client.is_on?(flag.feature, "hashes high", [], flag)
26
+ client.is_on?(feature, "hashes high", [], flag)
27
27
 
28
28
  assert_equal false,
29
- client.is_on?(flag.feature, "hashes low", [], flag)
29
+ client.is_on?(feature, "hashes low", [], flag)
30
30
  end
31
31
 
32
32
 
33
33
  def test_on
34
34
  client = Prefab::FeatureFlagClient.new(MockBaseClient.new)
35
35
  Prefab::FeatureFlagClient.send(:public, :is_on?)
36
-
37
- flag = Prefab::FeatureFlag.new(feature: "FlagName", pct: 1)
36
+ feature = "FlagName"
37
+ flag = Prefab::FeatureFlag.new(pct: 1)
38
38
 
39
39
  assert_equal true,
40
- client.is_on?(flag.feature, "hashes high", [], flag)
40
+ client.is_on?(feature, "hashes high", [], flag)
41
41
 
42
42
  assert_equal true,
43
- client.is_on?(flag.feature, "hashes low", [], flag)
43
+ client.is_on?(feature, "hashes low", [], flag)
44
44
  end
45
45
 
46
46
  def test_whitelist
47
47
  client = Prefab::FeatureFlagClient.new(MockBaseClient.new)
48
48
  Prefab::FeatureFlagClient.send(:public, :is_on?)
49
-
50
- flag = Prefab::FeatureFlag.new(feature: "FlagName", pct: 0, whitelisted: ["beta", "user:1", "user:3"])
49
+ feature = "FlagName"
50
+ flag = Prefab::FeatureFlag.new(pct: 0, whitelisted: ["beta", "user:1", "user:3"])
51
51
 
52
52
  assert_equal false,
53
- client.is_on?(flag.feature, "anything", [], flag)
53
+ client.is_on?(feature, "anything", [], flag)
54
54
  assert_equal true,
55
- client.is_on?(flag.feature, "anything", ["beta"], flag)
55
+ client.is_on?(feature, "anything", ["beta"], flag)
56
56
  assert_equal true,
57
- client.is_on?(flag.feature, "anything", ["alpha", "beta"], flag)
57
+ client.is_on?(feature, "anything", ["alpha", "beta"], flag)
58
58
  assert_equal true,
59
- client.is_on?(flag.feature, "anything", ["alpha", "user:1"], flag)
59
+ client.is_on?(feature, "anything", ["alpha", "user:1"], flag)
60
60
  assert_equal false,
61
- client.is_on?(flag.feature, "anything", ["alpha", "user:2"], flag)
61
+ client.is_on?(feature, "anything", ["alpha", "user:2"], flag)
62
62
 
63
63
  end
64
64
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prefab-cloud-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Dwyer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-12 00:00:00.000000000 Z
11
+ date: 2018-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grpc