Sha256: 58e8a8c9fd1debd86d7a1bce7c1dfa5c3c2a9cee0e4461655ea1bd80ee248b7e

Contents?: true

Size: 1.23 KB

Versions: 10

Compression:

Stored size: 1.23 KB

Contents

module Marvin
  module Parsers
    class SimpleParser < Marvin::AbstractParser
      
      private
      
      # Parses an incoming message by using string
      # Manipulation.
      def self.parse!(line)
        if line[0] == ?:
          prefix_text, line = line.split(" ", 2)
        else
          prefix_text = nil
        end
        command = Marvin::Parsers::Command.new(line + "\r\n")
        command.prefix = self.extract_prefix(prefix_text)
        head, tail = line.split(":", 2)
        parts = head.split(" ")
        command.code = parts.shift
        parts << tail unless tail.nil?
        command.params = parts
        return command
      end
      
      # From a given string, attempts to get the correct
      # type of prefix (be it a HostMask or a Server name).
      def self.extract_prefix(prefix_text)
        return if prefix_text.blank?
        prefix_text = prefix_text[1..-1] # Remove the leading :
        # I think I just vomitted in my mouth a little...
        if prefix_text =~ /^([A-Za-z0-9\-\[\]\\\`\^\{\}]+)(\!\~?([^@]+))?(@(.*))?$/
          prefix = Prefixes::HostMask.new($1, $3, $5)
        else
          prefix = Prefixes::Server.new(prefix_text.strip)
        end
        return prefix
      end
    end 
  end
end

Version data entries

10 entries across 10 versions & 2 rubygems

Version Path
Sutto-marvin-0.1.20081120 lib/marvin/parsers/simple_parser.rb
Sutto-marvin-0.2.0 lib/marvin/parsers/simple_parser.rb
Sutto-marvin-0.2.1 lib/marvin/parsers/simple_parser.rb
Sutto-marvin-0.2.2 lib/marvin/parsers/simple_parser.rb
Sutto-marvin-0.2.3 lib/marvin/parsers/simple_parser.rb
Sutto-marvin-0.2.4 lib/marvin/parsers/simple_parser.rb
Sutto-marvin-0.3.0 lib/marvin/parsers/simple_parser.rb
Sutto-marvin-0.3.2 lib/marvin/parsers/simple_parser.rb
Sutto-marvin-0.3.3 lib/marvin/parsers/simple_parser.rb
jeffrafter-marvin-0.1.20081120 lib/marvin/parsers/simple_parser.rb