summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2007-09-22 15:15:43 +0000
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2007-09-22 15:15:43 +0000
commit798cbea49964b32478f582ef11b25a15b6c811bd (patch)
tree86ef33040f0e0f78ed3a3fcd15cb2e1a1975b90c /lib
parentd0e3551896b446a93065a7dac47e81f721b80b7c (diff)
registry.rb: don't create registry file unless accessing it for writing
Diffstat (limited to 'lib')
-rw-r--r--lib/rbot/registry.rb19
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/rbot/registry.rb b/lib/rbot/registry.rb
index 358c80d6..cce2b5c8 100644
--- a/lib/rbot/registry.rb
+++ b/lib/rbot/registry.rb
@@ -126,7 +126,8 @@ class Bot
def initialize(bot, name)
@bot = bot
@name = name.downcase
- dirs = File.dirname("#{@bot.botclass}/registry/#{@name}").split("/")
+ @filename = "#{@bot.botclass}/registry/#{@name}"
+ dirs = File.dirname(@filename).split("/")
dirs.length.times { |i|
dir = dirs[0,i+1].join("/")+"/"
unless File.exist?(dir)
@@ -134,6 +135,7 @@ class Bot
Dir.mkdir(dir)
end
}
+ @filename << ".db"
@registry = nil
@default = nil
@recovery = nil
@@ -203,6 +205,7 @@ class Bot
# lookup a key in the registry
def [](key)
+ return nil unless File.exist?(@filename)
if registry.has_key?(key)
return restore(registry[key])
elsif @default != nil
@@ -225,6 +228,7 @@ class Bot
# just like Hash#each
def each(&block)
+ return nil unless File.exist?(@filename)
registry.each {|key,value|
block.call(key, restore(value))
}
@@ -232,6 +236,7 @@ class Bot
# just like Hash#each_key
def each_key(&block)
+ return nil unless File.exist?(@filename)
registry.each {|key, value|
block.call(key)
}
@@ -239,6 +244,7 @@ class Bot
# just like Hash#each_value
def each_value(&block)
+ return nil unless File.exist?(@filename)
registry.each {|key, value|
block.call(restore(value))
}
@@ -246,23 +252,28 @@ class Bot
# just like Hash#has_key?
def has_key?(key)
+ return false unless File.exist?(@filename)
return registry.has_key?(key)
end
alias include? has_key?
alias member? has_key?
+ alias key? has_key?
# just like Hash#has_both?
def has_both?(key, value)
+ return false unless File.exist?(@filename)
return registry.has_both?(key, store(value))
end
# just like Hash#has_value?
def has_value?(value)
+ return false unless File.exist?(@filename)
return registry.has_value?(store(value))
end
# just like Hash#index?
def index(value)
+ return nil unless File.exist?(@filename)
ind = registry.index(store(value))
if ind
return ind
@@ -273,16 +284,19 @@ class Bot
# delete a key from the registry
def delete(key)
+ return nil unless File.exist?(@filename)
return registry.delete(key)
end
# returns a list of your keys
def keys
+ return [] unless File.exist?(@filename)
return registry.keys
end
# Return an array of all associations [key, value] in your namespace
def to_a
+ return [] unless File.exist?(@filename)
ret = Array.new
registry.each {|key, value|
ret << [key, restore(value)]
@@ -292,6 +306,7 @@ class Bot
# Return an hash of all associations {key => value} in your namespace
def to_hash
+ return {} unless File.exist?(@filename)
ret = Hash.new
registry.each {|key, value|
ret[key] = restore(value)
@@ -301,12 +316,14 @@ class Bot
# empties the registry (restricted to your namespace)
def clear
+ return true unless File.exist?(@filename)
registry.clear
end
alias truncate clear
# returns an array of the values in your namespace of the registry
def values
+ return [] unless File.exist?(@filename)
ret = Array.new
self.each {|k,v|
ret << restore(v)