Sha256: 9fe4157d9b4fc649a23656af3f30d2dbc9dbbbdfc7853699efa39e1fbed5244e

Contents?: true

Size: 1.15 KB

Versions: 3

Compression:

Stored size: 1.15 KB

Contents

# encoding: utf-8

require_relative 'strategy/new'
require_relative 'strategy/classic'

module RedisCopy
  module Strategy
    # @param source [Redis]
    # @param destination [Redis]
    def self.load(source, destination, ui, options = {})
      strategy = options.fetch(:strategy, :auto).to_sym
      new_compatible = [source, destination].all?(&New.method(:compatible?))
      copierklass = case strategy
                    when :classic then Classic
                    when :new
                      raise ArgumentError unless new_compatible
                      New
                    when :auto
                      new_compatible ? New : Classic
                    end
      copierklass.new(source, destination, ui, options)
    end

    # @param source [Redis]
    # @param destination [Redis]
    def initialize(source, destination, ui, options = {})
      @src = source
      @dst = destination
      @ui  = ui
      @opt = options.dup
    end

    def to_s
      self.class.name.demodulize.humanize
    end

    # @param key [String]
    # @return [Boolean]
    def copy(key)
      return super if defined? super
      raise NotImplementedError
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
redis-copy-0.0.3 lib/redis-copy/strategy.rb
redis-copy-0.0.2 lib/redis-copy/strategy.rb
redis-copy-0.0.1 lib/redis-copy/strategy.rb