Sha256: ebc700e83cb1dcbe4939d0f6f38bfc74f140ffeec998d818af0fb28fbf1f39f9

Contents?: true

Size: 1.04 KB

Versions: 1

Compression:

Stored size: 1.04 KB

Contents

# frozen_string_literal: true

module Sbmt
  module Strangler
    module Flipper
      FLIPPER_ID_STRUCT = Struct.new(:flipper_id)
      ONTIME_ACTOR_REGEXP = /^ONTIME:(\d{2})-(\d{2})$/

      class << self
        delegate :add, to: ::Flipper

        def enabled?(feature_name, *actors)
          raise "feature name is blank" if feature_name.blank?

          actors = Array(actors).flatten.compact
          ::Flipper.enabled?(feature_name, *actors.map { FLIPPER_ID_STRUCT.new(_1) })
        end

        def enabled_on_time?(feature_name)
          raise "feature name is blank" if feature_name.blank?

          hours_ranges =
            ::Flipper[feature_name]
              .actors_value
              .filter_map { |e|
                e.match(ONTIME_ACTOR_REGEXP) {
                  $LAST_MATCH_INFO.captures.map(&:to_i)
                }
              }
              .compact

          hour_now = DateTime.now.in_time_zone.hour
          hours_ranges.any? { |range| (range.first..range.last).cover?(hour_now) }
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sbmt-strangler-0.9.1 lib/sbmt/strangler/flipper.rb