Class Irc::NetmaskDb
In: lib/rbot/maskdb.rb
Parent: Object
BasicUserMessage JoinMessage NamesMessage WhoisMessage ModeChangeMessage KickMessage MotdMessage QuitMessage BanlistMessage UserMessage NoSuchTargetMessage TopicMessage NickMessage WelcomeMessage UnknownMessage InviteMessage PartMessage NetmaskList UserList ArrayOf ChannelList Netmask User\n[lib/rbot/botuser.rb\nlib/rbot/irc.rb] Channel Singleton RfcCasemap StrictRfcCasemap AsciiCasemap Casemap PrivMessage NoticeMessage TokyoCabinet::BDB CIBDB Btree CIBtree Socket MessageQueue QueueRing Client DBHash\n[lib/rbot/registry/bdb.rb\nlib/rbot/registry/tc.rb] DBTree\n[lib/rbot/registry/bdb.rb\nlib/rbot/registry/tc.rb] Server NetmaskDb Bot\n[lib/rbot/botuser.rb\nlib/rbot/config.rb\nlib/rbot/ircbot.rb\nlib/rbot/language.rb\nlib/rbot/message.rb\nlib/rbot/messagemapper.rb\nlib/rbot/plugins.rb\nlib/rbot/rbotconfig.rb\nlib/rbot/registry/bdb.rb\nlib/rbot/registry/tc.rb] lib/rbot/ircsocket.rb lib/rbot/rfc2812.rb lib/rbot/registry/tc.rb lib/rbot/irc.rb lib/rbot/maskdb.rb lib/rbot/message.rb lib/rbot/messagemapper.rb lib/rbot/botuser.rb lib/rbot/registry/tc.rb (null) BotConfig PKGConfig ServerOrCasemap Irc dot/m_35_0.png

Methods

add   cook_component   find   mask2keys   metric   new   remove  

Classes and Modules

Class Irc::NetmaskDb::Tree

Public Class methods

api wrapper for netmasks

[Source]

     # File lib/rbot/maskdb.rb, line 101
101:     def initialize
102:       @tree = Tree.new
103:     end

Public Instance methods

[Source]

     # File lib/rbot/maskdb.rb, line 126
126:     def add(user, *masks)
127:       masks.each do |m|
128:         debug "adding user #{user} with mask #{m.fullform}"
129:         @tree.add([user, m], *mask2keys(m))
130:       end
131:     end

[Source]

     # File lib/rbot/maskdb.rb, line 105
105:     def cook_component(str)
106:       s = (str && !str.empty?) ? str : '*'
107:       l = s.index(/[\?\*]/)
108:       if l
109:         l2 = s.size - s.rindex(/[\?\*]/) - 1
110:         if l2 > l
111:           s = s.reverse
112:           l = l2
113:         end
114: 
115:         return (l > 0) ? s.slice(0 .. (l - 1)) : ''
116:       else
117:         return s
118:       end
119:     end

[Source]

     # File lib/rbot/maskdb.rb, line 149
149:     def find(iu)
150:       debug "find(#{iu.fullform})"
151:       iud = iu.downcased
152:       matches = @tree.find(iud.host, iud.user, iud.nick).uniq.map do |val|
153:         m = metric(iu, *val)
154:         m ? [val[0], m] : nil
155:       end.compact.sort { |a, b| a[1] <=> a[1] }
156:       debug "matches: " + (matches.map do |m|
157:         "#{m[0].username}: [#{m[1]}]"
158:       end.join(', '))
159:       return matches.empty? ? nil : matches[0][0]
160:     end

[Source]

     # File lib/rbot/maskdb.rb, line 121
121:     def mask2keys(m)
122:       md = m.downcased
123:       [md.host, md.user, md.nick].map { |c| cook_component(c) }
124:     end

[Source]

     # File lib/rbot/maskdb.rb, line 140
140:     def metric(iu, bu, mask)
141:       ret = nil
142:       if iu.matches? mask
143:         ret = iu.fullform.length - mask.fullform.length
144:         ret += 10 if bu.transient?
145:       end
146:       return ret
147:     end

[Source]

     # File lib/rbot/maskdb.rb, line 133
133:     def remove(user, mask)
134:       debug "trying to remove user #{user} with mask #{mask}"
135:       @tree.remove(*mask2keys(mask)) do |val|
136:         val[0] == user and val[1].fullform == mask.fullform
137:       end
138:     end

[Validate]