prefab-cloud-ruby 0.13.0 → 0.13.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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -0
  3. data/Gemfile +4 -11
  4. data/Gemfile.lock +32 -52
  5. data/README.md +1 -19
  6. data/Rakefile +0 -1
  7. data/VERSION +1 -1
  8. data/compile_protos.sh +0 -3
  9. data/lib/prefab/auth_interceptor.rb +0 -1
  10. data/lib/prefab/cancellable_interceptor.rb +0 -1
  11. data/lib/prefab/client.rb +36 -49
  12. data/lib/prefab/config_client.rb +73 -145
  13. data/lib/prefab/config_loader.rb +13 -98
  14. data/lib/prefab/config_resolver.rb +49 -56
  15. data/lib/prefab/feature_flag_client.rb +11 -129
  16. data/lib/prefab/logger_client.rb +8 -10
  17. data/lib/prefab/murmer3.rb +0 -1
  18. data/lib/prefab/noop_cache.rb +0 -1
  19. data/lib/prefab/noop_stats.rb +0 -1
  20. data/lib/prefab/ratelimit_client.rb +0 -1
  21. data/lib/prefab-cloud-ruby.rb +0 -10
  22. data/lib/prefab_pb.rb +132 -214
  23. data/lib/prefab_services_pb.rb +6 -35
  24. data/prefab-cloud-ruby.gemspec +11 -30
  25. data/test/.prefab.test.config.yaml +1 -27
  26. data/test/test_config_loader.rb +25 -39
  27. data/test/test_config_resolver.rb +38 -134
  28. data/test/test_feature_flag_client.rb +35 -277
  29. data/test/test_helper.rb +4 -70
  30. data/test/test_logger.rb +29 -23
  31. metadata +15 -70
  32. data/.github/workflows/ruby.yml +0 -39
  33. data/.tool-versions +0 -1
  34. data/CODEOWNERS +0 -1
  35. data/lib/prefab/config_helper.rb +0 -29
  36. data/lib/prefab/error.rb +0 -6
  37. data/lib/prefab/errors/initialization_timeout_error.rb +0 -13
  38. data/lib/prefab/errors/invalid_api_key_error.rb +0 -19
  39. data/lib/prefab/errors/missing_default_error.rb +0 -13
  40. data/lib/prefab/internal_logger.rb +0 -29
  41. data/lib/prefab/options.rb +0 -82
  42. data/run_test_harness_server.sh +0 -8
  43. data/test/harness_server.rb +0 -64
  44. data/test/test_client.rb +0 -91
  45. data/test/test_config_client.rb +0 -56
@@ -1,7 +1,5 @@
1
- # frozen_string_literal: true
2
1
  module Prefab
3
2
  class FeatureFlagClient
4
- include Prefab::ConfigHelper
5
3
  MAX_32_FLOAT = 4294967294.0
6
4
 
7
5
  def initialize(base_client)
@@ -16,154 +14,38 @@ module Prefab
16
14
  feature_is_on_for?(feature_name, nil)
17
15
  end
18
16
 
19
- def feature_is_on_for?(feature_name, lookup_key, attributes: {})
17
+ def feature_is_on_for?(feature_name, lookup_key, attributes: [])
20
18
  @base_client.stats.increment("prefab.featureflag.on", tags: ["feature:#{feature_name}"])
21
19
 
22
- return is_on?(_get(feature_name, lookup_key, attributes, default: false))
23
- end
24
-
25
- def get(feature_name, lookup_key=nil, attributes={}, default: false)
26
- variant = _get(feature_name, lookup_key, attributes, default: default)
27
-
28
- value_of_variant_or_nil(variant, default)
20
+ feature_obj = @base_client.config_client.get(feature_name)
21
+ return is_on?(feature_name, lookup_key, attributes, feature_obj)
29
22
  end
30
23
 
31
24
  private
32
25
 
33
- def value_of_variant_or_nil(variant_maybe, default)
34
- if variant_maybe.nil?
35
- default != Prefab::Client::NO_DEFAULT_PROVIDED ? default : nil
36
- else
37
- value_of_variant(variant_maybe)
38
- end
39
- end
40
-
41
- def _get(feature_name, lookup_key=nil, attributes={}, default:)
42
- feature_obj = @base_client.config_client.get(feature_name, default)
43
- config_obj = @base_client.config_client.get_config_obj(feature_name)
44
-
45
- return nil if feature_obj.nil? || config_obj.nil?
46
-
47
- if feature_obj == !!feature_obj
48
- return feature_obj
49
- end
50
-
51
- variants = config_obj.variants
52
- get_variant(feature_name, lookup_key, attributes, feature_obj, variants)
53
- end
54
-
55
- def is_on?(variant)
56
- if variant.nil?
26
+ def is_on?(feature_name, lookup_key, attributes, feature_obj)
27
+ if feature_obj.nil?
57
28
  return false
58
29
  end
59
30
 
60
- if variant == !!variant
61
- return variant
62
- end
63
-
64
- variant.bool
65
- rescue
66
- @base_client.log.info("is_on? methods only work for boolean feature flags variants. This feature flags variant is '#{variant}'. Returning false")
67
- false
68
- end
69
-
70
- def get_variant(feature_name, lookup_key, attributes, feature_obj, variants)
71
- if !feature_obj.active
72
- return get_variant_obj(variants, feature_obj.inactive_variant_idx)
73
- end
74
-
75
- #default to inactive
76
- variant_weights = [Prefab::VariantWeight.new(variant_idx: feature_obj.inactive_variant_idx, weight: 1)]
77
-
78
- # if rules.match
79
- feature_obj.rules.each do |rule|
80
- if criteria_match?(rule.criteria, lookup_key, attributes)
81
- variant_weights = rule.variant_weights
82
- break
83
- end
31
+ attributes << lookup_key if lookup_key
32
+ if (attributes & feature_obj.whitelisted).size > 0
33
+ return true
84
34
  end
85
35
 
86
- percent_through_distribution = rand()
87
36
  if lookup_key
88
- percent_through_distribution = get_user_pct(feature_name, lookup_key)
37
+ return get_user_pct(feature_name, lookup_key) < feature_obj.pct
89
38
  end
90
39
 
91
- variant_idx = get_variant_idx_from_weights(variant_weights, percent_through_distribution, feature_name)
92
-
93
- return get_variant_obj(variants, variant_idx)
94
- end
95
-
96
- def get_variant_obj(variants, idx)
97
- # our array is 0 based, but the idx are 1 based so the protos are clearly set
98
- return variants[idx - 1] if variants.length >= idx
99
- nil
100
- end
101
-
102
- def get_variant_idx_from_weights(variant_weights, percent_through_distribution, feature_name)
103
- distrubution_space = variant_weights.inject(0) { |sum, v| sum + v.weight }
104
- bucket = distrubution_space * percent_through_distribution
105
- sum = 0
106
- variant_weights.each do |variant_weight|
107
- if bucket < sum + variant_weight.weight
108
- return variant_weight.variant_idx
109
- else
110
- sum += variant_weight.weight
111
- end
112
- end
113
- # variants didn't add up to 100%
114
- @base_client.log.info("Variants of #{feature_name} did not add to 100%")
115
- return variant_weights.last.variant_idx
40
+ return feature_obj.pct > rand()
116
41
  end
117
42
 
118
43
  def get_user_pct(feature, lookup_key)
119
- to_hash = "#{@base_client.project_id}#{feature}#{lookup_key}"
44
+ to_hash = "#{@base_client.account_id}#{feature}#{lookup_key}"
120
45
  int_value = Murmur3.murmur3_32(to_hash)
121
46
  int_value / MAX_32_FLOAT
122
47
  end
123
48
 
124
- # def criteria_match?(rule, lookup_key, attributes)
125
- #
126
- # end
127
- def criteria_match?(criteria, lookup_key, attributes)
128
- if criteria.operator == :ALWAYS_TRUE
129
- return true
130
- elsif criteria.operator == :LOOKUP_KEY_IN
131
- return criteria.values.include?(lookup_key)
132
- elsif criteria.operator == :LOOKUP_KEY_NOT_IN
133
- return !criteria.values.include?(lookup_key)
134
- elsif criteria.operator == :IN_SEG
135
- return segment_matches(criteria.values, lookup_key, attributes).any?
136
- elsif criteria.operator == :NOT_IN_SEG
137
- return segment_matches(criteria.values, lookup_key, attributes).none?
138
- elsif criteria.operator == :PROP_IS_ONE_OF
139
- return criteria.values.include?(attributes[criteria.property]) || criteria.values.include?(attributes[criteria.property.to_sym])
140
- elsif criteria.operator == :PROP_IS_NOT_ONE_OF
141
- return !(criteria.values.include?(attributes[criteria.property]) || criteria.values.include?(attributes[criteria.property.to_sym]))
142
- end
143
- @base_client.log.info("Unknown Operator")
144
- false
145
- end
146
-
147
- # evaluate each segment key and return whether each one matches
148
- # there should be an associated segment available as a standard config obj
149
- def segment_matches(segment_keys, lookup_key, attributes)
150
- segment_keys.map do |segment_key|
151
- segment = @base_client.config_client.get(segment_key)
152
- if segment.nil?
153
- @base_client.log.info("Missing Segment")
154
- false
155
- else
156
- segment_match?(segment, lookup_key, attributes)
157
- end
158
- end
159
- end
160
-
161
- # does a given segment match?
162
- def segment_match?(segment, lookup_key, attributes)
163
- segment.criterion.map do |criteria|
164
- criteria_match?(criteria, lookup_key, attributes)
165
- end.any?
166
- end
167
49
  end
168
50
  end
169
51
 
@@ -1,10 +1,8 @@
1
- # frozen_string_literal: true
2
1
  module Prefab
3
2
  class LoggerClient < Logger
4
3
 
5
- SEP = "."
6
- BASE = "log_level"
7
- UNKNOWN = "unknown"
4
+ SEP = ".".freeze
5
+ BASE = "log_level".freeze
8
6
 
9
7
  def initialize(logdev, formatter: nil)
10
8
  super(logdev)
@@ -109,10 +107,10 @@ module Prefab
109
107
 
110
108
  # Find the closest match to 'log_level.path' in config
111
109
  def level_of(path)
112
- closest_log_level_match = @config_client.get(BASE, :warn)
110
+ closest_log_level_match = @config_client.get(BASE) || :warn
113
111
  path.split(SEP).inject([BASE]) do |memo, n|
114
112
  memo << n
115
- val = @config_client.get(memo.join(SEP), nil)
113
+ val = @config_client.get(memo.join(SEP))
116
114
  unless val.nil?
117
115
  closest_log_level_match = val
118
116
  end
@@ -124,12 +122,12 @@ module Prefab
124
122
  # sanitize & clean the path of the caller so the key
125
123
  # looks like log_level.app.models.user
126
124
  def get_path(absolute_path, base_label)
127
- path = (absolute_path || UNKNOWN).dup
125
+ path = absolute_path + ""
128
126
  path.slice! Dir.pwd
129
127
 
130
128
  path.gsub!(/.*?(?=\/lib\/)/im, "")
131
129
 
132
- path = path.gsub("/", SEP).gsub(".rb", "") + SEP + base_label
130
+ path = "#{path.gsub("/", SEP).gsub(".rb", "")}#{SEP}#{base_label}"
133
131
  path.slice! ".lib"
134
132
  path.slice! SEP
135
133
  path
@@ -143,8 +141,8 @@ module Prefab
143
141
  # StubConfigClient to be used while config client initializes
144
142
  # since it may log
145
143
  class BootstrappingConfigClient
146
- def get(key, default=nil)
147
- ENV["PREFAB_LOG_CLIENT_BOOTSTRAP_LOG_LEVEL"] || default
144
+ def get(key)
145
+ ENV["PREFAB_LOG_CLIENT_BOOTSTRAP_LOG_LEVEL"] || :info
148
146
  end
149
147
  end
150
148
  end
@@ -1,4 +1,3 @@
1
- # frozen_string_literal: true
2
1
  class Murmur3
3
2
  ## MurmurHash3 was written by Austin Appleby, and is placed in the public
4
3
  ## domain. The author hereby disclaims copyright to this source code.
@@ -1,4 +1,3 @@
1
- # frozen_string_literal: true
2
1
  module Prefab
3
2
  class NoopCache
4
3
  def fetch(name, opts, &method)
@@ -1,4 +1,3 @@
1
- # frozen_string_literal: true
2
1
  module Prefab
3
2
 
4
3
  class NoopStats
@@ -1,4 +1,3 @@
1
- # frozen_string_literal: true
2
1
  module Prefab
3
2
  class RateLimitClient
4
3
 
@@ -1,19 +1,9 @@
1
- # frozen_string_literal: true
2
1
  require "concurrent/atomics"
3
2
  require 'concurrent'
4
3
  require 'faraday'
5
4
  require 'openssl'
6
- require 'openssl'
7
- require 'ld-eventsource'
8
5
  require 'prefab_pb'
9
- require 'prefab/error'
10
- require 'prefab/errors/initialization_timeout_error'
11
- require 'prefab/errors/invalid_api_key_error'
12
- require 'prefab/errors/missing_default_error'
13
6
  require 'prefab_services_pb'
14
- require 'prefab/options'
15
- require 'prefab/internal_logger'
16
- require 'prefab/config_helper'
17
7
  require 'prefab/config_loader'
18
8
  require 'prefab/config_resolver'
19
9
  require 'prefab/client'
data/lib/prefab_pb.rb CHANGED
@@ -1,226 +1,144 @@
1
- # frozen_string_literal: true
2
1
  # Generated by the protocol buffer compiler. DO NOT EDIT!
3
2
  # source: prefab.proto
4
3
 
5
4
  require 'google/protobuf'
6
5
 
7
6
  Google::Protobuf::DescriptorPool.generated_pool.build do
8
- add_file("prefab.proto", :syntax => :proto3) do
9
- add_message "prefab.ConfigServicePointer" do
10
- optional :project_id, :int64, 1
11
- optional :start_at_id, :int64, 2
12
- optional :project_env_id, :int64, 3
13
- end
14
- add_message "prefab.ConfigValue" do
15
- oneof :type do
16
- optional :int, :int64, 1
17
- optional :string, :string, 2
18
- optional :bytes, :bytes, 3
19
- optional :double, :double, 4
20
- optional :bool, :bool, 5
21
- optional :feature_flag, :message, 6, "prefab.FeatureFlag"
22
- optional :limit_definition, :message, 7, "prefab.LimitDefinition"
23
- optional :segment, :message, 8, "prefab.Segment"
24
- end
25
- end
26
- add_message "prefab.Configs" do
27
- repeated :configs, :message, 1, "prefab.Config"
28
- optional :config_service_pointer, :message, 2, "prefab.ConfigServicePointer"
29
- end
30
- add_message "prefab.Config" do
31
- optional :id, :int64, 1
32
- optional :project_id, :int64, 2
33
- optional :key, :string, 3
34
- optional :changed_by, :string, 4
35
- repeated :rows, :message, 5, "prefab.ConfigRow"
36
- repeated :variants, :message, 6, "prefab.FeatureFlagVariant"
37
- end
38
- add_message "prefab.ConfigRow" do
39
- optional :project_env_id, :int64, 1
40
- optional :namespace, :string, 2
41
- optional :value, :message, 3, "prefab.ConfigValue"
42
- end
43
- add_message "prefab.LimitResponse" do
44
- optional :passed, :bool, 1
45
- optional :expires_at, :int64, 2
46
- optional :enforced_group, :string, 3
47
- optional :current_bucket, :int64, 4
48
- optional :policy_group, :string, 5
49
- optional :policy_name, :enum, 6, "prefab.LimitResponse.LimitPolicyNames"
50
- optional :policy_limit, :int32, 7
51
- optional :amount, :int64, 8
52
- optional :limit_reset_at, :int64, 9
53
- optional :safety_level, :enum, 10, "prefab.LimitDefinition.SafetyLevel"
54
- end
55
- add_enum "prefab.LimitResponse.LimitPolicyNames" do
56
- value :NOT_SET, 0
57
- value :SECONDLY_ROLLING, 1
58
- value :MINUTELY_ROLLING, 3
59
- value :HOURLY_ROLLING, 5
60
- value :DAILY_ROLLING, 7
61
- value :MONTHLY_ROLLING, 8
62
- value :INFINITE, 9
63
- value :YEARLY_ROLLING, 10
64
- end
65
- add_message "prefab.LimitRequest" do
66
- optional :account_id, :int64, 1
67
- optional :acquire_amount, :int32, 2
68
- repeated :groups, :string, 3
69
- optional :limit_combiner, :enum, 4, "prefab.LimitRequest.LimitCombiner"
70
- optional :allow_partial_response, :bool, 5
71
- optional :safety_level, :enum, 6, "prefab.LimitDefinition.SafetyLevel"
72
- end
73
- add_enum "prefab.LimitRequest.LimitCombiner" do
74
- value :NOT_SET, 0
75
- value :MINIMUM, 1
76
- value :MAXIMUM, 2
77
- end
78
- add_message "prefab.FeatureFlagVariant" do
79
- proto3_optional :int, :int64, 1
80
- proto3_optional :string, :string, 2
81
- proto3_optional :double, :double, 3
82
- proto3_optional :bool, :bool, 4
83
- optional :name, :string, 5
84
- optional :description, :string, 6
85
- end
86
- add_message "prefab.Criteria" do
87
- optional :property, :string, 1
88
- optional :operator, :enum, 2, "prefab.Criteria.CriteriaOperator"
89
- repeated :values, :string, 3
90
- end
91
- add_enum "prefab.Criteria.CriteriaOperator" do
92
- value :NOT_SET, 0
93
- value :LOOKUP_KEY_IN, 1
94
- value :LOOKUP_KEY_NOT_IN, 2
95
- value :IN_SEG, 3
96
- value :NOT_IN_SEG, 4
97
- value :ALWAYS_TRUE, 5
98
- value :PROP_IS_ONE_OF, 6
99
- value :PROP_IS_NOT_ONE_OF, 7
100
- value :PROP_ENDS_WITH_ONE_OF, 8
101
- value :PROP_DOES_NOT_END_WITH_ONE_OF, 9
102
- end
103
- add_message "prefab.Rule" do
104
- optional :criteria, :message, 1, "prefab.Criteria"
105
- repeated :variant_weights, :message, 2, "prefab.VariantWeight"
106
- end
107
- add_message "prefab.Segment" do
108
- repeated :criterion, :message, 1, "prefab.Criteria"
109
- end
110
- add_message "prefab.VariantWeight" do
111
- optional :weight, :int32, 1
112
- optional :variant_idx, :int32, 2
113
- end
114
- add_message "prefab.FeatureFlag" do
115
- optional :active, :bool, 1
116
- optional :inactive_variant_idx, :int32, 2
117
- repeated :rules, :message, 5, "prefab.Rule"
118
- end
119
- add_message "prefab.Identity" do
120
- proto3_optional :lookup, :string, 1
121
- map :attributes, :string, :string, 2
122
- end
123
- add_message "prefab.ClientConfigValue" do
124
- proto3_optional :int, :int64, 1
125
- proto3_optional :string, :string, 2
126
- proto3_optional :double, :double, 3
127
- proto3_optional :bool, :bool, 4
128
- end
129
- add_message "prefab.ConfigEvaluations" do
130
- map :values, :string, :message, 1, "prefab.ClientConfigValue"
131
- end
132
- add_message "prefab.LimitDefinition" do
133
- optional :policy_name, :enum, 2, "prefab.LimitResponse.LimitPolicyNames"
134
- optional :limit, :int32, 3
135
- optional :burst, :int32, 4
136
- optional :account_id, :int64, 5
137
- optional :last_modified, :int64, 6
138
- optional :returnable, :bool, 7
139
- optional :safety_level, :enum, 8, "prefab.LimitDefinition.SafetyLevel"
140
- end
141
- add_enum "prefab.LimitDefinition.SafetyLevel" do
142
- value :NOT_SET, 0
143
- value :L4_BEST_EFFORT, 4
144
- value :L5_BOMBPROOF, 5
145
- end
146
- add_message "prefab.LimitDefinitions" do
147
- repeated :definitions, :message, 1, "prefab.LimitDefinition"
148
- end
149
- add_message "prefab.BufferedRequest" do
150
- optional :account_id, :int64, 1
151
- optional :method, :string, 2
152
- optional :uri, :string, 3
153
- optional :body, :string, 4
154
- repeated :limit_groups, :string, 5
155
- optional :content_type, :string, 6
156
- optional :fifo, :bool, 7
157
- end
158
- add_message "prefab.BatchRequest" do
159
- optional :account_id, :int64, 1
160
- optional :method, :string, 2
161
- optional :uri, :string, 3
162
- optional :body, :string, 4
163
- repeated :limit_groups, :string, 5
164
- optional :batch_template, :string, 6
165
- optional :batch_separator, :string, 7
166
- end
167
- add_message "prefab.BasicResponse" do
168
- optional :message, :string, 1
169
- end
170
- add_message "prefab.CreationResponse" do
171
- optional :message, :string, 1
172
- optional :new_id, :int64, 2
173
- end
174
- add_message "prefab.IdBlock" do
175
- optional :project_id, :int64, 1
176
- optional :project_env_id, :int64, 2
177
- optional :sequence_name, :string, 3
178
- optional :start, :int64, 4
179
- optional :end, :int64, 5
180
- end
181
- add_message "prefab.IdBlockRequest" do
182
- optional :project_id, :int64, 1
183
- optional :project_env_id, :int64, 2
184
- optional :sequence_name, :string, 3
185
- optional :size, :int64, 4
186
- end
187
- add_enum "prefab.OnFailure" do
188
- value :NOT_SET, 0
189
- value :LOG_AND_PASS, 1
190
- value :LOG_AND_FAIL, 2
191
- value :THROW, 3
7
+ add_message "prefab.ConfigServicePointer" do
8
+ optional :account_id, :int64, 1
9
+ optional :start_at_id, :int64, 2
10
+ end
11
+ add_message "prefab.ConfigDelta" do
12
+ optional :id, :int64, 2
13
+ optional :key, :string, 3
14
+ optional :value, :message, 4, "prefab.ConfigValue"
15
+ optional :created_by, :string, 5
16
+ end
17
+ add_message "prefab.ConfigValue" do
18
+ oneof :type do
19
+ optional :int, :int64, 1
20
+ optional :string, :string, 2
21
+ optional :bytes, :bytes, 3
22
+ optional :double, :double, 4
23
+ optional :bool, :bool, 5
24
+ optional :feature_flag, :message, 6, "prefab.FeatureFlag"
25
+ optional :limit_definition, :message, 7, "prefab.LimitDefinition"
192
26
  end
193
27
  end
28
+ add_message "prefab.ConfigDeltas" do
29
+ repeated :deltas, :message, 1, "prefab.ConfigDelta"
30
+ end
31
+ add_message "prefab.UpsertRequest" do
32
+ optional :account_id, :int64, 1
33
+ optional :config_delta, :message, 2, "prefab.ConfigDelta"
34
+ optional :changed_by, :string, 4
35
+ end
36
+ add_message "prefab.LimitResponse" do
37
+ optional :passed, :bool, 1
38
+ optional :expires_at, :int64, 2
39
+ optional :enforced_group, :string, 3
40
+ optional :current_bucket, :int64, 4
41
+ optional :policy_group, :string, 5
42
+ optional :policy_name, :enum, 6, "prefab.LimitResponse.LimitPolicyNames"
43
+ optional :policy_limit, :int32, 7
44
+ optional :amount, :int64, 8
45
+ optional :limit_reset_at, :int64, 9
46
+ optional :safety_level, :enum, 10, "prefab.LimitDefinition.SafetyLevel"
47
+ end
48
+ add_enum "prefab.LimitResponse.LimitPolicyNames" do
49
+ value :NOT_SET, 0
50
+ value :SECONDLY_ROLLING, 1
51
+ value :MINUTELY_ROLLING, 3
52
+ value :HOURLY_ROLLING, 5
53
+ value :DAILY_ROLLING, 7
54
+ value :MONTHLY_ROLLING, 8
55
+ value :INFINITE, 9
56
+ value :YEARLY_ROLLING, 10
57
+ end
58
+ add_message "prefab.LimitRequest" do
59
+ optional :account_id, :int64, 1
60
+ optional :acquire_amount, :int32, 2
61
+ repeated :groups, :string, 3
62
+ optional :limit_combiner, :enum, 4, "prefab.LimitRequest.LimitCombiner"
63
+ optional :allow_partial_response, :bool, 5
64
+ optional :safety_level, :enum, 6, "prefab.LimitDefinition.SafetyLevel"
65
+ end
66
+ add_enum "prefab.LimitRequest.LimitCombiner" do
67
+ value :NOT_SET, 0
68
+ value :MINIMUM, 1
69
+ value :MAXIMUM, 2
70
+ end
71
+ add_message "prefab.FeatureFlag" do
72
+ optional :pct, :double, 3
73
+ repeated :whitelisted, :string, 4
74
+ end
75
+ add_message "prefab.LimitDefinition" do
76
+ optional :policy_name, :enum, 2, "prefab.LimitResponse.LimitPolicyNames"
77
+ optional :limit, :int32, 3
78
+ optional :burst, :int32, 4
79
+ optional :account_id, :int64, 5
80
+ optional :last_modified, :int64, 6
81
+ optional :returnable, :bool, 7
82
+ optional :safety_level, :enum, 8, "prefab.LimitDefinition.SafetyLevel"
83
+ end
84
+ add_enum "prefab.LimitDefinition.SafetyLevel" do
85
+ value :NOT_SET, 0
86
+ value :L4_BEST_EFFORT, 4
87
+ value :L5_BOMBPROOF, 5
88
+ end
89
+ add_message "prefab.LimitDefinitions" do
90
+ repeated :definitions, :message, 1, "prefab.LimitDefinition"
91
+ end
92
+ add_message "prefab.FeatureFlags" do
93
+ repeated :flags, :message, 1, "prefab.FeatureFlag"
94
+ optional :cache_expiry, :int64, 2
95
+ end
96
+ add_message "prefab.BufferedRequest" do
97
+ optional :account_id, :int64, 1
98
+ optional :method, :string, 2
99
+ optional :uri, :string, 3
100
+ optional :body, :string, 4
101
+ repeated :limit_groups, :string, 5
102
+ optional :content_type, :string, 6
103
+ optional :fifo, :bool, 7
104
+ end
105
+ add_message "prefab.BatchRequest" do
106
+ optional :account_id, :int64, 1
107
+ optional :method, :string, 2
108
+ optional :uri, :string, 3
109
+ optional :body, :string, 4
110
+ repeated :limit_groups, :string, 5
111
+ optional :batch_template, :string, 6
112
+ optional :batch_separator, :string, 7
113
+ end
114
+ add_message "prefab.BasicResponse" do
115
+ optional :message, :string, 1
116
+ end
117
+ add_enum "prefab.OnFailure" do
118
+ value :NOT_SET, 0
119
+ value :LOG_AND_PASS, 1
120
+ value :LOG_AND_FAIL, 2
121
+ value :THROW, 3
122
+ end
194
123
  end
195
124
 
196
125
  module Prefab
197
- ConfigServicePointer = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.ConfigServicePointer").msgclass
198
- ConfigValue = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.ConfigValue").msgclass
199
- Configs = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.Configs").msgclass
200
- Config = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.Config").msgclass
201
- ConfigRow = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.ConfigRow").msgclass
202
- LimitResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.LimitResponse").msgclass
203
- LimitResponse::LimitPolicyNames = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.LimitResponse.LimitPolicyNames").enummodule
204
- LimitRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.LimitRequest").msgclass
205
- LimitRequest::LimitCombiner = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.LimitRequest.LimitCombiner").enummodule
206
- FeatureFlagVariant = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.FeatureFlagVariant").msgclass
207
- Criteria = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.Criteria").msgclass
208
- Criteria::CriteriaOperator = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.Criteria.CriteriaOperator").enummodule
209
- Rule = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.Rule").msgclass
210
- Segment = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.Segment").msgclass
211
- VariantWeight = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.VariantWeight").msgclass
212
- FeatureFlag = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.FeatureFlag").msgclass
213
- Identity = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.Identity").msgclass
214
- ClientConfigValue = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.ClientConfigValue").msgclass
215
- ConfigEvaluations = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.ConfigEvaluations").msgclass
216
- LimitDefinition = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.LimitDefinition").msgclass
217
- LimitDefinition::SafetyLevel = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.LimitDefinition.SafetyLevel").enummodule
218
- LimitDefinitions = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.LimitDefinitions").msgclass
219
- BufferedRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.BufferedRequest").msgclass
220
- BatchRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.BatchRequest").msgclass
221
- BasicResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.BasicResponse").msgclass
222
- CreationResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.CreationResponse").msgclass
223
- IdBlock = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.IdBlock").msgclass
224
- IdBlockRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.IdBlockRequest").msgclass
225
- OnFailure = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.OnFailure").enummodule
126
+ ConfigServicePointer = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.ConfigServicePointer").msgclass
127
+ ConfigDelta = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.ConfigDelta").msgclass
128
+ ConfigValue = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.ConfigValue").msgclass
129
+ ConfigDeltas = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.ConfigDeltas").msgclass
130
+ UpsertRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.UpsertRequest").msgclass
131
+ LimitResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.LimitResponse").msgclass
132
+ LimitResponse::LimitPolicyNames = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.LimitResponse.LimitPolicyNames").enummodule
133
+ LimitRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.LimitRequest").msgclass
134
+ LimitRequest::LimitCombiner = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.LimitRequest.LimitCombiner").enummodule
135
+ FeatureFlag = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.FeatureFlag").msgclass
136
+ LimitDefinition = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.LimitDefinition").msgclass
137
+ LimitDefinition::SafetyLevel = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.LimitDefinition.SafetyLevel").enummodule
138
+ LimitDefinitions = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.LimitDefinitions").msgclass
139
+ FeatureFlags = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.FeatureFlags").msgclass
140
+ BufferedRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.BufferedRequest").msgclass
141
+ BatchRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.BatchRequest").msgclass
142
+ BasicResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.BasicResponse").msgclass
143
+ OnFailure = Google::Protobuf::DescriptorPool.generated_pool.lookup("prefab.OnFailure").enummodule
226
144
  end