bbrowning-ponder 0.0.2.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 +7 -0
- data/README.md +334 -0
- data/examples/echo.rb +25 -0
- data/examples/github_blog.rb +31 -0
- data/examples/redis_last_seen.rb +140 -0
- data/lib/ponder.rb +22 -0
- data/lib/ponder/async_irc.rb +117 -0
- data/lib/ponder/callback.rb +42 -0
- data/lib/ponder/connection.rb +37 -0
- data/lib/ponder/delegate.rb +11 -0
- data/lib/ponder/filter.rb +7 -0
- data/lib/ponder/formatting.rb +30 -0
- data/lib/ponder/irc.rb +110 -0
- data/lib/ponder/logger/blind_io.rb +11 -0
- data/lib/ponder/logger/twoflogger.rb +93 -0
- data/lib/ponder/logger/twoflogger18.rb +93 -0
- data/lib/ponder/thaum.rb +233 -0
- data/lib/ponder/version.rb +3 -0
- data/ponder.gemspec +38 -0
- data/test/test_async_irc.rb +108 -0
- data/test/test_callback.rb +54 -0
- data/test/test_helper.rb +3 -0
- data/test/test_irc.rb +130 -0
- metadata +107 -0
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
$LOAD_PATH.unshift Pathname.new(__FILE__).dirname.expand_path
|
3
|
+
require 'test_helper'
|
4
|
+
require 'ponder/callback'
|
5
|
+
|
6
|
+
module Ponder
|
7
|
+
class Callback
|
8
|
+
attr_reader :event_type, :match, :proc
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class TestCallback < Test::Unit::TestCase
|
13
|
+
def setup
|
14
|
+
@empty_proc = Proc.new { }
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_perfect_case
|
18
|
+
callback = Ponder::Callback.new(:channel, /foo/, @empty_proc)
|
19
|
+
|
20
|
+
assert_equal(/foo/, callback.match)
|
21
|
+
assert_equal(@empty_proc, callback.proc)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_unsupported_event_type
|
25
|
+
assert_raise(TypeError) do
|
26
|
+
Ponder::Callback.new('fu', /foo/, @empty_proc)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_regexp
|
31
|
+
assert_raise(TypeError) do
|
32
|
+
Ponder::Callback.new(:channel, 8, @empty_proc)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_proc
|
37
|
+
assert_raise(TypeError) do
|
38
|
+
Ponder::Callback.new(:channel, /foo/, 8)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def test__trivial_proc
|
43
|
+
proc = Proc.new { 7 + 1 }
|
44
|
+
|
45
|
+
assert_equal(proc, Ponder::Callback.new(:channel, //, proc).proc)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_call
|
49
|
+
proc = Proc.new { 8 }
|
50
|
+
|
51
|
+
assert_equal(8, Ponder::Callback.new(:channel, /wizzard/, proc).call(:channel, {:message => 'I like wizzards'}))
|
52
|
+
assert_nil(Ponder::Callback.new(:channel, /wizzard/, proc).call(:channel, {:message => 'I am a wizard'}))
|
53
|
+
end
|
54
|
+
end
|
data/test/test_helper.rb
ADDED
data/test/test_irc.rb
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
$LOAD_PATH.unshift Pathname.new(__FILE__).dirname.expand_path
|
3
|
+
require 'test_helper'
|
4
|
+
require 'ponder/irc'
|
5
|
+
require 'ostruct'
|
6
|
+
|
7
|
+
include Ponder::IRC
|
8
|
+
|
9
|
+
module Ponder
|
10
|
+
module IRC
|
11
|
+
def raw(message)
|
12
|
+
$output << "#{message}\r\n"
|
13
|
+
return "#{message}\r\n"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class TestIRC < Test::Unit::TestCase
|
19
|
+
def setup
|
20
|
+
@config = ::OpenStruct.new({:nick => 'Ponder',
|
21
|
+
:username => 'Ponder',
|
22
|
+
:real_name => 'Ponder Stibbons',
|
23
|
+
:password => 'secret',
|
24
|
+
:reconnect => true
|
25
|
+
})
|
26
|
+
$output = []
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_message
|
30
|
+
assert_equal("PRIVMSG recipient :foo bar baz\r\n", Ponder::IRC.message('recipient', 'foo bar baz')) # `message` is already defined, so we need to use Ponder::IRC
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_register
|
34
|
+
register
|
35
|
+
|
36
|
+
assert_equal(["NICK Ponder\r\n", "USER Ponder * * :Ponder Stibbons\r\n", "PASS secret\r\n"], $output)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_register_without_password
|
40
|
+
@config.password = nil
|
41
|
+
register
|
42
|
+
|
43
|
+
assert_equal(["NICK Ponder\r\n", "USER Ponder * * :Ponder Stibbons\r\n"], $output)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_notice
|
47
|
+
assert_equal("NOTICE Ponder :You are cool!\r\n", notice('Ponder', 'You are cool!'))
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_mode
|
51
|
+
assert_equal("MODE Ponder +ao\r\n", mode('Ponder', '+ao'))
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_kick
|
55
|
+
assert_equal("KICK #channel Nanny_Ogg\r\n", kick('#channel', 'Nanny_Ogg'))
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_kick_with_reason
|
59
|
+
assert_equal("KICK #channel Nanny_Ogg :Go away!\r\n", kick('#channel', 'Nanny_Ogg', 'Go away!'))
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_action
|
63
|
+
assert_equal("PRIVMSG #channel :\001ACTION HEX is working!\001\r\n", action('#channel', 'HEX is working!'))
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_topic
|
67
|
+
assert_equal("TOPIC #channel :I like dried frog pills.\r\n", topic('#channel', 'I like dried frog pills.'))
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_join
|
71
|
+
assert_equal("JOIN #channel\r\n", join('#channel'))
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_join_with_password
|
75
|
+
assert_equal("JOIN #channel secret\r\n", join('#channel', 'secret'))
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_part
|
79
|
+
assert_equal("PART #channel\r\n", part('#channel'))
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_part_with_message
|
83
|
+
assert_equal("PART #channel :Partpart\r\n", part('#channel', 'Partpart'))
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_quit
|
87
|
+
quit
|
88
|
+
|
89
|
+
assert_equal(["QUIT\r\n"], $output)
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_quit_with_message
|
93
|
+
quit('GONE')
|
94
|
+
|
95
|
+
assert_equal(["QUIT :GONE\r\n"], $output)
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_quit_reconnect_change
|
99
|
+
assert_equal(true, @config.reconnect)
|
100
|
+
|
101
|
+
quit
|
102
|
+
|
103
|
+
assert_equal(false, @config.reconnect)
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_rename
|
107
|
+
assert_equal("NICK :Ridcully\r\n", rename('Ridcully'))
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_away
|
111
|
+
assert_equal("AWAY\r\n", away)
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_away_with_message
|
115
|
+
assert_equal("AWAY :At the Mended Drum\r\n", away('At the Mended Drum'))
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_back
|
119
|
+
assert_equal("AWAY\r\n", back)
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_invite
|
123
|
+
assert_equal("INVITE TheLibrarian #mended_drum\r\n", invite('TheLibrarian', '#mended_drum'))
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_ban
|
127
|
+
assert_equal("MODE #mended_drum +b foo!bar@baz\r\n", ban('#mended_drum', 'foo!bar@baz'))
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
metadata
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bbrowning-ponder
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 69
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 2
|
10
|
+
- 1
|
11
|
+
version: 0.0.2.1
|
12
|
+
platform: ruby
|
13
|
+
authors:
|
14
|
+
- "Tobias B\xC3\xBChlmann"
|
15
|
+
autorequire:
|
16
|
+
bindir: bin
|
17
|
+
cert_chain: []
|
18
|
+
|
19
|
+
date: 2011-01-27 00:00:00 -05:00
|
20
|
+
default_executable:
|
21
|
+
dependencies:
|
22
|
+
- !ruby/object:Gem::Dependency
|
23
|
+
name: eventmachine
|
24
|
+
prerelease: false
|
25
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ">="
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
hash: 59
|
31
|
+
segments:
|
32
|
+
- 0
|
33
|
+
- 12
|
34
|
+
- 10
|
35
|
+
version: 0.12.10
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id001
|
38
|
+
description: Ponder (Stibbons) is a Domain Specific Language for writing IRC Bots using the EventMachine library.
|
39
|
+
email: tobias.buehlmann@gmx.de
|
40
|
+
executables: []
|
41
|
+
|
42
|
+
extensions: []
|
43
|
+
|
44
|
+
extra_rdoc_files: []
|
45
|
+
|
46
|
+
files:
|
47
|
+
- examples/echo.rb
|
48
|
+
- examples/github_blog.rb
|
49
|
+
- examples/redis_last_seen.rb
|
50
|
+
- lib/ponder/async_irc.rb
|
51
|
+
- lib/ponder/callback.rb
|
52
|
+
- lib/ponder/connection.rb
|
53
|
+
- lib/ponder/delegate.rb
|
54
|
+
- lib/ponder/filter.rb
|
55
|
+
- lib/ponder/formatting.rb
|
56
|
+
- lib/ponder/irc.rb
|
57
|
+
- lib/ponder/thaum.rb
|
58
|
+
- lib/ponder/version.rb
|
59
|
+
- lib/ponder/logger/blind_io.rb
|
60
|
+
- lib/ponder/logger/twoflogger.rb
|
61
|
+
- lib/ponder/logger/twoflogger18.rb
|
62
|
+
- lib/ponder.rb
|
63
|
+
- test/test_async_irc.rb
|
64
|
+
- test/test_callback.rb
|
65
|
+
- test/test_helper.rb
|
66
|
+
- test/test_irc.rb
|
67
|
+
- LICENSE
|
68
|
+
- ponder.gemspec
|
69
|
+
- README.md
|
70
|
+
has_rdoc: true
|
71
|
+
homepage: http://github.com/tbuehlmann/ponder
|
72
|
+
licenses: []
|
73
|
+
|
74
|
+
post_install_message:
|
75
|
+
rdoc_options: []
|
76
|
+
|
77
|
+
require_paths:
|
78
|
+
- lib
|
79
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
hash: 59
|
85
|
+
segments:
|
86
|
+
- 1
|
87
|
+
- 8
|
88
|
+
- 6
|
89
|
+
version: 1.8.6
|
90
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
hash: 3
|
96
|
+
segments:
|
97
|
+
- 0
|
98
|
+
version: "0"
|
99
|
+
requirements: []
|
100
|
+
|
101
|
+
rubyforge_project:
|
102
|
+
rubygems_version: 1.3.7
|
103
|
+
signing_key:
|
104
|
+
specification_version: 3
|
105
|
+
summary: IRC bot framework
|
106
|
+
test_files: []
|
107
|
+
|