Sha256: 511e49921e5a1df2440a46f7400f2ffb571b77034e6ca5fb9df22c43208cc9da

Contents?: true

Size: 845 Bytes

Versions: 1

Compression:

Stored size: 845 Bytes

Contents

module HashPersistent
  module Resource
    def self.included(base)
      base.extend ClassMethods
      base.module_eval do
        @store = {}
        @prefix = ""
      end
    end
    
    module ClassMethods
      def persist_to(store, prefix)
        raise ArgumentError unless store.respond_to?(:has_key?) and prefix.respond_to?(:to_s)
        @store = store
        @prefix = prefix
      end
    
      def find(key)
        @store[@prefix + key]
      end
    
      attr_reader :store, :prefix
    end

    attr_accessor :key

    def prefix_key
      self.class.prefix + key
    end

    def save
      raise RuntimeError unless key
      self.class.store[prefix_key] = self
    end

    def delete
      raise RuntimeError unless self.class.store.has_key?(prefix_key)
      self.class.store.delete(prefix_key)
    end
  
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kissifer-hash-persistent-0.1.1 lib/hash-persistent/resource.rb