def fetch(key, default = nil, options = nil)
      if block_given?
        raise ArgumentError, 'Only one argument accepted if block is given' if options
        result = load(key, default || {})
        result == nil ? yield(key) : result
      else
        result = load(key, options || {})
        result == nil ? default : result
      end
    end
def fetch(key, default = nil, options = nil)
      if block_given?
        raise ArgumentError, 'Only one argument accepted if block is given' if options
        result = load(key, default || {})
        result == nil ? yield(key) : result
      else
        result = load(key, options || {})
        result == nil ? default : result
      end
    end
Fetch a value with a key

 @overload fetch(key, options = {}, &block)
   retrieve a key. if the key is not available, execute the
   block and return its return value.
   @param [Object] key
   @param [Hash] options
   @option options [Integer] :expires Update expiration time (See {Expires})
   @option options [Boolean] :raw Raw access without value transformation (See {Transformer})
   @option options [String] :prefix Prefix key (See {Transformer})
   @return [Object] value from store

 @overload fetch(key, default, options = {})
   retrieve a key. if the key is not available, return the default value.
   @param [Object] key
   @param [Object] default Default value
   @param [Hash] options
   @option options [Integer] :expires Update expiration time (See {Expires})
   @option options [Boolean] :raw Raw access without value transformation (See {Transformer})
   @option options [String] :prefix Prefix key (See {Transformer})
   @return [Object] value from store

 @api public