]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - lib/rbot/core/userdata.rb
botuser: add command to reset the netmasks list
[user/henk/code/ruby/rbot.git] / lib / rbot / core / userdata.rb
index f4338592a3e0f16d15f1b7e1d9b2e3e7e6426108..f7c74a4a5fa7f9b0657910e7c5c01241fe016413 100644 (file)
@@ -56,7 +56,8 @@ class UserDataModule < CoreBotModule
     @botuser = @registry.sub_registry('botuser')
   end
 
-  def get_data_hash(user)
+  def get_data_hash(user, opts={})
+    plain = opts[:plain]
     iu = user.to_irc_user
     bu = iu.botuser
 
@@ -69,7 +70,17 @@ class UserDataModule < CoreBotModule
     else
       bh = @botuser[bu.username] || {}
     end
-    return ih.merge!(bh)
+    ih.merge!(bh)
+
+    unless plain
+      class << ih
+        alias :single_retrieve :[]
+        alias :single_assign :[]=
+          include DottedIndex
+      end
+    end
+
+    return ih
   end
 
   def get_data(user, key=nil)
@@ -79,10 +90,14 @@ class UserDataModule < CoreBotModule
     return h[key]
   end
 
-  def set_data_hash(user, h)
+  def set_data_hash(user, hh)
     iu = user.to_irc_user
     bu = iu.botuser
 
+    # we .dup the hash to remove singleton methods
+    # and make it dump-able
+    h = hh.dup
+
     @ircuser[iu.nick] = h
     return h if bu.default?
 
@@ -163,7 +178,7 @@ class UserDataModule < CoreBotModule
     when :pre_perm
       @permification ||= {}
       k = [opts[:irc_user], opts[:bot_user]]
-      @permification[k] = get_data_hash(opts[:irc_user])
+      @permification[k] = get_data_hash(opts[:irc_user], :plain => true)
     when :post_perm
       @permification ||= {}
       k = [opts[:irc_user], opts[:bot_user]]