flipper 1.0.0.pre → 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 (142) 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 +29 -7
  5. data/Changelog.md +211 -167
  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/metadata.rb +3 -3
  76. data/lib/flipper/middleware/memoizer.rb +30 -14
  77. data/lib/flipper/poller.rb +1 -1
  78. data/lib/flipper/serializers/gzip.rb +24 -0
  79. data/lib/flipper/serializers/json.rb +19 -0
  80. data/lib/flipper/spec/shared_adapter_specs.rb +29 -11
  81. data/lib/flipper/test/shared_adapter_test.rb +24 -5
  82. data/lib/flipper/typecast.rb +34 -6
  83. data/lib/flipper/types/percentage.rb +1 -1
  84. data/lib/flipper/version.rb +1 -1
  85. data/lib/flipper.rb +38 -1
  86. data/spec/flipper/adapter_builder_spec.rb +73 -0
  87. data/spec/flipper/adapter_spec.rb +1 -0
  88. data/spec/flipper/adapters/http_spec.rb +39 -5
  89. data/spec/flipper/adapters/memoizable_spec.rb +15 -15
  90. data/spec/flipper/adapters/read_only_spec.rb +26 -11
  91. data/spec/flipper/adapters/strict_spec.rb +62 -0
  92. data/spec/flipper/adapters/sync/feature_synchronizer_spec.rb +27 -0
  93. data/spec/flipper/cloud/configuration_spec.rb +6 -23
  94. data/spec/flipper/cloud/telemetry/backoff_policy_spec.rb +108 -0
  95. data/spec/flipper/cloud/telemetry/metric_spec.rb +87 -0
  96. data/spec/flipper/cloud/telemetry/metric_storage_spec.rb +58 -0
  97. data/spec/flipper/cloud/telemetry/submitter_spec.rb +145 -0
  98. data/spec/flipper/cloud/telemetry_spec.rb +156 -0
  99. data/spec/flipper/cloud_spec.rb +12 -12
  100. data/spec/flipper/configuration_spec.rb +17 -0
  101. data/spec/flipper/dsl_spec.rb +39 -0
  102. data/spec/flipper/engine_spec.rb +108 -7
  103. data/spec/flipper/exporters/json/v1_spec.rb +3 -3
  104. data/spec/flipper/expression/builder_spec.rb +248 -0
  105. data/spec/flipper/expression_spec.rb +188 -0
  106. data/spec/flipper/expressions/all_spec.rb +15 -0
  107. data/spec/flipper/expressions/any_spec.rb +15 -0
  108. data/spec/flipper/expressions/boolean_spec.rb +15 -0
  109. data/spec/flipper/expressions/duration_spec.rb +43 -0
  110. data/spec/flipper/expressions/equal_spec.rb +24 -0
  111. data/spec/flipper/expressions/greater_than_or_equal_to_spec.rb +28 -0
  112. data/spec/flipper/expressions/greater_than_spec.rb +28 -0
  113. data/spec/flipper/expressions/less_than_or_equal_to_spec.rb +28 -0
  114. data/spec/flipper/expressions/less_than_spec.rb +32 -0
  115. data/spec/flipper/expressions/not_equal_spec.rb +15 -0
  116. data/spec/flipper/expressions/now_spec.rb +11 -0
  117. data/spec/flipper/expressions/number_spec.rb +21 -0
  118. data/spec/flipper/expressions/percentage_of_actors_spec.rb +20 -0
  119. data/spec/flipper/expressions/percentage_spec.rb +15 -0
  120. data/spec/flipper/expressions/property_spec.rb +13 -0
  121. data/spec/flipper/expressions/random_spec.rb +9 -0
  122. data/spec/flipper/expressions/string_spec.rb +11 -0
  123. data/spec/flipper/expressions/time_spec.rb +13 -0
  124. data/spec/flipper/feature_spec.rb +360 -1
  125. data/spec/flipper/gate_values_spec.rb +2 -2
  126. data/spec/flipper/gates/expression_spec.rb +108 -0
  127. data/spec/flipper/identifier_spec.rb +4 -5
  128. data/spec/flipper/instrumentation/statsd_subscriber_spec.rb +15 -1
  129. data/spec/flipper/middleware/memoizer_spec.rb +67 -0
  130. data/spec/flipper/serializers/gzip_spec.rb +13 -0
  131. data/spec/flipper/serializers/json_spec.rb +13 -0
  132. data/spec/flipper/typecast_spec.rb +43 -7
  133. data/spec/flipper/types/actor_spec.rb +18 -1
  134. data/spec/flipper_integration_spec.rb +102 -4
  135. data/spec/flipper_spec.rb +89 -1
  136. data/spec/spec_helper.rb +5 -0
  137. data/spec/support/actor_names.yml +1 -0
  138. data/spec/support/fake_backoff_policy.rb +15 -0
  139. data/spec/support/spec_helpers.rb +11 -3
  140. metadata +110 -25
  141. data/.tool-versions +0 -1
  142. 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.pre
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-02 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,11 +31,11 @@ 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"
51
38
  - ".rspec"
52
- - ".tool-versions"
53
39
  - CODE_OF_CONDUCT.md
54
40
  - Changelog.md
55
41
  - Dockerfile
@@ -72,6 +58,7 @@ files:
72
58
  - examples/api/memoized.ru
73
59
  - examples/basic.rb
74
60
  - examples/cloud/app.ru
61
+ - examples/cloud/backoff_policy.rb
75
62
  - examples/cloud/basic.rb
76
63
  - examples/cloud/cloud_setup.rb
77
64
  - examples/cloud/forked.rb
@@ -80,6 +67,7 @@ files:
80
67
  - examples/configuring_default.rb
81
68
  - examples/dsl.rb
82
69
  - examples/enabled_for_actor.rb
70
+ - examples/expressions.rb
83
71
  - examples/group.rb
84
72
  - examples/group_dynamic_lookup.rb
85
73
  - examples/group_with_members.rb
@@ -93,11 +81,13 @@ files:
93
81
  - examples/percentage_of_actors_enabled_check.rb
94
82
  - examples/percentage_of_actors_group.rb
95
83
  - examples/percentage_of_time.rb
84
+ - examples/strict.rb
96
85
  - flipper-cloud.gemspec
97
86
  - flipper.gemspec
98
87
  - lib/flipper.rb
99
88
  - lib/flipper/actor.rb
100
89
  - lib/flipper/adapter.rb
90
+ - lib/flipper/adapter_builder.rb
101
91
  - lib/flipper/adapters/dual_write.rb
102
92
  - lib/flipper/adapters/failover.rb
103
93
  - lib/flipper/adapters/failsafe.rb
@@ -112,6 +102,7 @@ files:
112
102
  - lib/flipper/adapters/poll/poller.rb
113
103
  - lib/flipper/adapters/pstore.rb
114
104
  - lib/flipper/adapters/read_only.rb
105
+ - lib/flipper/adapters/strict.rb
115
106
  - lib/flipper/adapters/sync.rb
116
107
  - lib/flipper/adapters/sync/feature_synchronizer.rb
117
108
  - lib/flipper/adapters/sync/interval_synchronizer.rb
@@ -119,10 +110,15 @@ files:
119
110
  - lib/flipper/cloud.rb
120
111
  - lib/flipper/cloud/configuration.rb
121
112
  - lib/flipper/cloud/dsl.rb
122
- - lib/flipper/cloud/instrumenter.rb
123
113
  - lib/flipper/cloud/message_verifier.rb
124
114
  - lib/flipper/cloud/middleware.rb
125
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
126
122
  - lib/flipper/configuration.rb
127
123
  - lib/flipper/dsl.rb
128
124
  - lib/flipper/engine.rb
@@ -131,12 +127,35 @@ files:
131
127
  - lib/flipper/exporter.rb
132
128
  - lib/flipper/exporters/json/export.rb
133
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
134
152
  - lib/flipper/feature.rb
135
153
  - lib/flipper/feature_check_context.rb
136
154
  - lib/flipper/gate.rb
137
155
  - lib/flipper/gate_values.rb
138
156
  - lib/flipper/gates/actor.rb
139
157
  - lib/flipper/gates/boolean.rb
158
+ - lib/flipper/gates/expression.rb
140
159
  - lib/flipper/gates/group.rb
141
160
  - lib/flipper/gates/percentage_of_actors.rb
142
161
  - lib/flipper/gates/percentage_of_time.rb
@@ -152,6 +171,8 @@ files:
152
171
  - lib/flipper/middleware/setup_env.rb
153
172
  - lib/flipper/poller.rb
154
173
  - lib/flipper/registry.rb
174
+ - lib/flipper/serializers/gzip.rb
175
+ - lib/flipper/serializers/json.rb
155
176
  - lib/flipper/spec/shared_adapter_specs.rb
156
177
  - lib/flipper/test/shared_adapter_test.rb
157
178
  - lib/flipper/type.rb
@@ -166,6 +187,7 @@ files:
166
187
  - spec/fixtures/feature.json
167
188
  - spec/fixtures/flipper_pstore_1679087600.json
168
189
  - spec/flipper/actor_spec.rb
190
+ - spec/flipper/adapter_builder_spec.rb
169
191
  - spec/flipper/adapter_spec.rb
170
192
  - spec/flipper/adapters/dual_write_spec.rb
171
193
  - spec/flipper/adapters/failover_spec.rb
@@ -177,6 +199,7 @@ files:
177
199
  - spec/flipper/adapters/operation_logger_spec.rb
178
200
  - spec/flipper/adapters/pstore_spec.rb
179
201
  - spec/flipper/adapters/read_only_spec.rb
202
+ - spec/flipper/adapters/strict_spec.rb
180
203
  - spec/flipper/adapters/sync/feature_synchronizer_spec.rb
181
204
  - spec/flipper/adapters/sync/interval_synchronizer_spec.rb
182
205
  - spec/flipper/adapters/sync/synchronizer_spec.rb
@@ -185,6 +208,11 @@ files:
185
208
  - spec/flipper/cloud/dsl_spec.rb
186
209
  - spec/flipper/cloud/message_verifier_spec.rb
187
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
188
216
  - spec/flipper/cloud_spec.rb
189
217
  - spec/flipper/configuration_spec.rb
190
218
  - spec/flipper/dsl_spec.rb
@@ -193,12 +221,33 @@ files:
193
221
  - spec/flipper/exporter_spec.rb
194
222
  - spec/flipper/exporters/json/export_spec.rb
195
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
196
244
  - spec/flipper/feature_check_context_spec.rb
197
245
  - spec/flipper/feature_spec.rb
198
246
  - spec/flipper/gate_spec.rb
199
247
  - spec/flipper/gate_values_spec.rb
200
248
  - spec/flipper/gates/actor_spec.rb
201
249
  - spec/flipper/gates/boolean_spec.rb
250
+ - spec/flipper/gates/expression_spec.rb
202
251
  - spec/flipper/gates/group_spec.rb
203
252
  - spec/flipper/gates/percentage_of_actors_spec.rb
204
253
  - spec/flipper/gates/percentage_of_time_spec.rb
@@ -211,6 +260,8 @@ files:
211
260
  - spec/flipper/middleware/setup_env_spec.rb
212
261
  - spec/flipper/poller_spec.rb
213
262
  - spec/flipper/registry_spec.rb
263
+ - spec/flipper/serializers/gzip_spec.rb
264
+ - spec/flipper/serializers/json_spec.rb
214
265
  - spec/flipper/typecast_spec.rb
215
266
  - spec/flipper/types/actor_spec.rb
216
267
  - spec/flipper/types/boolean_spec.rb
@@ -221,8 +272,10 @@ files:
221
272
  - spec/flipper_integration_spec.rb
222
273
  - spec/flipper_spec.rb
223
274
  - spec/spec_helper.rb
275
+ - spec/support/actor_names.yml
224
276
  - spec/support/climate_control.rb
225
277
  - spec/support/descriptions.yml
278
+ - spec/support/fake_backoff_policy.rb
226
279
  - spec/support/fake_udp_socket.rb
227
280
  - spec/support/skippable.rb
228
281
  - spec/support/spec_helpers.rb
@@ -236,9 +289,9 @@ licenses:
236
289
  metadata:
237
290
  documentation_uri: https://www.flippercloud.io/docs
238
291
  homepage_uri: https://www.flippercloud.io
239
- source_code_uri: https://github.com/jnunemaker/flipper
240
- bug_tracker_uri: https://github.com/jnunemaker/flipper/issues
241
- changelog_uri: https://github.com/jnunemaker/flipper/blob/main/Changelog.md
292
+ source_code_uri: https://github.com/flippercloud/flipper
293
+ bug_tracker_uri: https://github.com/flippercloud/flipper/issues
294
+ changelog_uri: https://github.com/flippercloud/flipper/blob/main/Changelog.md
242
295
  post_install_message:
243
296
  rdoc_options: []
244
297
  require_paths:
@@ -250,18 +303,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
250
303
  version: '0'
251
304
  required_rubygems_version: !ruby/object:Gem::Requirement
252
305
  requirements:
253
- - - ">"
306
+ - - ">="
254
307
  - !ruby/object:Gem::Version
255
- version: 1.3.1
308
+ version: '0'
256
309
  requirements: []
257
- rubygems_version: 3.3.7
310
+ rubygems_version: 3.4.10
258
311
  signing_key:
259
312
  specification_version: 4
260
- summary: Feature flipper for ANYTHING
313
+ summary: Beautiful, performant feature flags for Ruby.
261
314
  test_files:
262
315
  - spec/fixtures/feature.json
263
316
  - spec/fixtures/flipper_pstore_1679087600.json
264
317
  - spec/flipper/actor_spec.rb
318
+ - spec/flipper/adapter_builder_spec.rb
265
319
  - spec/flipper/adapter_spec.rb
266
320
  - spec/flipper/adapters/dual_write_spec.rb
267
321
  - spec/flipper/adapters/failover_spec.rb
@@ -273,6 +327,7 @@ test_files:
273
327
  - spec/flipper/adapters/operation_logger_spec.rb
274
328
  - spec/flipper/adapters/pstore_spec.rb
275
329
  - spec/flipper/adapters/read_only_spec.rb
330
+ - spec/flipper/adapters/strict_spec.rb
276
331
  - spec/flipper/adapters/sync/feature_synchronizer_spec.rb
277
332
  - spec/flipper/adapters/sync/interval_synchronizer_spec.rb
278
333
  - spec/flipper/adapters/sync/synchronizer_spec.rb
@@ -281,6 +336,11 @@ test_files:
281
336
  - spec/flipper/cloud/dsl_spec.rb
282
337
  - spec/flipper/cloud/message_verifier_spec.rb
283
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
284
344
  - spec/flipper/cloud_spec.rb
285
345
  - spec/flipper/configuration_spec.rb
286
346
  - spec/flipper/dsl_spec.rb
@@ -289,12 +349,33 @@ test_files:
289
349
  - spec/flipper/exporter_spec.rb
290
350
  - spec/flipper/exporters/json/export_spec.rb
291
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
292
372
  - spec/flipper/feature_check_context_spec.rb
293
373
  - spec/flipper/feature_spec.rb
294
374
  - spec/flipper/gate_spec.rb
295
375
  - spec/flipper/gate_values_spec.rb
296
376
  - spec/flipper/gates/actor_spec.rb
297
377
  - spec/flipper/gates/boolean_spec.rb
378
+ - spec/flipper/gates/expression_spec.rb
298
379
  - spec/flipper/gates/group_spec.rb
299
380
  - spec/flipper/gates/percentage_of_actors_spec.rb
300
381
  - spec/flipper/gates/percentage_of_time_spec.rb
@@ -307,6 +388,8 @@ test_files:
307
388
  - spec/flipper/middleware/setup_env_spec.rb
308
389
  - spec/flipper/poller_spec.rb
309
390
  - spec/flipper/registry_spec.rb
391
+ - spec/flipper/serializers/gzip_spec.rb
392
+ - spec/flipper/serializers/json_spec.rb
310
393
  - spec/flipper/typecast_spec.rb
311
394
  - spec/flipper/types/actor_spec.rb
312
395
  - spec/flipper/types/boolean_spec.rb
@@ -317,8 +400,10 @@ test_files:
317
400
  - spec/flipper_integration_spec.rb
318
401
  - spec/flipper_spec.rb
319
402
  - spec/spec_helper.rb
403
+ - spec/support/actor_names.yml
320
404
  - spec/support/climate_control.rb
321
405
  - spec/support/descriptions.yml
406
+ - spec/support/fake_backoff_policy.rb
322
407
  - spec/support/fake_udp_socket.rb
323
408
  - spec/support/skippable.rb
324
409
  - spec/support/spec_helpers.rb
data/.tool-versions DELETED
@@ -1 +0,0 @@
1
- ruby 3.1.2
@@ -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