Class | Irc::NetmaskDb |
In: |
lib/rbot/maskdb.rb
|
Parent: | Object |
api wrapper for netmasks
# File lib/rbot/maskdb.rb, line 101 101: def initialize 102: @tree = Tree.new 103: end
# 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
# 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
# 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
# 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
# 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