messagefactory 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +3 -0
- data/README.rdoc +53 -0
- data/Rakefile +51 -0
- data/lib/Factory.rb +41 -0
- data/lib/Handler.rb +39 -0
- data/lib/handlers/BadNick.rb +34 -0
- data/lib/handlers/Bounce.rb +33 -0
- data/lib/handlers/Created.rb +39 -0
- data/lib/handlers/Invite.rb +36 -0
- data/lib/handlers/Inviting.rb +37 -0
- data/lib/handlers/Join.rb +33 -0
- data/lib/handlers/Kick.rb +36 -0
- data/lib/handlers/LuserChannels.rb +37 -0
- data/lib/handlers/Mode.rb +52 -0
- data/lib/handlers/Names.rb +82 -0
- data/lib/handlers/Nick.rb +33 -0
- data/lib/handlers/Notice.rb +36 -0
- data/lib/handlers/Part.rb +40 -0
- data/lib/handlers/Welcome.rb +38 -0
- data/lib/handlers/YourHost.rb +35 -0
- data/spec/dummy.rb +0 -0
- metadata +76 -0
data/LICENSE
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
== MessageFactory
|
2
|
+
|
3
|
+
MessageFactory is a simple little library for parsing messages from an IRC
|
4
|
+
server and generating easy to use objects from them. This library is intended
|
5
|
+
to be used within an IRC type application, and does nothing of value by itself.
|
6
|
+
|
7
|
+
=== install (easy):
|
8
|
+
|
9
|
+
gem install messagefactory
|
10
|
+
|
11
|
+
=== install (less easy):
|
12
|
+
|
13
|
+
git clone http://github.com/spox/messagefactory.git
|
14
|
+
cd messagefactory
|
15
|
+
gem build *.gemspec
|
16
|
+
gem install ./
|
17
|
+
|
18
|
+
=== install (less easy that's a little easier)
|
19
|
+
|
20
|
+
{rip}[http://hellorip.com/about.html] makes it easy to install directly from a github repository.
|
21
|
+
|
22
|
+
=== Testing
|
23
|
+
|
24
|
+
MessageFactory is currently tested on:
|
25
|
+
|
26
|
+
* Ruby 1.8.6-p383
|
27
|
+
* Ruby 1.8.7-p248
|
28
|
+
* Ruby 1.9.1-p376
|
29
|
+
* JRuby 1.4.0
|
30
|
+
|
31
|
+
== Example
|
32
|
+
|
33
|
+
=== Code:
|
34
|
+
|
35
|
+
require 'messagefactory'
|
36
|
+
|
37
|
+
factory = MessageFactory::Factory.new
|
38
|
+
message = factory.process(':mod_spox!~mod_spox@host JOIN :#m')
|
39
|
+
p message
|
40
|
+
|
41
|
+
=== Result:
|
42
|
+
|
43
|
+
#<OpenStruct direction=:incoming, received=Fri Feb 05 19:58:42 UTC 2010, raw=":mod_spox!~mod_spox@host JOIN :#m", type=:join, source="mod_spox!~mod_spox@host", channel="#m">
|
44
|
+
|
45
|
+
== Last remarks
|
46
|
+
|
47
|
+
If you find any bugs, please report them through {github}[http://github.com/spox/messagefactory/issues].
|
48
|
+
If you are in need of any help, you can generally find me on DALnet and Freenode.
|
49
|
+
|
50
|
+
== License
|
51
|
+
|
52
|
+
MessageFactory is licensed under the LGPLv3
|
53
|
+
Copyright (c) 2009 spox <spox@modspox.com>
|
data/Rakefile
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
#
|
2
|
+
# To change this template, choose Tools | Templates
|
3
|
+
# and open the template in the editor.
|
4
|
+
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'rake'
|
8
|
+
require 'rake/clean'
|
9
|
+
require 'rake/gempackagetask'
|
10
|
+
require 'rake/rdoctask'
|
11
|
+
require 'rake/testtask'
|
12
|
+
require 'spec/rake/spectask'
|
13
|
+
|
14
|
+
spec = Gem::Specification.new do |s|
|
15
|
+
s.name = 'messagefactory'
|
16
|
+
s.version = '0.0.1'
|
17
|
+
s.has_rdoc = true
|
18
|
+
s.extra_rdoc_files = ['README.rdoc', 'LICENSE']
|
19
|
+
s.summary = 'Your summary here'
|
20
|
+
s.description = s.summary
|
21
|
+
s.author = ''
|
22
|
+
s.email = ''
|
23
|
+
# s.executables = ['your_executable_here']
|
24
|
+
s.files = %w(LICENSE README.rdoc Rakefile) + Dir.glob("{bin,lib,spec}/**/*")
|
25
|
+
s.require_path = "lib"
|
26
|
+
s.bindir = "bin"
|
27
|
+
end
|
28
|
+
|
29
|
+
Rake::GemPackageTask.new(spec) do |p|
|
30
|
+
p.gem_spec = spec
|
31
|
+
p.need_tar = true
|
32
|
+
p.need_zip = true
|
33
|
+
end
|
34
|
+
|
35
|
+
Rake::RDocTask.new do |rdoc|
|
36
|
+
files =['README.rdoc', 'LICENSE', 'lib/**/*.rb']
|
37
|
+
rdoc.rdoc_files.add(files)
|
38
|
+
rdoc.main = "README.rdoc" # page to start on
|
39
|
+
rdoc.title = "messagefactory Docs"
|
40
|
+
rdoc.rdoc_dir = 'doc/rdoc' # rdoc output folder
|
41
|
+
rdoc.options << '--line-numbers'
|
42
|
+
end
|
43
|
+
|
44
|
+
Rake::TestTask.new do |t|
|
45
|
+
t.test_files = FileList['test/**/*.rb']
|
46
|
+
end
|
47
|
+
|
48
|
+
Spec::Rake::SpecTask.new do |t|
|
49
|
+
t.spec_files = FileList['spec/**/*.rb']
|
50
|
+
t.libs << Dir["lib"]
|
51
|
+
end
|
data/lib/Factory.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
module MessageFactory
|
2
|
+
class Factory
|
3
|
+
# Create a new Factory
|
4
|
+
def initialize
|
5
|
+
@handers = {}
|
6
|
+
end
|
7
|
+
|
8
|
+
# s:: string from server
|
9
|
+
# Determine type of message
|
10
|
+
def type(s)
|
11
|
+
s = s.dup
|
12
|
+
t = nil
|
13
|
+
begin
|
14
|
+
if(s.slice(0,1).chr == ':')
|
15
|
+
s.slice!(0..s.index(' '))
|
16
|
+
t = s.slice!(0..s.index(' ')-1)
|
17
|
+
else
|
18
|
+
t = s.slice(0..s.index(' ')-1)
|
19
|
+
end
|
20
|
+
t.strip!
|
21
|
+
rescue
|
22
|
+
raise 'Failed to determine message type'
|
23
|
+
end
|
24
|
+
t
|
25
|
+
end
|
26
|
+
|
27
|
+
# string:: String from IRC server to process
|
28
|
+
# Process the given string and return parsed
|
29
|
+
# message or nil
|
30
|
+
def process(string)
|
31
|
+
s = nil
|
32
|
+
if(@handlers[type(string)])
|
33
|
+
s = @handlers.process(string)
|
34
|
+
else
|
35
|
+
raise NoMethodError.new("No handler found to process string: #{string}")
|
36
|
+
end
|
37
|
+
s
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
data/lib/Handler.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
unless(OpenStruct.new.type.nil?)
|
4
|
+
class OpenStruct
|
5
|
+
def type
|
6
|
+
@table[:type]
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
module MessageFactory
|
12
|
+
module Handlers
|
13
|
+
class Handler
|
14
|
+
|
15
|
+
# Returns symbol or array of symbols of allowed message types
|
16
|
+
def types_process
|
17
|
+
raise NotImplementedError.new
|
18
|
+
end
|
19
|
+
|
20
|
+
# data:: string of data
|
21
|
+
# Process string and create proper message
|
22
|
+
def process(data)
|
23
|
+
raise NotImplementedError.new
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
|
28
|
+
# orig:: Original message string
|
29
|
+
# Helper to generate the message struct
|
30
|
+
def mk_struct(orig=nil)
|
31
|
+
m = OpenStruct.new
|
32
|
+
m.direction = :incoming
|
33
|
+
m.received = Time.now
|
34
|
+
m.raw = orig.dup
|
35
|
+
m
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
module MessageFactory
|
3
|
+
module Handlers
|
4
|
+
class BadNick < Handler
|
5
|
+
# Returns type(s) supported
|
6
|
+
def types_process
|
7
|
+
:'432'
|
8
|
+
end
|
9
|
+
# string:: string to process
|
10
|
+
# Create a new BadNick message
|
11
|
+
# OpenStruct will contain:
|
12
|
+
# #type #direction #raw #bad_nick #received
|
13
|
+
# :nodoc: ':the.server 432 spox 999 :Erroneous Nickname'
|
14
|
+
def process(string)
|
15
|
+
m = nil
|
16
|
+
string = string.dup
|
17
|
+
orig = string.dup
|
18
|
+
begin
|
19
|
+
m = mk_struct(string)
|
20
|
+
m.type = :badnick
|
21
|
+
string.slice!(0)
|
22
|
+
m.server = string.slice!(0, string.index(' '))
|
23
|
+
string.slice!(0)
|
24
|
+
raise unless string.slice!(0, string.index(' ')).to_sym == :'432'
|
25
|
+
2.times{string.slice!(0, string.index(' ')+1)}
|
26
|
+
m.bad_nick = string.slice!(0, string.index(' '))
|
27
|
+
rescue
|
28
|
+
raise "Failed to parse BadNick string: #{orig}"
|
29
|
+
end
|
30
|
+
m
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module MessageFactory
|
2
|
+
module Handlers
|
3
|
+
class Bounce < Handler
|
4
|
+
|
5
|
+
# Returns type(s) supported
|
6
|
+
def types_process
|
7
|
+
:'005'
|
8
|
+
end
|
9
|
+
|
10
|
+
# string:: string to process
|
11
|
+
# Create a new BadNick message
|
12
|
+
# OpenStruct will contain:
|
13
|
+
# #type #direction #raw #received #server #port
|
14
|
+
# :nodoc:
|
15
|
+
def process(string)
|
16
|
+
m = nil
|
17
|
+
begin
|
18
|
+
m = mk_struct(string)
|
19
|
+
m.type = :bounce
|
20
|
+
orig = string.dup
|
21
|
+
2.times{string.slice!(0..string.index(' '))}
|
22
|
+
server = string.slice!(0..string.index(',')-1)
|
23
|
+
string.slice!(0..string.index(' ',4))
|
24
|
+
m.server = server
|
25
|
+
m.port = string
|
26
|
+
rescue Object => boom
|
27
|
+
raise "Failed to parse Bounce string: #{orig}"
|
28
|
+
end
|
29
|
+
m
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'time'
|
2
|
+
|
3
|
+
module MessageFactory
|
4
|
+
module Handlers
|
5
|
+
class Created < Handler
|
6
|
+
|
7
|
+
# Returns type(s) supported
|
8
|
+
def types_process
|
9
|
+
:'003'
|
10
|
+
end
|
11
|
+
|
12
|
+
# string:: string to process
|
13
|
+
# Create a new Created message
|
14
|
+
# OpenStruct will contain:
|
15
|
+
# #type #direction #raw #server #received #created
|
16
|
+
# :nodoc: :not.configured 003 spox :This server was created Tue Mar 24 2009 at 15:42:36 PDT'
|
17
|
+
def process(string)
|
18
|
+
string = string.dup
|
19
|
+
m = nil
|
20
|
+
begin
|
21
|
+
m = mk_struct(string)
|
22
|
+
m.type = :created
|
23
|
+
orig = string.dup
|
24
|
+
string.downcase!
|
25
|
+
string.slice!(0)
|
26
|
+
m.server = string.slice!(0, string.index(' '))
|
27
|
+
string.slice!(0)
|
28
|
+
raise 'Bad message type' unless string.slice!(0, string.index(' ')).to_sym == :'003'
|
29
|
+
string.slice!(0, string.index('d')+2)
|
30
|
+
time = Time.parse(string)
|
31
|
+
m.created = time
|
32
|
+
rescue
|
33
|
+
raise "Failed to parse Created message: #{orig}"
|
34
|
+
end
|
35
|
+
m
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module MessageFactory
|
2
|
+
module Handlers
|
3
|
+
class Invite < Handler
|
4
|
+
# Returns type(s) supported
|
5
|
+
def types_process
|
6
|
+
:INVITE
|
7
|
+
end
|
8
|
+
# string:: string to process
|
9
|
+
# Create a new Invite message
|
10
|
+
# OpenStruct will contain:
|
11
|
+
# #type #direction #raw #received #source #target #channel
|
12
|
+
# :nodoc: :spox!~spox@192.168.0.107 INVITE spox_ :#a
|
13
|
+
def process(string)
|
14
|
+
string = string.dup
|
15
|
+
orig = string.dup
|
16
|
+
m = nil
|
17
|
+
begin
|
18
|
+
m = mk_struct(string)
|
19
|
+
m.type = :invite
|
20
|
+
string.slice!(0)
|
21
|
+
m.source = string.slice!(0, string.index(' '))
|
22
|
+
string.slice!(0)
|
23
|
+
raise 'error' unless string.slice!(0, string.index(' ')).to_sym == :INVITE
|
24
|
+
string.slice!(0)
|
25
|
+
m.target = string.slice!(0, string.index(' '))
|
26
|
+
string.slice!(0)
|
27
|
+
string.slice!(0, string.index(':')+1)
|
28
|
+
m.channel = string
|
29
|
+
rescue
|
30
|
+
raise "Failed to parse Invite message: #{orig}"
|
31
|
+
end
|
32
|
+
m
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
module MessageFactory
|
3
|
+
module Handlers
|
4
|
+
class Inviting < Handler
|
5
|
+
def types_process
|
6
|
+
:'341'
|
7
|
+
end
|
8
|
+
# string:: string to process
|
9
|
+
# Create a new Inviting message
|
10
|
+
# OpenStruct will contain:
|
11
|
+
# #type #direction #raw #received #server #source #target #channel
|
12
|
+
# :nodoc: :not.configured 341 spox spox_ #a
|
13
|
+
def process(string)
|
14
|
+
string = string.dup
|
15
|
+
orig = string.dup
|
16
|
+
m = nil
|
17
|
+
begin
|
18
|
+
m = mk_struct(string)
|
19
|
+
m.type = :inviting
|
20
|
+
string.slice!(0)
|
21
|
+
m.server = string.slice!(0, string.index(' '))
|
22
|
+
string.slice!(0)
|
23
|
+
raise 'error' unless string.slice!(0, string.index(' ')).to_sym == :'341'
|
24
|
+
string.slice!(0)
|
25
|
+
m.source = string.slice!(0, string.index(' '))
|
26
|
+
string.slice!(0)
|
27
|
+
m.target = string.slice!(0, string.index(' '))
|
28
|
+
string.slice!(0)
|
29
|
+
m.channel = string
|
30
|
+
rescue
|
31
|
+
raise "Failed to parse Inviting message: #{orig}"
|
32
|
+
end
|
33
|
+
m
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
|
2
|
+
module MessageFactory
|
3
|
+
module Handlers
|
4
|
+
class Join < Handler
|
5
|
+
def types_process
|
6
|
+
:JOIN
|
7
|
+
end
|
8
|
+
# string:: string to process
|
9
|
+
# Create a new Join message
|
10
|
+
# OpenStruct will contain:
|
11
|
+
# #type #direction #raw #received #source #channel
|
12
|
+
# :nodoc: :mod_spox!~mod_spox@host JOIN :#m
|
13
|
+
def process(string)
|
14
|
+
string = string.dup
|
15
|
+
orig = string.dup
|
16
|
+
m = nil
|
17
|
+
begin
|
18
|
+
m = mk_struct(string)
|
19
|
+
m.type = :join
|
20
|
+
string.slice!(0)
|
21
|
+
m.source = string.slice!(0, string.index(' '))
|
22
|
+
string.slice!(0)
|
23
|
+
raise 'error' unless string.slice!(0, string.index(' ')).to_sym == :JOIN
|
24
|
+
string.slice!(0, string.index(':')+1)
|
25
|
+
m.channel = string
|
26
|
+
rescue
|
27
|
+
raise "Failed to parse Join message: #{orig}"
|
28
|
+
end
|
29
|
+
m
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module MessageFactory
|
2
|
+
module Handlers
|
3
|
+
class Kick < Handler
|
4
|
+
def types_process
|
5
|
+
:KICK
|
6
|
+
end
|
7
|
+
# string:: string to process
|
8
|
+
# Create a new Kick message
|
9
|
+
# OpenStruct will contain:
|
10
|
+
# #type #direction #raw #received #source #target #channel #message
|
11
|
+
# :nodoc: :spax!~spox@host KICK #m spox :foo
|
12
|
+
def process(string)
|
13
|
+
string = string.dup
|
14
|
+
orig = string.dup
|
15
|
+
m = nil
|
16
|
+
begin
|
17
|
+
m = mk_struct(string)
|
18
|
+
m.type = :kick
|
19
|
+
string.slice!(0)
|
20
|
+
m.source = string.slice!(0, string.index(' '))
|
21
|
+
string.slice!(0)
|
22
|
+
raise 'error' unless string.slice!(0, string.index(' ')).to_sym == :KICK
|
23
|
+
string.slice!(0)
|
24
|
+
m.channel = string.slice!(0, string.index(' '))
|
25
|
+
string.slice!(0)
|
26
|
+
m.target = string.slice!(0, string.index(' '))
|
27
|
+
string.slice!(0, 2)
|
28
|
+
m.message = string
|
29
|
+
rescue
|
30
|
+
raise "Failed to parse Kick message: #{orig}"
|
31
|
+
end
|
32
|
+
m
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
module MessageFactory
|
3
|
+
module Handlers
|
4
|
+
class LuserChannels < Handler
|
5
|
+
def types_process
|
6
|
+
:'254'
|
7
|
+
end
|
8
|
+
# string:: string to process
|
9
|
+
# Create a new LuserChannels message
|
10
|
+
# OpenStruct will contain:
|
11
|
+
# #type #direction #raw #received #server #target #num_channels #message
|
12
|
+
# :nodoc: :crichton.freenode.net 254 spox 24466 :channels formed
|
13
|
+
def process(string)
|
14
|
+
string = string.dup
|
15
|
+
orig = string.dup
|
16
|
+
m = nil
|
17
|
+
begin
|
18
|
+
m = mk_struct(string)
|
19
|
+
m.type = :luserchannels
|
20
|
+
string.slice!(0)
|
21
|
+
m.server = string.slice!(0, string.index(' '))
|
22
|
+
string.slice!(' ')
|
23
|
+
raise 'error' unless string.slice!(0, string.index(' ')).to_sym == :'254'
|
24
|
+
string.slice!(0)
|
25
|
+
m.target = string.slice!(0, string.index(' '))
|
26
|
+
string.slice!(0)
|
27
|
+
m.num_channels = string.slice!(0, string.index(' '))
|
28
|
+
string.slice!(0, string.index(':')+1)
|
29
|
+
m.message = string
|
30
|
+
rescue
|
31
|
+
raise "Failed to parse LuserChannels message: #{orig}"
|
32
|
+
end
|
33
|
+
m
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# To change this template, choose Tools | Templates
|
2
|
+
# and open the template in the editor.
|
3
|
+
module MessageFactory
|
4
|
+
module Handlers
|
5
|
+
class Mode < Handler
|
6
|
+
def types_process
|
7
|
+
:MODE
|
8
|
+
end
|
9
|
+
# string:: string to process
|
10
|
+
# Create a new Mode message
|
11
|
+
# OpenStruct will contain:
|
12
|
+
# #type #direction #raw #received #source #target #channel #modes #set #unset
|
13
|
+
# :nodoc: :spax!~spox@host MODE #m +o spax
|
14
|
+
# :nodoc: :spax MODE spax :+iw
|
15
|
+
def process(string)
|
16
|
+
string = string.dup
|
17
|
+
orig = string.dup
|
18
|
+
m = nil
|
19
|
+
self_mode = string.index('!').nil?
|
20
|
+
begin
|
21
|
+
m = mk_struct(string)
|
22
|
+
m.type = :mode
|
23
|
+
string.slice!(0)
|
24
|
+
m.source = string.slice!(0, string.index(' '))
|
25
|
+
string.slice!(0)
|
26
|
+
raise 'error' unless string.slice!(0, string.index(' ')).to_sym == :MODE
|
27
|
+
string.slice!(0)
|
28
|
+
if(self_mode)
|
29
|
+
m.target = string.slice!(0, string.index(' '))
|
30
|
+
string.slice!(0, string.index(':')+1)
|
31
|
+
action = string.slice!(0).chr
|
32
|
+
m.set = action == '+'
|
33
|
+
m.unset = action == '-'
|
34
|
+
m.modes = string
|
35
|
+
else
|
36
|
+
m.channel = string.slice!(0, string.index(' '))
|
37
|
+
string.slice!(0)
|
38
|
+
action = string.slice!(0).chr
|
39
|
+
m.set = action == '+'
|
40
|
+
m.unset = action == '-'
|
41
|
+
m.modes = string.slice!(0, string.index(' '))
|
42
|
+
string.slice!(0)
|
43
|
+
m.target = string
|
44
|
+
end
|
45
|
+
rescue
|
46
|
+
raise "Failed to parse Mode message: #{orig}"
|
47
|
+
end
|
48
|
+
m
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# To change this template, choose Tools | Templates
|
2
|
+
# and open the template in the editor.
|
3
|
+
|
4
|
+
#RPL_NAMREPLY => 353
|
5
|
+
#RPL_ENDOFNAMES => 366
|
6
|
+
|
7
|
+
module MessageFactory
|
8
|
+
module Handlers
|
9
|
+
class Names < Handler
|
10
|
+
def initialize
|
11
|
+
@cache = {}
|
12
|
+
end
|
13
|
+
def types_process
|
14
|
+
[:'353', :'366']
|
15
|
+
end
|
16
|
+
# string:: string to process
|
17
|
+
# Create a new Names message
|
18
|
+
# OpenStruct will contain:
|
19
|
+
# #type #direction #raw #received #target #channel #server #nicks
|
20
|
+
# :nodoc: :swiftco.wa.us.dal.net 353 spox = #mod_spox :mod_spox spox
|
21
|
+
# :nodoc: :swiftco.wa.us.dal.net 366 spox #mod_spox :End of /NAMES list.
|
22
|
+
def process(string)
|
23
|
+
string = string.dup
|
24
|
+
orig = string.dup
|
25
|
+
m = nil
|
26
|
+
begin
|
27
|
+
string.slice!(0)
|
28
|
+
server = string.slice!(0, string.index(' '))
|
29
|
+
string.slice!(0)
|
30
|
+
case string.slice!(0, string.index(' ')).to_sym
|
31
|
+
when :'353'
|
32
|
+
m = names(string, orig)
|
33
|
+
when :'366'
|
34
|
+
m = end_names(string, orig)
|
35
|
+
else
|
36
|
+
raise 'error'
|
37
|
+
end
|
38
|
+
if(m)
|
39
|
+
m.server = server
|
40
|
+
end
|
41
|
+
rescue
|
42
|
+
raise "Failed to parse Name message: #{orig}"
|
43
|
+
end
|
44
|
+
m
|
45
|
+
end
|
46
|
+
|
47
|
+
def names(string, orig)
|
48
|
+
string.slice!(0)
|
49
|
+
target = string.slice!(0, string.index(' '))
|
50
|
+
string.slice!(0, 3)
|
51
|
+
channel = string.slice!(0, string.index(' '))
|
52
|
+
m = @cache[channel] ? @cache[channel] : mk_struct(orig)
|
53
|
+
m.type = :names
|
54
|
+
m.target = target
|
55
|
+
m.channel = channel
|
56
|
+
if(m.raw.is_a?(Array))
|
57
|
+
m.raw.push(orig)
|
58
|
+
else
|
59
|
+
m.raw = [m.raw]
|
60
|
+
end
|
61
|
+
string.slice!(0, string.index(':')+1)
|
62
|
+
m.nicks ||= []
|
63
|
+
m.nicks = m.nicks + string.split
|
64
|
+
@cache[channel] = m
|
65
|
+
nil
|
66
|
+
end
|
67
|
+
|
68
|
+
def end_names(string, orig)
|
69
|
+
string.slice!(0)
|
70
|
+
string.slice!(0, string.index(' ')+1)
|
71
|
+
channel = string.slice!(0, string.index(' '))
|
72
|
+
m = nil
|
73
|
+
if(@cache[channel])
|
74
|
+
m = @cache[channel]
|
75
|
+
m.raw.push(orig)
|
76
|
+
@cache.delete(channel)
|
77
|
+
end
|
78
|
+
m
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# To change this template, choose Tools | Templates
|
2
|
+
# and open the template in the editor.
|
3
|
+
|
4
|
+
module MessageFactory
|
5
|
+
module Handlers
|
6
|
+
class Nick < Handler
|
7
|
+
def types_process
|
8
|
+
:NICK
|
9
|
+
end
|
10
|
+
# string:: string to process
|
11
|
+
# Create a new Nick message
|
12
|
+
# OpenStruct will contain:
|
13
|
+
# #type #direction #raw #received #source #new_nick
|
14
|
+
# :nodoc: :spox!~spox@some.random.host NICK :flock_of_deer
|
15
|
+
def process(string)
|
16
|
+
string = string.dup
|
17
|
+
m = mk_struct(string)
|
18
|
+
begin
|
19
|
+
m.type = :nick
|
20
|
+
string.slice!(0)
|
21
|
+
m.source = string.slice!(0, string.index(' '))
|
22
|
+
string.slice!(0)
|
23
|
+
raise 'error' unless string.slice!(0, string.index(' ')).to_sym == :NICK
|
24
|
+
string.slice!(0, string.index(' ')+2)
|
25
|
+
m.new_nick = string
|
26
|
+
rescue
|
27
|
+
raise "Failed to parse Nick message: #{m.raw}"
|
28
|
+
end
|
29
|
+
m
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# To change this template, choose Tools | Templates
|
2
|
+
# and open the template in the editor.
|
3
|
+
|
4
|
+
module MessageFactory
|
5
|
+
module Handlers
|
6
|
+
class Notice < Handler
|
7
|
+
def types_process
|
8
|
+
:NOTICE
|
9
|
+
end
|
10
|
+
# string:: string to process
|
11
|
+
# Create a new Notice message
|
12
|
+
# OpenStruct will contain:
|
13
|
+
# #type #direction #raw #received #source #target #message
|
14
|
+
# :nodoc: :spox!~spox@some.host NOTICE spax :test
|
15
|
+
# :nodoc: :spox!~spox@some.host NOTICE #mod_spox :test
|
16
|
+
def process(string)
|
17
|
+
string = string.dup
|
18
|
+
m = mk_struct(string)
|
19
|
+
begin
|
20
|
+
m.type = :notice
|
21
|
+
string.slice!(0)
|
22
|
+
m.source = string.slice!(0, string.index(' '))
|
23
|
+
string.slice!(0)
|
24
|
+
raise 'error' unless string.slice!(0, string.index(' ')).to_sym == :NOTICE
|
25
|
+
string.slice!(0)
|
26
|
+
m.target = string.slice!(0, string.index(' '))
|
27
|
+
string.slice!(0, string.index(':')+1)
|
28
|
+
m.message = string
|
29
|
+
rescue
|
30
|
+
raise "Failed to parse Notice message: #{m.raw}"
|
31
|
+
end
|
32
|
+
m
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# To change this template, choose Tools | Templates
|
2
|
+
# and open the template in the editor.
|
3
|
+
|
4
|
+
module MessageFactory
|
5
|
+
module Handlers
|
6
|
+
class Part < Handler
|
7
|
+
def types_process
|
8
|
+
:PART
|
9
|
+
end
|
10
|
+
# string:: string to process
|
11
|
+
# Create a new Part message
|
12
|
+
# OpenStruct will contain:
|
13
|
+
# #type #direction #raw #received #source #channel #message
|
14
|
+
# :nodoc: :mod_spox!~mod_spox@host PART #m :
|
15
|
+
# :nodoc: :foobar!~foobar@some.host PART #php
|
16
|
+
def process(string)
|
17
|
+
string = string.dup
|
18
|
+
m = mk_struct(string)
|
19
|
+
begin
|
20
|
+
m.type = :part
|
21
|
+
string.slice!(0)
|
22
|
+
m.source = string.slice!(0, string.index(' '))
|
23
|
+
string.slice!(0)
|
24
|
+
raise 'error' unless string.slice!(0, string.index(' ')).to_sym == :PART
|
25
|
+
string.slice!(0)
|
26
|
+
m.channel = string.slice!(0, string.index(' '))
|
27
|
+
if(string.index(':'))
|
28
|
+
string.slice!(0, string.index(':')+1)
|
29
|
+
m.message = string
|
30
|
+
else
|
31
|
+
m.message = ''
|
32
|
+
end
|
33
|
+
rescue
|
34
|
+
raise "Failed to parse Part message: #{m.raw}"
|
35
|
+
end
|
36
|
+
m
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
|
2
|
+
module MessageFactory
|
3
|
+
module Handlers
|
4
|
+
class Welcome < Handler
|
5
|
+
def types_process
|
6
|
+
:'001'
|
7
|
+
end
|
8
|
+
# string:: string to process
|
9
|
+
# Create a new Welcome message
|
10
|
+
# OpenStruct will contain:
|
11
|
+
# #type #direction #raw #received #message #target #user #server
|
12
|
+
# :nodoc: :not.configured 001 spox :Welcome to the unconfigured IRC Network spox!~spox@192.168.0.107
|
13
|
+
def process(string)
|
14
|
+
string = string.dup
|
15
|
+
orig = string.dup
|
16
|
+
m = nil
|
17
|
+
begin
|
18
|
+
m = mk_struct(string)
|
19
|
+
m.type = :welcome
|
20
|
+
string.slice!(0)
|
21
|
+
m.server = string.slice!(0, string.index(' '))
|
22
|
+
string.slice!(0)
|
23
|
+
raise 'error' unless string.slice!(0, string.index(' ')).to_sym == :'001'
|
24
|
+
string.slice!(0)
|
25
|
+
m.target = string.slice!(0, string.index(' '))
|
26
|
+
string.slice!(0, string.index(':')+1)
|
27
|
+
m.message = string.slice!(0, string.rindex(' '))
|
28
|
+
string.slice!(0)
|
29
|
+
m.user = string
|
30
|
+
rescue
|
31
|
+
raise "Failed to parse Welcome message: #{orig}"
|
32
|
+
end
|
33
|
+
m
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
|
2
|
+
module MessageFactory
|
3
|
+
module Handlers
|
4
|
+
class YourHost < Handler
|
5
|
+
def types_process
|
6
|
+
:'002'
|
7
|
+
end
|
8
|
+
# string:: string to process
|
9
|
+
# Create a new YourHost message
|
10
|
+
# OpenStruct will contain:
|
11
|
+
# #type #direction #raw #received #target #server #version
|
12
|
+
# :nodoc: :not.configured 002 spox :Your host is not.configured, running version bahamut-1.8(04)
|
13
|
+
def process(string)
|
14
|
+
string = string.dup
|
15
|
+
orig = string.dup
|
16
|
+
m = nil
|
17
|
+
begin
|
18
|
+
m = mk_struct(string)
|
19
|
+
m.type = :yourhost
|
20
|
+
string.slice!(0)
|
21
|
+
m.server = string.slice!(0, string.index(' '))
|
22
|
+
string.slice!(0)
|
23
|
+
raise 'error' unless string.slice!(0, string.index(' ')).to_sym == :'002'
|
24
|
+
string.slice!(0)
|
25
|
+
m.target = string.slice!(0, string.index(' '))
|
26
|
+
string.slice!(0, string.rindex(' ')+1)
|
27
|
+
m.version = string
|
28
|
+
rescue
|
29
|
+
raise "Failed to parse YourHost message: #{orig}"
|
30
|
+
end
|
31
|
+
m
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/spec/dummy.rb
ADDED
File without changes
|
metadata
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: messagefactory
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- ""
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-02-05 00:00:00 Z
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Your summary here
|
17
|
+
email: ""
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README.rdoc
|
24
|
+
- LICENSE
|
25
|
+
files:
|
26
|
+
- LICENSE
|
27
|
+
- README.rdoc
|
28
|
+
- Rakefile
|
29
|
+
- lib/Factory.rb
|
30
|
+
- lib/Handler.rb
|
31
|
+
- lib/handlers/Inviting.rb
|
32
|
+
- lib/handlers/Created.rb
|
33
|
+
- lib/handlers/Kick.rb
|
34
|
+
- lib/handlers/Nick.rb
|
35
|
+
- lib/handlers/Mode.rb
|
36
|
+
- lib/handlers/Names.rb
|
37
|
+
- lib/handlers/YourHost.rb
|
38
|
+
- lib/handlers/Join.rb
|
39
|
+
- lib/handlers/Invite.rb
|
40
|
+
- lib/handlers/Welcome.rb
|
41
|
+
- lib/handlers/Bounce.rb
|
42
|
+
- lib/handlers/BadNick.rb
|
43
|
+
- lib/handlers/LuserChannels.rb
|
44
|
+
- lib/handlers/Part.rb
|
45
|
+
- lib/handlers/Notice.rb
|
46
|
+
- spec/dummy.rb
|
47
|
+
has_rdoc: true
|
48
|
+
homepage:
|
49
|
+
licenses: []
|
50
|
+
|
51
|
+
post_install_message:
|
52
|
+
rdoc_options: []
|
53
|
+
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: "0"
|
61
|
+
version:
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: "0"
|
67
|
+
version:
|
68
|
+
requirements: []
|
69
|
+
|
70
|
+
rubyforge_project:
|
71
|
+
rubygems_version: 1.3.5
|
72
|
+
signing_key:
|
73
|
+
specification_version: 3
|
74
|
+
summary: Your summary here
|
75
|
+
test_files: []
|
76
|
+
|