flipper 1.0.0 → 1.1.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.
Files changed (140) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/.github/workflows/ci.yml +7 -3
  4. data/.github/workflows/examples.yml +27 -5
  5. data/Changelog.md +42 -0
  6. data/Gemfile +4 -4
  7. data/README.md +13 -11
  8. data/benchmark/typecast_ips.rb +8 -0
  9. data/docs/images/flipper_cloud.png +0 -0
  10. data/examples/cloud/backoff_policy.rb +13 -0
  11. data/examples/cloud/cloud_setup.rb +16 -0
  12. data/examples/cloud/forked.rb +7 -2
  13. data/examples/cloud/threaded.rb +15 -18
  14. data/examples/expressions.rb +213 -0
  15. data/examples/strict.rb +18 -0
  16. data/flipper.gemspec +1 -2
  17. data/lib/flipper/actor.rb +6 -3
  18. data/lib/flipper/adapter.rb +10 -0
  19. data/lib/flipper/adapter_builder.rb +44 -0
  20. data/lib/flipper/adapters/dual_write.rb +1 -3
  21. data/lib/flipper/adapters/failover.rb +0 -4
  22. data/lib/flipper/adapters/failsafe.rb +0 -4
  23. data/lib/flipper/adapters/http/client.rb +26 -7
  24. data/lib/flipper/adapters/http/error.rb +1 -1
  25. data/lib/flipper/adapters/http.rb +18 -13
  26. data/lib/flipper/adapters/instrumented.rb +0 -4
  27. data/lib/flipper/adapters/memoizable.rb +14 -19
  28. data/lib/flipper/adapters/memory.rb +4 -6
  29. data/lib/flipper/adapters/operation_logger.rb +0 -4
  30. data/lib/flipper/adapters/poll.rb +1 -3
  31. data/lib/flipper/adapters/pstore.rb +17 -11
  32. data/lib/flipper/adapters/read_only.rb +4 -4
  33. data/lib/flipper/adapters/strict.rb +47 -0
  34. data/lib/flipper/adapters/sync/feature_synchronizer.rb +10 -1
  35. data/lib/flipper/adapters/sync.rb +0 -4
  36. data/lib/flipper/cloud/configuration.rb +121 -52
  37. data/lib/flipper/cloud/telemetry/backoff_policy.rb +93 -0
  38. data/lib/flipper/cloud/telemetry/instrumenter.rb +26 -0
  39. data/lib/flipper/cloud/telemetry/metric.rb +39 -0
  40. data/lib/flipper/cloud/telemetry/metric_storage.rb +30 -0
  41. data/lib/flipper/cloud/telemetry/submitter.rb +98 -0
  42. data/lib/flipper/cloud/telemetry.rb +183 -0
  43. data/lib/flipper/configuration.rb +25 -4
  44. data/lib/flipper/dsl.rb +51 -0
  45. data/lib/flipper/engine.rb +28 -3
  46. data/lib/flipper/exporters/json/export.rb +1 -1
  47. data/lib/flipper/exporters/json/v1.rb +1 -1
  48. data/lib/flipper/expression/builder.rb +73 -0
  49. data/lib/flipper/expression/constant.rb +25 -0
  50. data/lib/flipper/expression.rb +71 -0
  51. data/lib/flipper/expressions/all.rb +11 -0
  52. data/lib/flipper/expressions/any.rb +9 -0
  53. data/lib/flipper/expressions/boolean.rb +9 -0
  54. data/lib/flipper/expressions/comparable.rb +13 -0
  55. data/lib/flipper/expressions/duration.rb +28 -0
  56. data/lib/flipper/expressions/equal.rb +9 -0
  57. data/lib/flipper/expressions/greater_than.rb +9 -0
  58. data/lib/flipper/expressions/greater_than_or_equal_to.rb +9 -0
  59. data/lib/flipper/expressions/less_than.rb +9 -0
  60. data/lib/flipper/expressions/less_than_or_equal_to.rb +9 -0
  61. data/lib/flipper/expressions/not_equal.rb +9 -0
  62. data/lib/flipper/expressions/now.rb +9 -0
  63. data/lib/flipper/expressions/number.rb +9 -0
  64. data/lib/flipper/expressions/percentage.rb +9 -0
  65. data/lib/flipper/expressions/percentage_of_actors.rb +12 -0
  66. data/lib/flipper/expressions/property.rb +9 -0
  67. data/lib/flipper/expressions/random.rb +9 -0
  68. data/lib/flipper/expressions/string.rb +9 -0
  69. data/lib/flipper/expressions/time.rb +9 -0
  70. data/lib/flipper/feature.rb +55 -0
  71. data/lib/flipper/gate.rb +1 -0
  72. data/lib/flipper/gate_values.rb +5 -2
  73. data/lib/flipper/gates/expression.rb +75 -0
  74. data/lib/flipper/instrumentation/statsd_subscriber.rb +2 -4
  75. data/lib/flipper/middleware/memoizer.rb +29 -13
  76. data/lib/flipper/poller.rb +1 -1
  77. data/lib/flipper/serializers/gzip.rb +24 -0
  78. data/lib/flipper/serializers/json.rb +19 -0
  79. data/lib/flipper/spec/shared_adapter_specs.rb +29 -11
  80. data/lib/flipper/test/shared_adapter_test.rb +24 -5
  81. data/lib/flipper/typecast.rb +34 -6
  82. data/lib/flipper/types/percentage.rb +1 -1
  83. data/lib/flipper/version.rb +1 -1
  84. data/lib/flipper.rb +38 -1
  85. data/spec/flipper/adapter_builder_spec.rb +73 -0
  86. data/spec/flipper/adapter_spec.rb +1 -0
  87. data/spec/flipper/adapters/http_spec.rb +39 -5
  88. data/spec/flipper/adapters/memoizable_spec.rb +15 -15
  89. data/spec/flipper/adapters/read_only_spec.rb +26 -11
  90. data/spec/flipper/adapters/strict_spec.rb +62 -0
  91. data/spec/flipper/adapters/sync/feature_synchronizer_spec.rb +27 -0
  92. data/spec/flipper/cloud/configuration_spec.rb +6 -23
  93. data/spec/flipper/cloud/telemetry/backoff_policy_spec.rb +108 -0
  94. data/spec/flipper/cloud/telemetry/metric_spec.rb +87 -0
  95. data/spec/flipper/cloud/telemetry/metric_storage_spec.rb +58 -0
  96. data/spec/flipper/cloud/telemetry/submitter_spec.rb +145 -0
  97. data/spec/flipper/cloud/telemetry_spec.rb +156 -0
  98. data/spec/flipper/cloud_spec.rb +12 -12
  99. data/spec/flipper/configuration_spec.rb +17 -0
  100. data/spec/flipper/dsl_spec.rb +39 -0
  101. data/spec/flipper/engine_spec.rb +108 -7
  102. data/spec/flipper/exporters/json/v1_spec.rb +3 -3
  103. data/spec/flipper/expression/builder_spec.rb +248 -0
  104. data/spec/flipper/expression_spec.rb +188 -0
  105. data/spec/flipper/expressions/all_spec.rb +15 -0
  106. data/spec/flipper/expressions/any_spec.rb +15 -0
  107. data/spec/flipper/expressions/boolean_spec.rb +15 -0
  108. data/spec/flipper/expressions/duration_spec.rb +43 -0
  109. data/spec/flipper/expressions/equal_spec.rb +24 -0
  110. data/spec/flipper/expressions/greater_than_or_equal_to_spec.rb +28 -0
  111. data/spec/flipper/expressions/greater_than_spec.rb +28 -0
  112. data/spec/flipper/expressions/less_than_or_equal_to_spec.rb +28 -0
  113. data/spec/flipper/expressions/less_than_spec.rb +32 -0
  114. data/spec/flipper/expressions/not_equal_spec.rb +15 -0
  115. data/spec/flipper/expressions/now_spec.rb +11 -0
  116. data/spec/flipper/expressions/number_spec.rb +21 -0
  117. data/spec/flipper/expressions/percentage_of_actors_spec.rb +20 -0
  118. data/spec/flipper/expressions/percentage_spec.rb +15 -0
  119. data/spec/flipper/expressions/property_spec.rb +13 -0
  120. data/spec/flipper/expressions/random_spec.rb +9 -0
  121. data/spec/flipper/expressions/string_spec.rb +11 -0
  122. data/spec/flipper/expressions/time_spec.rb +13 -0
  123. data/spec/flipper/feature_spec.rb +360 -1
  124. data/spec/flipper/gate_values_spec.rb +2 -2
  125. data/spec/flipper/gates/expression_spec.rb +108 -0
  126. data/spec/flipper/identifier_spec.rb +4 -5
  127. data/spec/flipper/instrumentation/statsd_subscriber_spec.rb +15 -1
  128. data/spec/flipper/middleware/memoizer_spec.rb +67 -0
  129. data/spec/flipper/serializers/gzip_spec.rb +13 -0
  130. data/spec/flipper/serializers/json_spec.rb +13 -0
  131. data/spec/flipper/typecast_spec.rb +43 -7
  132. data/spec/flipper/types/actor_spec.rb +18 -1
  133. data/spec/flipper_integration_spec.rb +102 -4
  134. data/spec/flipper_spec.rb +89 -1
  135. data/spec/spec_helper.rb +5 -0
  136. data/spec/support/actor_names.yml +1 -0
  137. data/spec/support/fake_backoff_policy.rb +15 -0
  138. data/spec/support/spec_helpers.rb +11 -3
  139. metadata +104 -18
  140. data/lib/flipper/cloud/instrumenter.rb +0 -48
data/spec/spec_helper.rb CHANGED
@@ -10,6 +10,7 @@ require 'bundler'
10
10
  Bundler.setup(:default)
11
11
 
12
12
  require 'debug'
13
+ require 'statsd'
13
14
  require 'webmock/rspec'
14
15
  WebMock.disable_net_connect!(allow_localhost: true)
15
16
 
@@ -20,8 +21,12 @@ require 'flipper/ui'
20
21
 
21
22
  Dir[FlipperRoot.join('spec/support/**/*.rb')].sort.each { |f| require f }
22
23
 
24
+ # Disable telemetry logging in specs.
25
+ ENV["FLIPPER_CLOUD_LOGGING_ENABLED"] = "false"
26
+
23
27
  RSpec.configure do |config|
24
28
  config.before(:example) do
29
+ Flipper::Cloud::Telemetry.reset if defined?(Flipper::Cloud::Telemetry) && Flipper::Cloud::Telemetry.respond_to?(:reset)
25
30
  Flipper::Poller.reset if defined?(Flipper::Poller)
26
31
  Flipper.unregister_groups
27
32
  Flipper.configuration = nil
@@ -0,0 +1 @@
1
+ actor_name_1: 'Actor #1'
@@ -0,0 +1,15 @@
1
+ class FakeBackoffPolicy
2
+ def initialize
3
+ @retries = 0
4
+ end
5
+
6
+ attr_reader :retries
7
+
8
+ def next_interval
9
+ @retries += 1
10
+ 0
11
+ end
12
+
13
+ def reset
14
+ end
15
+ end
@@ -42,6 +42,14 @@ module SpecHelpers
42
42
  }
43
43
  end
44
44
 
45
+ def api_positive_percentage_error_response
46
+ {
47
+ 'code' => 3,
48
+ 'message' => 'Percentage must be a positive number less than or equal to 100.',
49
+ 'more_info' => api_error_code_reference_url,
50
+ }
51
+ end
52
+
45
53
  def api_flipper_id_is_missing_response
46
54
  {
47
55
  'code' => 4,
@@ -50,10 +58,10 @@ module SpecHelpers
50
58
  }
51
59
  end
52
60
 
53
- def api_positive_percentage_error_response
61
+ def api_expression_invalid_response
54
62
  {
55
- 'code' => 3,
56
- 'message' => 'Percentage must be a positive number less than or equal to 100.',
63
+ 'code' => 7,
64
+ 'message' => 'The provided expression was not valid.',
57
65
  'more_info' => api_error_code_reference_url,
58
66
  }
59
67
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flipper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Nunemaker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-23 00:00:00.000000000 Z
11
+ date: 2023-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - "<"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2'
27
- - !ruby/object:Gem::Dependency
28
- name: brow
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 0.4.1
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 0.4.1
41
27
  description:
42
28
  email: support@flippercloud.io
43
29
  executables: []
@@ -45,6 +31,7 @@ extensions: []
45
31
  extra_rdoc_files: []
46
32
  files:
47
33
  - ".codeclimate.yml"
34
+ - ".github/FUNDING.yml"
48
35
  - ".github/dependabot.yml"
49
36
  - ".github/workflows/ci.yml"
50
37
  - ".github/workflows/examples.yml"
@@ -71,6 +58,7 @@ files:
71
58
  - examples/api/memoized.ru
72
59
  - examples/basic.rb
73
60
  - examples/cloud/app.ru
61
+ - examples/cloud/backoff_policy.rb
74
62
  - examples/cloud/basic.rb
75
63
  - examples/cloud/cloud_setup.rb
76
64
  - examples/cloud/forked.rb
@@ -79,6 +67,7 @@ files:
79
67
  - examples/configuring_default.rb
80
68
  - examples/dsl.rb
81
69
  - examples/enabled_for_actor.rb
70
+ - examples/expressions.rb
82
71
  - examples/group.rb
83
72
  - examples/group_dynamic_lookup.rb
84
73
  - examples/group_with_members.rb
@@ -92,11 +81,13 @@ files:
92
81
  - examples/percentage_of_actors_enabled_check.rb
93
82
  - examples/percentage_of_actors_group.rb
94
83
  - examples/percentage_of_time.rb
84
+ - examples/strict.rb
95
85
  - flipper-cloud.gemspec
96
86
  - flipper.gemspec
97
87
  - lib/flipper.rb
98
88
  - lib/flipper/actor.rb
99
89
  - lib/flipper/adapter.rb
90
+ - lib/flipper/adapter_builder.rb
100
91
  - lib/flipper/adapters/dual_write.rb
101
92
  - lib/flipper/adapters/failover.rb
102
93
  - lib/flipper/adapters/failsafe.rb
@@ -111,6 +102,7 @@ files:
111
102
  - lib/flipper/adapters/poll/poller.rb
112
103
  - lib/flipper/adapters/pstore.rb
113
104
  - lib/flipper/adapters/read_only.rb
105
+ - lib/flipper/adapters/strict.rb
114
106
  - lib/flipper/adapters/sync.rb
115
107
  - lib/flipper/adapters/sync/feature_synchronizer.rb
116
108
  - lib/flipper/adapters/sync/interval_synchronizer.rb
@@ -118,10 +110,15 @@ files:
118
110
  - lib/flipper/cloud.rb
119
111
  - lib/flipper/cloud/configuration.rb
120
112
  - lib/flipper/cloud/dsl.rb
121
- - lib/flipper/cloud/instrumenter.rb
122
113
  - lib/flipper/cloud/message_verifier.rb
123
114
  - lib/flipper/cloud/middleware.rb
124
115
  - lib/flipper/cloud/routes.rb
116
+ - lib/flipper/cloud/telemetry.rb
117
+ - lib/flipper/cloud/telemetry/backoff_policy.rb
118
+ - lib/flipper/cloud/telemetry/instrumenter.rb
119
+ - lib/flipper/cloud/telemetry/metric.rb
120
+ - lib/flipper/cloud/telemetry/metric_storage.rb
121
+ - lib/flipper/cloud/telemetry/submitter.rb
125
122
  - lib/flipper/configuration.rb
126
123
  - lib/flipper/dsl.rb
127
124
  - lib/flipper/engine.rb
@@ -130,12 +127,35 @@ files:
130
127
  - lib/flipper/exporter.rb
131
128
  - lib/flipper/exporters/json/export.rb
132
129
  - lib/flipper/exporters/json/v1.rb
130
+ - lib/flipper/expression.rb
131
+ - lib/flipper/expression/builder.rb
132
+ - lib/flipper/expression/constant.rb
133
+ - lib/flipper/expressions/all.rb
134
+ - lib/flipper/expressions/any.rb
135
+ - lib/flipper/expressions/boolean.rb
136
+ - lib/flipper/expressions/comparable.rb
137
+ - lib/flipper/expressions/duration.rb
138
+ - lib/flipper/expressions/equal.rb
139
+ - lib/flipper/expressions/greater_than.rb
140
+ - lib/flipper/expressions/greater_than_or_equal_to.rb
141
+ - lib/flipper/expressions/less_than.rb
142
+ - lib/flipper/expressions/less_than_or_equal_to.rb
143
+ - lib/flipper/expressions/not_equal.rb
144
+ - lib/flipper/expressions/now.rb
145
+ - lib/flipper/expressions/number.rb
146
+ - lib/flipper/expressions/percentage.rb
147
+ - lib/flipper/expressions/percentage_of_actors.rb
148
+ - lib/flipper/expressions/property.rb
149
+ - lib/flipper/expressions/random.rb
150
+ - lib/flipper/expressions/string.rb
151
+ - lib/flipper/expressions/time.rb
133
152
  - lib/flipper/feature.rb
134
153
  - lib/flipper/feature_check_context.rb
135
154
  - lib/flipper/gate.rb
136
155
  - lib/flipper/gate_values.rb
137
156
  - lib/flipper/gates/actor.rb
138
157
  - lib/flipper/gates/boolean.rb
158
+ - lib/flipper/gates/expression.rb
139
159
  - lib/flipper/gates/group.rb
140
160
  - lib/flipper/gates/percentage_of_actors.rb
141
161
  - lib/flipper/gates/percentage_of_time.rb
@@ -151,6 +171,8 @@ files:
151
171
  - lib/flipper/middleware/setup_env.rb
152
172
  - lib/flipper/poller.rb
153
173
  - lib/flipper/registry.rb
174
+ - lib/flipper/serializers/gzip.rb
175
+ - lib/flipper/serializers/json.rb
154
176
  - lib/flipper/spec/shared_adapter_specs.rb
155
177
  - lib/flipper/test/shared_adapter_test.rb
156
178
  - lib/flipper/type.rb
@@ -165,6 +187,7 @@ files:
165
187
  - spec/fixtures/feature.json
166
188
  - spec/fixtures/flipper_pstore_1679087600.json
167
189
  - spec/flipper/actor_spec.rb
190
+ - spec/flipper/adapter_builder_spec.rb
168
191
  - spec/flipper/adapter_spec.rb
169
192
  - spec/flipper/adapters/dual_write_spec.rb
170
193
  - spec/flipper/adapters/failover_spec.rb
@@ -176,6 +199,7 @@ files:
176
199
  - spec/flipper/adapters/operation_logger_spec.rb
177
200
  - spec/flipper/adapters/pstore_spec.rb
178
201
  - spec/flipper/adapters/read_only_spec.rb
202
+ - spec/flipper/adapters/strict_spec.rb
179
203
  - spec/flipper/adapters/sync/feature_synchronizer_spec.rb
180
204
  - spec/flipper/adapters/sync/interval_synchronizer_spec.rb
181
205
  - spec/flipper/adapters/sync/synchronizer_spec.rb
@@ -184,6 +208,11 @@ files:
184
208
  - spec/flipper/cloud/dsl_spec.rb
185
209
  - spec/flipper/cloud/message_verifier_spec.rb
186
210
  - spec/flipper/cloud/middleware_spec.rb
211
+ - spec/flipper/cloud/telemetry/backoff_policy_spec.rb
212
+ - spec/flipper/cloud/telemetry/metric_spec.rb
213
+ - spec/flipper/cloud/telemetry/metric_storage_spec.rb
214
+ - spec/flipper/cloud/telemetry/submitter_spec.rb
215
+ - spec/flipper/cloud/telemetry_spec.rb
187
216
  - spec/flipper/cloud_spec.rb
188
217
  - spec/flipper/configuration_spec.rb
189
218
  - spec/flipper/dsl_spec.rb
@@ -192,12 +221,33 @@ files:
192
221
  - spec/flipper/exporter_spec.rb
193
222
  - spec/flipper/exporters/json/export_spec.rb
194
223
  - spec/flipper/exporters/json/v1_spec.rb
224
+ - spec/flipper/expression/builder_spec.rb
225
+ - spec/flipper/expression_spec.rb
226
+ - spec/flipper/expressions/all_spec.rb
227
+ - spec/flipper/expressions/any_spec.rb
228
+ - spec/flipper/expressions/boolean_spec.rb
229
+ - spec/flipper/expressions/duration_spec.rb
230
+ - spec/flipper/expressions/equal_spec.rb
231
+ - spec/flipper/expressions/greater_than_or_equal_to_spec.rb
232
+ - spec/flipper/expressions/greater_than_spec.rb
233
+ - spec/flipper/expressions/less_than_or_equal_to_spec.rb
234
+ - spec/flipper/expressions/less_than_spec.rb
235
+ - spec/flipper/expressions/not_equal_spec.rb
236
+ - spec/flipper/expressions/now_spec.rb
237
+ - spec/flipper/expressions/number_spec.rb
238
+ - spec/flipper/expressions/percentage_of_actors_spec.rb
239
+ - spec/flipper/expressions/percentage_spec.rb
240
+ - spec/flipper/expressions/property_spec.rb
241
+ - spec/flipper/expressions/random_spec.rb
242
+ - spec/flipper/expressions/string_spec.rb
243
+ - spec/flipper/expressions/time_spec.rb
195
244
  - spec/flipper/feature_check_context_spec.rb
196
245
  - spec/flipper/feature_spec.rb
197
246
  - spec/flipper/gate_spec.rb
198
247
  - spec/flipper/gate_values_spec.rb
199
248
  - spec/flipper/gates/actor_spec.rb
200
249
  - spec/flipper/gates/boolean_spec.rb
250
+ - spec/flipper/gates/expression_spec.rb
201
251
  - spec/flipper/gates/group_spec.rb
202
252
  - spec/flipper/gates/percentage_of_actors_spec.rb
203
253
  - spec/flipper/gates/percentage_of_time_spec.rb
@@ -210,6 +260,8 @@ files:
210
260
  - spec/flipper/middleware/setup_env_spec.rb
211
261
  - spec/flipper/poller_spec.rb
212
262
  - spec/flipper/registry_spec.rb
263
+ - spec/flipper/serializers/gzip_spec.rb
264
+ - spec/flipper/serializers/json_spec.rb
213
265
  - spec/flipper/typecast_spec.rb
214
266
  - spec/flipper/types/actor_spec.rb
215
267
  - spec/flipper/types/boolean_spec.rb
@@ -220,8 +272,10 @@ files:
220
272
  - spec/flipper_integration_spec.rb
221
273
  - spec/flipper_spec.rb
222
274
  - spec/spec_helper.rb
275
+ - spec/support/actor_names.yml
223
276
  - spec/support/climate_control.rb
224
277
  - spec/support/descriptions.yml
278
+ - spec/support/fake_backoff_policy.rb
225
279
  - spec/support/fake_udp_socket.rb
226
280
  - spec/support/skippable.rb
227
281
  - spec/support/spec_helpers.rb
@@ -256,11 +310,12 @@ requirements: []
256
310
  rubygems_version: 3.4.10
257
311
  signing_key:
258
312
  specification_version: 4
259
- summary: Feature flipper for ANYTHING
313
+ summary: Beautiful, performant feature flags for Ruby.
260
314
  test_files:
261
315
  - spec/fixtures/feature.json
262
316
  - spec/fixtures/flipper_pstore_1679087600.json
263
317
  - spec/flipper/actor_spec.rb
318
+ - spec/flipper/adapter_builder_spec.rb
264
319
  - spec/flipper/adapter_spec.rb
265
320
  - spec/flipper/adapters/dual_write_spec.rb
266
321
  - spec/flipper/adapters/failover_spec.rb
@@ -272,6 +327,7 @@ test_files:
272
327
  - spec/flipper/adapters/operation_logger_spec.rb
273
328
  - spec/flipper/adapters/pstore_spec.rb
274
329
  - spec/flipper/adapters/read_only_spec.rb
330
+ - spec/flipper/adapters/strict_spec.rb
275
331
  - spec/flipper/adapters/sync/feature_synchronizer_spec.rb
276
332
  - spec/flipper/adapters/sync/interval_synchronizer_spec.rb
277
333
  - spec/flipper/adapters/sync/synchronizer_spec.rb
@@ -280,6 +336,11 @@ test_files:
280
336
  - spec/flipper/cloud/dsl_spec.rb
281
337
  - spec/flipper/cloud/message_verifier_spec.rb
282
338
  - spec/flipper/cloud/middleware_spec.rb
339
+ - spec/flipper/cloud/telemetry/backoff_policy_spec.rb
340
+ - spec/flipper/cloud/telemetry/metric_spec.rb
341
+ - spec/flipper/cloud/telemetry/metric_storage_spec.rb
342
+ - spec/flipper/cloud/telemetry/submitter_spec.rb
343
+ - spec/flipper/cloud/telemetry_spec.rb
283
344
  - spec/flipper/cloud_spec.rb
284
345
  - spec/flipper/configuration_spec.rb
285
346
  - spec/flipper/dsl_spec.rb
@@ -288,12 +349,33 @@ test_files:
288
349
  - spec/flipper/exporter_spec.rb
289
350
  - spec/flipper/exporters/json/export_spec.rb
290
351
  - spec/flipper/exporters/json/v1_spec.rb
352
+ - spec/flipper/expression/builder_spec.rb
353
+ - spec/flipper/expression_spec.rb
354
+ - spec/flipper/expressions/all_spec.rb
355
+ - spec/flipper/expressions/any_spec.rb
356
+ - spec/flipper/expressions/boolean_spec.rb
357
+ - spec/flipper/expressions/duration_spec.rb
358
+ - spec/flipper/expressions/equal_spec.rb
359
+ - spec/flipper/expressions/greater_than_or_equal_to_spec.rb
360
+ - spec/flipper/expressions/greater_than_spec.rb
361
+ - spec/flipper/expressions/less_than_or_equal_to_spec.rb
362
+ - spec/flipper/expressions/less_than_spec.rb
363
+ - spec/flipper/expressions/not_equal_spec.rb
364
+ - spec/flipper/expressions/now_spec.rb
365
+ - spec/flipper/expressions/number_spec.rb
366
+ - spec/flipper/expressions/percentage_of_actors_spec.rb
367
+ - spec/flipper/expressions/percentage_spec.rb
368
+ - spec/flipper/expressions/property_spec.rb
369
+ - spec/flipper/expressions/random_spec.rb
370
+ - spec/flipper/expressions/string_spec.rb
371
+ - spec/flipper/expressions/time_spec.rb
291
372
  - spec/flipper/feature_check_context_spec.rb
292
373
  - spec/flipper/feature_spec.rb
293
374
  - spec/flipper/gate_spec.rb
294
375
  - spec/flipper/gate_values_spec.rb
295
376
  - spec/flipper/gates/actor_spec.rb
296
377
  - spec/flipper/gates/boolean_spec.rb
378
+ - spec/flipper/gates/expression_spec.rb
297
379
  - spec/flipper/gates/group_spec.rb
298
380
  - spec/flipper/gates/percentage_of_actors_spec.rb
299
381
  - spec/flipper/gates/percentage_of_time_spec.rb
@@ -306,6 +388,8 @@ test_files:
306
388
  - spec/flipper/middleware/setup_env_spec.rb
307
389
  - spec/flipper/poller_spec.rb
308
390
  - spec/flipper/registry_spec.rb
391
+ - spec/flipper/serializers/gzip_spec.rb
392
+ - spec/flipper/serializers/json_spec.rb
309
393
  - spec/flipper/typecast_spec.rb
310
394
  - spec/flipper/types/actor_spec.rb
311
395
  - spec/flipper/types/boolean_spec.rb
@@ -316,8 +400,10 @@ test_files:
316
400
  - spec/flipper_integration_spec.rb
317
401
  - spec/flipper_spec.rb
318
402
  - spec/spec_helper.rb
403
+ - spec/support/actor_names.yml
319
404
  - spec/support/climate_control.rb
320
405
  - spec/support/descriptions.yml
406
+ - spec/support/fake_backoff_policy.rb
321
407
  - spec/support/fake_udp_socket.rb
322
408
  - spec/support/skippable.rb
323
409
  - spec/support/spec_helpers.rb
@@ -1,48 +0,0 @@
1
- require "delegate"
2
- require "flipper/instrumenters/noop"
3
-
4
- module Flipper
5
- module Cloud
6
- class Instrumenter < SimpleDelegator
7
- def initialize(options = {})
8
- @brow = options.fetch(:brow)
9
- @instrumenter = options.fetch(:instrumenter, Instrumenters::Noop)
10
- super @instrumenter
11
- end
12
-
13
- def instrument(name, payload = {}, &block)
14
- result = @instrumenter.instrument(name, payload, &block)
15
- push name, payload
16
- result
17
- end
18
-
19
- private
20
-
21
- def push(name, payload)
22
- return unless name == Flipper::Feature::InstrumentationName
23
- return unless :enabled? == payload[:operation]
24
-
25
- dimensions = {
26
- "feature" => payload[:feature_name].to_s,
27
- "result" => payload[:result].to_s,
28
- }
29
-
30
- if (thing = payload[:thing])
31
- dimensions["flipper_id"] = thing.value.to_s
32
- end
33
-
34
- if (actors = payload[:actors])
35
- dimensions["flipper_ids"] = actors.map { |actor| actor.value.to_s }
36
- end
37
-
38
- event = {
39
- type: "enabled",
40
- dimensions: dimensions,
41
- measures: {},
42
- ts: Time.now.utc,
43
- }
44
- @brow.push event
45
- end
46
- end
47
- end
48
- end