Skip to content

Commit

Permalink
Dr ab5tract prescribes a taste of the working Waves.cache . include t…
Browse files Browse the repository at this point in the history
…he layer, mkdir appdir/cache , Waves.cache[:awesome] = :yes .
  • Loading branch information
ab5tract committed Sep 23, 2008
1 parent d2399ce commit 842bd3a
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 24 deletions.
41 changes: 18 additions & 23 deletions lib/layers/cache/file/file-ipi.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,43 +7,43 @@ def initialize(arg)
raise ArgumentError, ":dir needs to not be nil" if arg[:dir].nil?
@directory = arg[:dir]
@cache = {}
@keys = []
end

def store(key, value, ttl = {})
def store(key, value, ttl = nil)
key_file = @directory / key
item = {:value => value}
item[:expires] = Time.now + ttl if ttl

Waves.synchronize do

super(key, value, ttl)
@keys << key

key_file = @directory / key

file = File.new(key_file,'w')
Marshal.dump(@cache[key], file)
file = ::File.new(key_file,'w')
Marshal.dump(item, file)
file.close
@cache.delete key

end
end

def delete(*keys)
Waves.synchronize do

keys.each do |key|
keys.each do |key|
Waves.synchronize do
if @keys.include? key
File.delete(@directory / key)
::File.delete(@directory / key)
@keys.delete key
else
raise KeyMissing, "no key #{key} to delete"
end
end

end
rescue IOError => e

end

def clear
Waves.synchronize do

@keys.each {|key| File.delete(@directory / key) }
@keys.each {|key| ::File.delete(@directory / key) }
@keys.clear

end
Expand All @@ -52,17 +52,12 @@ def clear
def fetch(key)
Waves.synchronize do

raise KeyMissing, "#{key} doesn't exist" unless File.exists?(@directory / key)
@cache[key] = Marshal.load File.new(@directory / key)
return @cache[key][:value] if @cache[key][:expires].nil?
raise KeyMissing unless item = ::Marshal.load(::File.new(@directory / key))

if @cache[key][:expires] > Time.now
@cache[key][:value]
else
delete key
raise KeyMissing, "#{key} expired before access attempt"
if item[:expires] and item[:expires] < Time.now
delete(key) and raise KeyExpired
end

item[:value]
end
end

Expand Down
2 changes: 1 addition & 1 deletion lib/runtime/configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ def self.application( &block )
log :level => :info, :output => $stderr
reloadable []
dependencies []
cache :dir => 'local/cache'
cache :dir => 'cache'
end
end
end
Expand Down

0 comments on commit 842bd3a

Please sign in to comment.