X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=lib%2Frbot%2Fcore%2Fuserdata.rb;h=ced5c1e7fb0eab0bbec478edf62a275a4bc619c8;hb=16c921257d38522fd2930b1ee8d52675f0d4f1e0;hp=f4338592a3e0f16d15f1b7e1d9b2e3e7e6426108;hpb=82ac675c1e0af29f276457dd7256ad0d800b9021;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/lib/rbot/core/userdata.rb b/lib/rbot/core/userdata.rb index f4338592..ced5c1e7 100644 --- a/lib/rbot/core/userdata.rb +++ b/lib/rbot/core/userdata.rb @@ -4,8 +4,6 @@ # :title: rbot user data management from IRC # # Author:: Giuseppe "Oblomov" Bilotta -# Copyright:: (C) 2006,2007 Giuseppe Bilotta -# License:: GPL v2 module ::Irc class User @@ -27,7 +25,7 @@ module ::Irc # # If you have to do large-scale editing of the Bot data Hash, # please use with_botdata. - # + # def set_botdata(key, value=nil, &block) Irc::Utils.bot.plugins['userdata'].set_data(self, key, value, &block) end @@ -40,6 +38,13 @@ module ::Irc Irc::Utils.bot.plugins['userdata'].with_data(self, &block) end + # This method removes the data associated with the key, returning + # the value of the deleted key. + + def delete_botdata(*keys) + Irc::Utils.bot.plugins['userdata'].delete_data(self, *keys) + end + end end @@ -56,7 +61,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 +75,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 +95,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? @@ -125,6 +145,14 @@ class UserDataModule < CoreBotModule return h end + def delete_data(user, *keys) + h = get_data_hash(user) + debug h + rv = keys.map { |k| h.delete k } + set_data_hash(user, h) + rv.size == 1 ? rv.first : rv + end + def handle_get(m, params) user = m.server.get_user(params[:nick]) || m.source key = params[:key].intern @@ -163,7 +191,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]]