Sha256: 67e53463ed1030b8dd368f48ecb1ec418f82adc31f555df8f2950bc0263a695d

Contents?: true

Size: 1.13 KB

Versions: 2

Compression:

Stored size: 1.13 KB

Contents

module Lawnchair
  module StorageEngine
    class Composite
      attr_reader :storage_engines
    
      def initialize
        @storage_engines = []
      end
      
      def register_storage_engine(storage_engine)
        storage_engines << storage_engine
      end
    
      def fetch(key, options, &block)
        raise "No Storage Engines Configured" if storage_engines.empty?
        
        value, index = find_in_storage(key, options)
        value ||= yield
        place_in_storage(key, value, options, index)
      end
      
      private 
      
      def find_in_storage(key, options)
        value, index = nil, nil
        storage_engines.each_with_index do |storage_engine, i|
          if storage_engine.exists?(key)
            value = storage_engine.get(key, options)
            index = i
            break
          end
        end
        return value, index
      end
      
      def place_in_storage(key, value, options, index)
        storage_engines.each_with_index do |storage_engine, i|
          break if i == index
          storage_engine.set(key, value, options)
        end
        value
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
lawnchair-0.5.1 lib/storage_engine/composite.rb
lawnchair-0.5.0 lib/storage_engine/composite.rb