Sha256: f0239e32767901f33b14452e6f7215c632e70f8cf48ee164ec5a9390cc7e3c88

Contents?: true

Size: 1.12 KB

Versions: 1

Compression:

Stored size: 1.12 KB

Contents

require 'flipper'
require 'flipper/adapters/memory'
require 'delegate'
require 'timeout'

module Flipper
  module Adapters
    class Fallback < SimpleDelegator
      VERSION = '0.1.0'

      def initialize(primary_adapter, options = {}, fallback_adapter = Flipper::Adapters::Memory.new)
        super(primary_adapter)
        @primary_adapter = primary_adapter
        @fallback_adapter = fallback_adapter

        @delegate_sd_obj = primary_adapter

        @on_error = options[:on_error] || lambda do |error, primary_adapter, fallback_adapter|
          STDERR.puts("[Flipper::Adapters::Fallback] Primary adapter(#{primary_adapter.inspect}) Failure! #{error}")
          STDERR.puts("[Flipper::Adapters::Fallback] Falling back to #{fallback_adapter.inspect})")
        end

        @timeout = options[:timeout]
      end

      def method_missing(m, *args, &block)
        Timeout::timeout(@timeout) do
          begin
            super
          rescue => error
            @on_error.call(error, @primary_adapter, @fallback_adapter)
            @fallback_adapter.__send__(m, *args, &block)
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
flipper-fallback-0.1.0 lib/flipper/adapters/fallback.rb