Sha256: ac8e21cb3c40f36c14cc1d81530c824b2e149b2ca592ed47744b992d1042b77c

Contents?: true

Size: 1.14 KB

Versions: 21

Compression:

Stored size: 1.14 KB

Contents

begin
  require "xattr"
rescue LoadError
  puts "You need the xattr gem to use the Xattr moneta store"
  exit
end
require "fileutils"

module Moneta
  class Xattr
    include Defaults
    
    def initialize(options = {})
      file = options[:file]
      @hash = ::Xattr.new(file)
      FileUtils.mkdir_p(::File.dirname(file))
      FileUtils.touch(file)
      unless options[:skip_expires]
        @expiration = Moneta::Xattr.new(:file => "#{file}_expiration", :skip_expires => true)
        self.extend(Expires)
      end
    end
    
    module Implementation
      
      def key?(key)
        @hash.list.include?(key)
      end
      
      alias has_key? key?
      
      def [](key)
        return nil unless key?(key)
        Marshal.load(@hash.get(key))
      end
      
      def []=(key, value)
        @hash.set(key, Marshal.dump(value))
      end
      
      def delete(key)
        return nil unless key?(key)
        value = self[key]
        @hash.remove(key)
        value
      end
      
      def clear
        @hash.list.each do |item|
          @hash.remove(item)
        end
      end
      
    end
    include Implementation
    
  end
end

Version data entries

21 entries across 21 versions & 10 rubygems

Version Path
moneta-0.6.0 lib/moneta/xattr.rb