philiprehberger-feature_flag 0.4.0 → 0.5.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/CHANGELOG.md +6 -0
- data/README.md +23 -1
- data/lib/philiprehberger/feature_flag/version.rb +1 -1
- data/lib/philiprehberger/feature_flag.rb +30 -0
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d9ab240ee6674acbd17dd987934bbf0f8e43b70904412fa7320c15bf87ca85fd
|
|
4
|
+
data.tar.gz: 5b95143bed4e182588d273c81961e8de3e0eb9ebe38ef3514ec5ffd14e47f12f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3e024c67a8ffba1e6277c499f33b553339c3c2868cf52069aec8c4d4a3be82b7b0879a6fd858524b0b8e21b3d1d41b90710c0832a4ad080ba1bccb99119e1655
|
|
7
|
+
data.tar.gz: 296f281debc07bd19bcf65325f46446d9bae166479c6e733d7b5bae7408a1a2ae94fdd781e510aeb052049f7a9add0524fc67fe11e7761d78b86d340af2f56fa
|
data/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.5.0] - 2026-04-26
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- `FeatureFlag.reset_all!` — clear all registered flags, overrides, and metrics in one call (intended for test cleanup)
|
|
14
|
+
- `FeatureFlag.flags` — list registered flag names
|
|
15
|
+
|
|
10
16
|
## [0.4.0] - 2026-04-23
|
|
11
17
|
|
|
12
18
|
### Added
|
data/README.md
CHANGED
|
@@ -221,7 +221,10 @@ export FEATURE_DARK_MODE=true
|
|
|
221
221
|
export FEATURE_BETA_SEARCH=false
|
|
222
222
|
```
|
|
223
223
|
|
|
224
|
-
### Test
|
|
224
|
+
### Test Helpers
|
|
225
|
+
|
|
226
|
+
`with` scopes a single override to a block — the original value is restored
|
|
227
|
+
when the block exits.
|
|
225
228
|
|
|
226
229
|
```ruby
|
|
227
230
|
Philiprehberger::FeatureFlag.with(:dark_mode, true) do
|
|
@@ -231,6 +234,23 @@ end
|
|
|
231
234
|
# original value restored after block
|
|
232
235
|
```
|
|
233
236
|
|
|
237
|
+
`reset_all!` clears every piece of registry state — backend-stored flags,
|
|
238
|
+
overrides, metrics, dependencies, schedules, targets, and groups. Pair it
|
|
239
|
+
with `flags` to assert a clean slate at the start of each example.
|
|
240
|
+
|
|
241
|
+
```ruby
|
|
242
|
+
RSpec.configure do |config|
|
|
243
|
+
config.before(:each) { Philiprehberger::FeatureFlag.reset_all! }
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
# In a spec
|
|
247
|
+
Philiprehberger::FeatureFlag.configuration.backend.set(:dark_mode, true)
|
|
248
|
+
Philiprehberger::FeatureFlag.flags # => [:dark_mode]
|
|
249
|
+
|
|
250
|
+
Philiprehberger::FeatureFlag.reset_all!
|
|
251
|
+
Philiprehberger::FeatureFlag.flags # => []
|
|
252
|
+
```
|
|
253
|
+
|
|
234
254
|
### Reloading
|
|
235
255
|
|
|
236
256
|
```ruby
|
|
@@ -263,6 +283,8 @@ flags.flag_names
|
|
|
263
283
|
| `.with(flag, value) { }` | Override a flag in a block |
|
|
264
284
|
| `.reload!` | Reload flags from the backend |
|
|
265
285
|
| `.reset!` | Reset configuration and overrides |
|
|
286
|
+
| `.reset_all!` | Reset every piece of registry state (flags, overrides, metrics, dependencies, schedules, targets, groups) — intended for test cleanup |
|
|
287
|
+
| `.flags` | List registered flag names (alias of `.flag_names`) |
|
|
266
288
|
| `.flag_names` | Sorted, deduplicated list of all known flag names |
|
|
267
289
|
| `.depends_on(flag, requires:)` | Declare a flag dependency |
|
|
268
290
|
| `.schedule(flag, enable_at:, disable_at:)` | Schedule flag activation window |
|
|
@@ -127,6 +127,36 @@ module Philiprehberger
|
|
|
127
127
|
reset_groups!
|
|
128
128
|
end
|
|
129
129
|
|
|
130
|
+
# Fully reset every piece of registry state — backend-stored flags,
|
|
131
|
+
# in-flight overrides, recorded metrics, dependencies, schedules,
|
|
132
|
+
# targets, context predicates, and groups. Intended for use in test
|
|
133
|
+
# suites (e.g. +before(:each) { FeatureFlag.reset_all! }+) so each
|
|
134
|
+
# example starts from a clean slate. Safe to call when nothing is
|
|
135
|
+
# registered.
|
|
136
|
+
#
|
|
137
|
+
# @return [void]
|
|
138
|
+
def reset_all!
|
|
139
|
+
@configuration = nil
|
|
140
|
+
@overrides = nil
|
|
141
|
+
reset_dependencies!
|
|
142
|
+
reset_schedules!
|
|
143
|
+
reset_metrics!
|
|
144
|
+
reset_targets!
|
|
145
|
+
reset_groups!
|
|
146
|
+
nil
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Return the array of registered flag names. A flag is considered
|
|
150
|
+
# registered when it has been stored on the backend or referenced by
|
|
151
|
+
# any of the dependency, schedule, targeting, or group subsystems.
|
|
152
|
+
# Equivalent to {.flag_names} — kept as a shorter alias for callers
|
|
153
|
+
# that want the registered list without thinking about ordering.
|
|
154
|
+
#
|
|
155
|
+
# @return [Array<Symbol>] sorted, deduplicated registered flag names
|
|
156
|
+
def flags
|
|
157
|
+
flag_names
|
|
158
|
+
end
|
|
159
|
+
|
|
130
160
|
private
|
|
131
161
|
|
|
132
162
|
def backend_flag_names
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: philiprehberger-feature_flag
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Philip Rehberger
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-04-
|
|
11
|
+
date: 2026-04-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: A lightweight feature flag library supporting in-memory, ENV, and YAML
|
|
14
14
|
backends with percentage rollout and A/B variant support.
|