module Atheme::Parser

Public Class Methods

included(klass) click to toggle source
# File lib/atheme/parser.rb, line 2
def self.included(klass)
  if klass.name.split('::').count > 3
    service = klass.name.sub('Atheme::Parser::', '').gsub(/::.*/, '')
    command = klass.name.sub('Atheme::Parser::', '').gsub(/.*::/, '').downcase

    Atheme::PARSERS[service] ||= []

    (Atheme::PARSERS[service] << command) unless command == ''

    Atheme::PARSERS[service].uniq!
  end
end

Public Instance Methods

command(name, &block) click to toggle source
# File lib/atheme/parser.rb, line 15
def command(name, &block)
  @commands << [name, block]
end
parse(name) { || ... } click to toggle source
# File lib/atheme/parser.rb, line 19
def parse(name)
  @commands = []

  create_parser(name)

  yield if block_given?

  create_commands if @commands.count > 0
end

Private Instance Methods

create_commands() click to toggle source
# File lib/atheme/parser.rb, line 42
def create_commands
  @commands.each do |command, block|
    Atheme::Support.constantize(@parser).send(:define_method, command, block)
  end
end
create_parser(name) click to toggle source
# File lib/atheme/parser.rb, line 31
  def create_parser(name)
    @parser = "Atheme::Parser::#{self.name.gsub('Atheme::Parser::', '')}::#{name.capitalize}"

    module_eval <<-RUBY
      module #{@parser}
        include Atheme::Parser
        include Atheme::ParserHelper
      end
    RUBY
  end