Module: Philiprehberger::FeatureFlag::Scheduling

Included in:
Philiprehberger::FeatureFlag
Defined in:
lib/philiprehberger/feature_flag/scheduling.rb

Instance Method Summary collapse

Instance Method Details

#reset_schedules!Object



33
34
35
# File 'lib/philiprehberger/feature_flag/scheduling.rb', line 33

def reset_schedules!
  @schedules = nil
end

#schedule(flag, enable_at: nil, disable_at: nil) ⇒ Hash

Register a time-bounded activation window for flag. A flag is considered active when Time.now is at or after enable_at (if set) and strictly before disable_at (if set).

Parameters:

  • flag (Symbol, String)

    flag name

  • enable_at (Time, nil) (defaults to: nil)

    inclusive start of the window

  • disable_at (Time, nil) (defaults to: nil)

    exclusive end of the window

Returns:

  • (Hash)

    the stored schedule entry

Raises:

  • (ArgumentError)

    if either bound is non-nil and not a Time (validated at check time via #scheduled_active?)



16
17
18
19
# File 'lib/philiprehberger/feature_flag/scheduling.rb', line 16

def schedule(flag, enable_at: nil, disable_at: nil)
  @schedules ||= {}
  @schedules[flag.to_sym] = { enable_at: enable_at, disable_at: disable_at }
end

#schedule_for(flag) ⇒ Object



21
22
23
# File 'lib/philiprehberger/feature_flag/scheduling.rb', line 21

def schedule_for(flag)
  @schedules&.dig(flag.to_sym)
end

#scheduled_active?(flag) ⇒ Boolean

Returns:

  • (Boolean)


25
26
27
28
29
30
31
# File 'lib/philiprehberger/feature_flag/scheduling.rb', line 25

def scheduled_active?(flag)
  sched = schedule_for(flag)
  return true if sched.nil?

  now = Time.now
  check_schedule_window(now, sched)
end