Module: IRCMachine::Reply
- Defined in:
- lib/ircmachine/reply.rb
Class Method Summary collapse
- .defrpl(code, name, *arg_names) ⇒ Object
- .from_msg(msg) ⇒ Object
- .parse(str) ⇒ Object
- .replies ⇒ Object
Class Method Details
.defrpl(code, name, *arg_names) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/ircmachine/reply.rb', line 27 def defrpl(code, name, *arg_names) raise ArgumentError, 'Code must be 3 digits.' unless code =~ /^\d{3}$/ klass = Class.new do define_method(:initialize) do |prefix, *args| @prefix = prefix arg_names.zip(args).each { |name, value| instance_variable_set("@#{name}", value) } end arg_names.each do |name| define_method(name) { instance_variable_get("@#{name}") } end define_method(:prefix) { @prefix } define_method(:code) { code } define_method(:to_msg) do param_values = arg_names.map { |k| instance_variable_get("@#{k}") }.join(' ') IRCMachine::Message.new(@prefix, code, param_values) end define_method(:to_s) { self.to_msg.to_s } end class_name = "#{name.to_s.split('_').map(&:capitalize).join('')}Reply" const_set(class_name, klass) replies[code] = klass end |
.from_msg(msg) ⇒ Object
11 12 13 14 15 16 17 |
# File 'lib/ircmachine/reply.rb', line 11 def from_msg(msg) if (klass = replies[msg.command]).nil? fail ArgumentError, "Unknown reply: #{msg.command}" else klass.new(msg.prefix, *msg.params) end end |
.parse(str) ⇒ Object
19 20 21 22 23 24 25 |
# File 'lib/ircmachine/reply.rb', line 19 def parse(str) if (msg = IRCMachine::Message.parse(str)).nil? fail ArgumentError, 'Invalid format for IRC message.' else from_msg(msg) end end |
.replies ⇒ Object
6 7 8 |
# File 'lib/ircmachine/reply.rb', line 6 def replies @replies ||= {} end |