flipper 1.3.5 → 1.4.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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +8 -5
- data/.github/workflows/examples.yml +4 -3
- data/.github/workflows/release.yml +54 -0
- data/CLAUDE.md +87 -0
- data/README.md +4 -3
- data/examples/cloud/poll_interval/README.md +111 -0
- data/examples/cloud/poll_interval/client.rb +108 -0
- data/examples/cloud/poll_interval/server.rb +98 -0
- data/examples/expressions.rb +35 -11
- data/lib/flipper/adapter.rb +17 -1
- data/lib/flipper/adapters/actor_limit.rb +27 -1
- data/lib/flipper/adapters/cache_base.rb +21 -3
- data/lib/flipper/adapters/dual_write.rb +6 -2
- data/lib/flipper/adapters/failover.rb +9 -3
- data/lib/flipper/adapters/failsafe.rb +2 -2
- data/lib/flipper/adapters/http/client.rb +15 -4
- data/lib/flipper/adapters/http.rb +37 -2
- data/lib/flipper/adapters/instrumented.rb +2 -2
- data/lib/flipper/adapters/memoizable.rb +3 -3
- data/lib/flipper/adapters/memory.rb +1 -1
- data/lib/flipper/adapters/pstore.rb +1 -1
- data/lib/flipper/adapters/sync/feature_synchronizer.rb +5 -1
- data/lib/flipper/adapters/sync/synchronizer.rb +10 -5
- data/lib/flipper/adapters/sync.rb +7 -3
- data/lib/flipper/cli.rb +51 -0
- data/lib/flipper/cloud/configuration.rb +9 -4
- data/lib/flipper/cloud/dsl.rb +2 -2
- data/lib/flipper/cloud/middleware.rb +1 -1
- data/lib/flipper/cloud/migrate.rb +71 -0
- data/lib/flipper/cloud/telemetry.rb +1 -1
- data/lib/flipper/cloud.rb +1 -0
- data/lib/flipper/dsl.rb +1 -1
- data/lib/flipper/expressions/feature_enabled.rb +34 -0
- data/lib/flipper/expressions/time.rb +8 -1
- data/lib/flipper/gates/expression.rb +2 -2
- data/lib/flipper/poller.rb +47 -8
- data/lib/flipper/version.rb +1 -1
- data/lib/flipper.rb +17 -1
- data/spec/flipper/adapter_spec.rb +20 -0
- data/spec/flipper/adapters/actor_limit_spec.rb +55 -0
- data/spec/flipper/adapters/dual_write_spec.rb +13 -0
- data/spec/flipper/adapters/failover_spec.rb +12 -0
- data/spec/flipper/adapters/http_spec.rb +151 -0
- data/spec/flipper/adapters/sync/feature_synchronizer_spec.rb +12 -0
- data/spec/flipper/adapters/sync/synchronizer_spec.rb +87 -0
- data/spec/flipper/adapters/sync_spec.rb +13 -0
- data/spec/flipper/cli_spec.rb +51 -0
- data/spec/flipper/cloud/configuration_spec.rb +6 -0
- data/spec/flipper/cloud/dsl_spec.rb +10 -2
- data/spec/flipper/cloud/middleware_spec.rb +34 -16
- data/spec/flipper/cloud/migrate_spec.rb +160 -0
- data/spec/flipper/cloud/telemetry_spec.rb +1 -1
- data/spec/flipper/engine_spec.rb +2 -2
- data/spec/flipper/expressions/time_spec.rb +16 -0
- data/spec/flipper/gates/expression_spec.rb +82 -0
- data/spec/flipper/middleware/memoizer_spec.rb +37 -6
- data/spec/flipper/poller_spec.rb +347 -4
- data/spec/flipper_integration_spec.rb +133 -0
- data/spec/flipper_spec.rb +6 -1
- metadata +17 -112
- data/lib/flipper/expressions/duration.rb +0 -28
- data/spec/flipper/expressions/duration_spec.rb +0 -43
metadata
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: flipper
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- John Nunemaker
|
|
8
|
+
autorequire:
|
|
8
9
|
bindir: exe
|
|
9
10
|
cert_chain: []
|
|
10
|
-
date:
|
|
11
|
+
date: 2026-02-26 00:00:00.000000000 Z
|
|
11
12
|
dependencies:
|
|
12
13
|
- !ruby/object:Gem::Dependency
|
|
13
14
|
name: concurrent-ruby
|
|
@@ -23,6 +24,7 @@ dependencies:
|
|
|
23
24
|
- - "<"
|
|
24
25
|
- !ruby/object:Gem::Version
|
|
25
26
|
version: '2'
|
|
27
|
+
description:
|
|
26
28
|
email: support@flippercloud.io
|
|
27
29
|
executables:
|
|
28
30
|
- flipper
|
|
@@ -34,7 +36,9 @@ files:
|
|
|
34
36
|
- ".github/dependabot.yml"
|
|
35
37
|
- ".github/workflows/ci.yml"
|
|
36
38
|
- ".github/workflows/examples.yml"
|
|
39
|
+
- ".github/workflows/release.yml"
|
|
37
40
|
- ".rspec"
|
|
41
|
+
- CLAUDE.md
|
|
38
42
|
- CODE_OF_CONDUCT.md
|
|
39
43
|
- Changelog.md
|
|
40
44
|
- Dockerfile
|
|
@@ -62,6 +66,9 @@ files:
|
|
|
62
66
|
- examples/cloud/cloud_setup.rb
|
|
63
67
|
- examples/cloud/forked.rb
|
|
64
68
|
- examples/cloud/import.rb
|
|
69
|
+
- examples/cloud/poll_interval/README.md
|
|
70
|
+
- examples/cloud/poll_interval/client.rb
|
|
71
|
+
- examples/cloud/poll_interval/server.rb
|
|
65
72
|
- examples/cloud/threaded.rb
|
|
66
73
|
- examples/configuring_default.rb
|
|
67
74
|
- examples/dsl.rb
|
|
@@ -116,6 +123,7 @@ files:
|
|
|
116
123
|
- lib/flipper/cloud/dsl.rb
|
|
117
124
|
- lib/flipper/cloud/message_verifier.rb
|
|
118
125
|
- lib/flipper/cloud/middleware.rb
|
|
126
|
+
- lib/flipper/cloud/migrate.rb
|
|
119
127
|
- lib/flipper/cloud/routes.rb
|
|
120
128
|
- lib/flipper/cloud/telemetry.rb
|
|
121
129
|
- lib/flipper/cloud/telemetry/backoff_policy.rb
|
|
@@ -138,8 +146,8 @@ files:
|
|
|
138
146
|
- lib/flipper/expressions/any.rb
|
|
139
147
|
- lib/flipper/expressions/boolean.rb
|
|
140
148
|
- lib/flipper/expressions/comparable.rb
|
|
141
|
-
- lib/flipper/expressions/duration.rb
|
|
142
149
|
- lib/flipper/expressions/equal.rb
|
|
150
|
+
- lib/flipper/expressions/feature_enabled.rb
|
|
143
151
|
- lib/flipper/expressions/greater_than.rb
|
|
144
152
|
- lib/flipper/expressions/greater_than_or_equal_to.rb
|
|
145
153
|
- lib/flipper/expressions/less_than.rb
|
|
@@ -226,6 +234,7 @@ files:
|
|
|
226
234
|
- spec/flipper/cloud/dsl_spec.rb
|
|
227
235
|
- spec/flipper/cloud/message_verifier_spec.rb
|
|
228
236
|
- spec/flipper/cloud/middleware_spec.rb
|
|
237
|
+
- spec/flipper/cloud/migrate_spec.rb
|
|
229
238
|
- spec/flipper/cloud/telemetry/backoff_policy_spec.rb
|
|
230
239
|
- spec/flipper/cloud/telemetry/metric_spec.rb
|
|
231
240
|
- spec/flipper/cloud/telemetry/metric_storage_spec.rb
|
|
@@ -244,7 +253,6 @@ files:
|
|
|
244
253
|
- spec/flipper/expressions/all_spec.rb
|
|
245
254
|
- spec/flipper/expressions/any_spec.rb
|
|
246
255
|
- spec/flipper/expressions/boolean_spec.rb
|
|
247
|
-
- spec/flipper/expressions/duration_spec.rb
|
|
248
256
|
- spec/flipper/expressions/equal_spec.rb
|
|
249
257
|
- spec/flipper/expressions/greater_than_or_equal_to_spec.rb
|
|
250
258
|
- spec/flipper/expressions/greater_than_spec.rb
|
|
@@ -314,8 +322,9 @@ metadata:
|
|
|
314
322
|
homepage_uri: https://www.flippercloud.io
|
|
315
323
|
source_code_uri: https://github.com/flippercloud/flipper
|
|
316
324
|
bug_tracker_uri: https://github.com/flippercloud/flipper/issues
|
|
317
|
-
changelog_uri: https://github.com/flippercloud/flipper/releases/tag/v1.
|
|
325
|
+
changelog_uri: https://github.com/flippercloud/flipper/releases/tag/v1.4.0
|
|
318
326
|
funding_uri: https://github.com/sponsors/flippercloud
|
|
327
|
+
post_install_message:
|
|
319
328
|
rdoc_options: []
|
|
320
329
|
require_paths:
|
|
321
330
|
- lib
|
|
@@ -330,112 +339,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
330
339
|
- !ruby/object:Gem::Version
|
|
331
340
|
version: '0'
|
|
332
341
|
requirements: []
|
|
333
|
-
rubygems_version: 3.
|
|
342
|
+
rubygems_version: 3.5.22
|
|
343
|
+
signing_key:
|
|
334
344
|
specification_version: 4
|
|
335
345
|
summary: Beautiful, performant feature flags for Ruby and Rails.
|
|
336
|
-
test_files:
|
|
337
|
-
- spec/fixtures/environment.rb
|
|
338
|
-
- spec/fixtures/feature.json
|
|
339
|
-
- spec/fixtures/flipper_pstore_1679087600.json
|
|
340
|
-
- spec/flipper/actor_spec.rb
|
|
341
|
-
- spec/flipper/adapter_builder_spec.rb
|
|
342
|
-
- spec/flipper/adapter_spec.rb
|
|
343
|
-
- spec/flipper/adapters/actor_limit_spec.rb
|
|
344
|
-
- spec/flipper/adapters/dual_write_spec.rb
|
|
345
|
-
- spec/flipper/adapters/failover_spec.rb
|
|
346
|
-
- spec/flipper/adapters/failsafe_spec.rb
|
|
347
|
-
- spec/flipper/adapters/http/client_spec.rb
|
|
348
|
-
- spec/flipper/adapters/http_spec.rb
|
|
349
|
-
- spec/flipper/adapters/instrumented_spec.rb
|
|
350
|
-
- spec/flipper/adapters/memoizable_spec.rb
|
|
351
|
-
- spec/flipper/adapters/memory_spec.rb
|
|
352
|
-
- spec/flipper/adapters/operation_logger_spec.rb
|
|
353
|
-
- spec/flipper/adapters/poll_spec.rb
|
|
354
|
-
- spec/flipper/adapters/pstore_spec.rb
|
|
355
|
-
- spec/flipper/adapters/read_only_spec.rb
|
|
356
|
-
- spec/flipper/adapters/strict_spec.rb
|
|
357
|
-
- spec/flipper/adapters/sync/feature_synchronizer_spec.rb
|
|
358
|
-
- spec/flipper/adapters/sync/interval_synchronizer_spec.rb
|
|
359
|
-
- spec/flipper/adapters/sync/synchronizer_spec.rb
|
|
360
|
-
- spec/flipper/adapters/sync_spec.rb
|
|
361
|
-
- spec/flipper/cli_spec.rb
|
|
362
|
-
- spec/flipper/cloud/configuration_spec.rb
|
|
363
|
-
- spec/flipper/cloud/dsl_spec.rb
|
|
364
|
-
- spec/flipper/cloud/message_verifier_spec.rb
|
|
365
|
-
- spec/flipper/cloud/middleware_spec.rb
|
|
366
|
-
- spec/flipper/cloud/telemetry/backoff_policy_spec.rb
|
|
367
|
-
- spec/flipper/cloud/telemetry/metric_spec.rb
|
|
368
|
-
- spec/flipper/cloud/telemetry/metric_storage_spec.rb
|
|
369
|
-
- spec/flipper/cloud/telemetry/submitter_spec.rb
|
|
370
|
-
- spec/flipper/cloud/telemetry_spec.rb
|
|
371
|
-
- spec/flipper/cloud_spec.rb
|
|
372
|
-
- spec/flipper/configuration_spec.rb
|
|
373
|
-
- spec/flipper/dsl_spec.rb
|
|
374
|
-
- spec/flipper/engine_spec.rb
|
|
375
|
-
- spec/flipper/export_spec.rb
|
|
376
|
-
- spec/flipper/exporter_spec.rb
|
|
377
|
-
- spec/flipper/exporters/json/export_spec.rb
|
|
378
|
-
- spec/flipper/exporters/json/v1_spec.rb
|
|
379
|
-
- spec/flipper/expression/builder_spec.rb
|
|
380
|
-
- spec/flipper/expression_spec.rb
|
|
381
|
-
- spec/flipper/expressions/all_spec.rb
|
|
382
|
-
- spec/flipper/expressions/any_spec.rb
|
|
383
|
-
- spec/flipper/expressions/boolean_spec.rb
|
|
384
|
-
- spec/flipper/expressions/duration_spec.rb
|
|
385
|
-
- spec/flipper/expressions/equal_spec.rb
|
|
386
|
-
- spec/flipper/expressions/greater_than_or_equal_to_spec.rb
|
|
387
|
-
- spec/flipper/expressions/greater_than_spec.rb
|
|
388
|
-
- spec/flipper/expressions/less_than_or_equal_to_spec.rb
|
|
389
|
-
- spec/flipper/expressions/less_than_spec.rb
|
|
390
|
-
- spec/flipper/expressions/not_equal_spec.rb
|
|
391
|
-
- spec/flipper/expressions/now_spec.rb
|
|
392
|
-
- spec/flipper/expressions/number_spec.rb
|
|
393
|
-
- spec/flipper/expressions/percentage_of_actors_spec.rb
|
|
394
|
-
- spec/flipper/expressions/percentage_spec.rb
|
|
395
|
-
- spec/flipper/expressions/property_spec.rb
|
|
396
|
-
- spec/flipper/expressions/random_spec.rb
|
|
397
|
-
- spec/flipper/expressions/string_spec.rb
|
|
398
|
-
- spec/flipper/expressions/time_spec.rb
|
|
399
|
-
- spec/flipper/feature_check_context_spec.rb
|
|
400
|
-
- spec/flipper/feature_spec.rb
|
|
401
|
-
- spec/flipper/gate_spec.rb
|
|
402
|
-
- spec/flipper/gate_values_spec.rb
|
|
403
|
-
- spec/flipper/gates/actor_spec.rb
|
|
404
|
-
- spec/flipper/gates/boolean_spec.rb
|
|
405
|
-
- spec/flipper/gates/expression_spec.rb
|
|
406
|
-
- spec/flipper/gates/group_spec.rb
|
|
407
|
-
- spec/flipper/gates/percentage_of_actors_spec.rb
|
|
408
|
-
- spec/flipper/gates/percentage_of_time_spec.rb
|
|
409
|
-
- spec/flipper/identifier_spec.rb
|
|
410
|
-
- spec/flipper/instrumentation/log_subscriber_spec.rb
|
|
411
|
-
- spec/flipper/instrumentation/statsd_subscriber_spec.rb
|
|
412
|
-
- spec/flipper/instrumenters/memory_spec.rb
|
|
413
|
-
- spec/flipper/instrumenters/noop_spec.rb
|
|
414
|
-
- spec/flipper/middleware/memoizer_spec.rb
|
|
415
|
-
- spec/flipper/middleware/setup_env_spec.rb
|
|
416
|
-
- spec/flipper/model/active_record_spec.rb
|
|
417
|
-
- spec/flipper/poller_spec.rb
|
|
418
|
-
- spec/flipper/registry_spec.rb
|
|
419
|
-
- spec/flipper/serializers/gzip_spec.rb
|
|
420
|
-
- spec/flipper/serializers/json_spec.rb
|
|
421
|
-
- spec/flipper/typecast_spec.rb
|
|
422
|
-
- spec/flipper/types/actor_spec.rb
|
|
423
|
-
- spec/flipper/types/boolean_spec.rb
|
|
424
|
-
- spec/flipper/types/group_spec.rb
|
|
425
|
-
- spec/flipper/types/percentage_of_actors_spec.rb
|
|
426
|
-
- spec/flipper/types/percentage_of_time_spec.rb
|
|
427
|
-
- spec/flipper/types/percentage_spec.rb
|
|
428
|
-
- spec/flipper_integration_spec.rb
|
|
429
|
-
- spec/flipper_spec.rb
|
|
430
|
-
- spec/spec_helper.rb
|
|
431
|
-
- spec/support/actor_names.yml
|
|
432
|
-
- spec/support/descriptions.yml
|
|
433
|
-
- spec/support/fail_on_output.rb
|
|
434
|
-
- spec/support/fake_backoff_policy.rb
|
|
435
|
-
- spec/support/fake_udp_socket.rb
|
|
436
|
-
- spec/support/skippable.rb
|
|
437
|
-
- spec/support/spec_helpers.rb
|
|
438
|
-
- test/adapters/actor_limit_test.rb
|
|
439
|
-
- test/adapters/memory_test.rb
|
|
440
|
-
- test/adapters/pstore_test.rb
|
|
441
|
-
- test/test_helper.rb
|
|
346
|
+
test_files: []
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
module Flipper
|
|
2
|
-
module Expressions
|
|
3
|
-
class Duration
|
|
4
|
-
SECONDS_PER = {
|
|
5
|
-
"second" => 1,
|
|
6
|
-
"minute" => 60,
|
|
7
|
-
"hour" => 3600,
|
|
8
|
-
"day" => 86400,
|
|
9
|
-
"week" => 604_800,
|
|
10
|
-
"month" => 2_629_746, # 1/12 of a gregorian year
|
|
11
|
-
"year" => 31_556_952 # length of a gregorian year (365.2425 days)
|
|
12
|
-
}.freeze
|
|
13
|
-
|
|
14
|
-
def self.call(scalar, unit = 'second')
|
|
15
|
-
unit = unit.to_s.downcase.chomp("s")
|
|
16
|
-
|
|
17
|
-
unless scalar.is_a?(Numeric)
|
|
18
|
-
raise ArgumentError.new("Duration value must be a number but was #{scalar.inspect}")
|
|
19
|
-
end
|
|
20
|
-
unless SECONDS_PER[unit]
|
|
21
|
-
raise ArgumentError.new("Duration unit #{unit.inspect} must be one of: #{SECONDS_PER.keys.join(', ')}")
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
scalar * SECONDS_PER[unit]
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
RSpec.describe Flipper::Expressions::Duration do
|
|
2
|
-
describe "#call" do
|
|
3
|
-
it "raises error with invalid value" do
|
|
4
|
-
expect { described_class.call(false, 'minute') }.to raise_error(ArgumentError)
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
it "raises error with invalid unit" do
|
|
8
|
-
expect { described_class.call(4, 'score') }.to raise_error(ArgumentError)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
it 'defaults unit to seconds' do
|
|
12
|
-
expect(described_class.call(10)).to eq(10)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
it "evaluates seconds" do
|
|
16
|
-
expect(described_class.call(10, 'seconds')).to eq(10)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
it "evaluates minutes" do
|
|
20
|
-
expect(described_class.call(2, 'minutes')).to eq(120)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
it "evaluates hours" do
|
|
24
|
-
expect(described_class.call(2, 'hours')).to eq(7200)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "evaluates days" do
|
|
28
|
-
expect(described_class.call(2, 'days')).to eq(172_800)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
it "evaluates weeks" do
|
|
32
|
-
expect(described_class.call(2, 'weeks')).to eq(1_209_600)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
it "evaluates months" do
|
|
36
|
-
expect(described_class.call(2, 'months')).to eq(5_259_492)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it "evaluates years" do
|
|
40
|
-
expect(described_class.call(2, 'years')).to eq(63_113_904)
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|