Sha256: 22e86e0c9a49a2d19e68a3f3841dfd44817855acce831c3c9d3528e0eefd6aee

Contents?: true

Size: 1.44 KB

Versions: 1

Compression:

Stored size: 1.44 KB

Contents

module Flipper
  module Adapters
    # Public: Adapter that wraps another adapter and stores the operations.
    #
    # Useful in tests to verify calls and such.
    class OperationLogger
      attr_reader :operations

      Read      = Struct.new(:key)
      Write     = Struct.new(:key, :value)
      Delete    = Struct.new(:key)
      SetAdd    = Struct.new(:key, :value)
      SetDelete = Struct.new(:key, :value)
      SetMember = Struct.new(:key)

      # Public
      def initialize(adapter)
        @operations = []
        @adapter = adapter
      end

      # Public
      def read(key)
        @operations << Read.new(key.to_s)
        @adapter.read key
      end

      # Public
      def write(key, value)
        @operations << Write.new(key.to_s, value)
        @adapter.write key, value
      end

      # Public
      def delete(key)
        @operations << Delete.new(key.to_s, nil)
        @adapter.delete key
      end

      # Public
      def set_add(key, value)
        @operations << SetAdd.new(key.to_s, value)
        @adapter.set_add key, value
      end

      # Public
      def set_delete(key, value)
        @operations << SetDelete.new(key.to_s, value)
        @adapter.set_delete key, value
      end

      # Public
      def set_members(key)
        @operations << SetMembers.new(key.to_s)
        @adapter.set_members key
      end

      # Public: Clears operation log
      def reset
        @operations.clear
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
flipper-0.4.0 lib/flipper/adapters/operation_logger.rb