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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f93e18c3bfdce3ba46b83aa08594796a3b394c6991bc60a8084de865d36c03d9
4
- data.tar.gz: 6a3cf44dee1303fa16c0068a9d8f3a9b8f84671c3f023a6b39be30da3c191662
3
+ metadata.gz: d9ab240ee6674acbd17dd987934bbf0f8e43b70904412fa7320c15bf87ca85fd
4
+ data.tar.gz: 5b95143bed4e182588d273c81961e8de3e0eb9ebe38ef3514ec5ffd14e47f12f
5
5
  SHA512:
6
- metadata.gz: 9646249f3c0e7c534cdd32fe96e71383c4d914fb141973e44b0509162a0d1a13c7e6731085eb5b549fe747eff23a0ff6cc61de946ac63fa50c536e0863d9c773
7
- data.tar.gz: 474d240fd9fe19a245f10534e812d0dbaaad2ccc587c04dc86374750158442fe64e152c780f7be8fd5609c2e6da0c0047eaa48277cfef64acc0eec643399bf24
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 helper
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 |
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Philiprehberger
4
4
  module FeatureFlag
5
- VERSION = '0.4.0'
5
+ VERSION = '0.5.0'
6
6
  end
7
7
  end
@@ -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.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-23 00:00:00.000000000 Z
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.