| Class | Net::YAIL::MessageParser |
| In: |
lib/net/yail/message_parser.rb
|
| Parent: | Object |
This is my lame attempt to convert the BNF-style grammar from RFC 1459 into useable ruby regexes. The hope here is that one can effectively match an incoming message with high accuracy. Usage:
line = ':Nerdmaster!jeremy@nerdbucket.com PRIVMSG Nerdminion :Do my bidding!!'
message = Net::YAIL::MessageParser.new(line)
# hash now has all kinds of useful pieces of the incoming message:
puts line.nick # "Nerdmaster"
puts line.user # "jeremy"
puts line.host # "nerdbucket.com"
puts line.prefix # "Nerdmaster!jeremy@nerdbucket.com"
puts line.command # "PRIVMSG"
puts line.params # ["Nerdminion", "Do my bidding!!"]
| USER | = | /\S+?/ | Note that all regexes are non-greedy. I‘m scared of greedy regexes, sirs. | |
| NICK | = | /[\w\d\\|`'^{}\]\[-]+?/ | RFC suggested that a nick had to start with a letter, but that seems to not be the case. | |
| HOST | = | /\S+?/ | ||
| SERVERNAME | = | /\S+?/ | ||
| PREFIX | = | /((#{NICK})!(#{USER})@(#{HOST})|#{SERVERNAME})/ | This is automatically grouped for ease of use in the parsing. Group 1 is the full prefix; 2, 3, and 4 are nick/user/host; 1 is also servername if there was no match to populate 2, 3, and 4. | |
| COMMAND | = | /(\w+|\d{3})/ | ||
| TRAILING | = | /\:\S*?/ | ||
| MIDDLE | = | /(?: +([^ :]\S*))/ | ||
| MESSAGE | = | /^(?::#{PREFIX} +)?#{COMMAND}(.*)$/ |
| command | [R] | |
| host | [R] | |
| nick | [R] | |
| params | [R] | |
| prefix | [R] | |
| servername | [R] | |
| user | [R] |