root/lang/ruby/chokan/branches/citrus/plugins/system.rb @ 6415

Revision 6415, 2.8 kB (checked in by cho45, 6 years ago)

lang/ruby/chokan/branches/citrus/plugins/system.rb,
lang/ruby/chokan/branches/citrus/lib/citrus/core.rb,
lang/ruby/chokan/branches/citrus/spec/core_spec.rb,
lang/ruby/chokan/branches/citrus/spec/spec_helper.rb:

最近 trunk にコミットしたやつをこっちにもとかいろいろ

  • Property svn:executable set to *
Line 
1#!/usr/bin/env ruby
2
3class System < Citrus::Plugin
4        def on_privmsg(prefix, channel, message)
5                return unless Regexp.new(@config['operator']) =~ prefix
6                case message
7                when /^reload(?:\s+([a-z]+))?$/i
8                        log "#{prefix}: call reloading"
9                        begin
10                                @core.reload_config
11                        rescue => e
12                                log e.message
13                        end
14                        name = Regexp.last_match[1]
15                        log name
16                        if name
17                                begin
18                                        instances = [@core.reload_plugin(name)]
19                                rescue Plugins::UnknownPlugin => e
20                                        notice channel, e.message
21                                        instances = []
22                                end
23                        else
24                                instances = @core.reload_plugins.values
25                        end
26                        if instances.empty?
27                                notice channel, "No plugins to reload."
28                        else
29                                reloaded = instances.map {|i|
30                                        i.class.name.sub(/^.+::/, "")
31                                }.join(" ")
32                                notice channel, "Reloaded: " + reloaded
33                        end
34
35                when /^chokan: join to (\S+)(?: (\S+))?/
36                        chan, pass = Regexp.last_match.captures
37                        log "Joining to '#{chan}' with '#{pass}'"
38                        join(chan.to_s, pass.to_s)
39
40                when "chokan: part"
41                        part(channel, "lambda....")
42
43                when "operator?"
44                        notice channel, "You are an operator for me."
45
46                when "Gem.clear_paths"
47                        r = Gem.clear_paths
48                        notice channel, "Gem.clear_paths #{r.inspect}"
49                end
50        end
51end
52
53tests do
54
55        describe System do
56                before :all do
57                        @core     = DummyCore.new({})
58                        @socket   = @core.socket
59                        @prefix   = Net::IRC::Prefix.new("foo!foo@localhost")
60                        @prefixop = Net::IRC::Prefix.new("foo!bar@localhost")
61
62                        @plugin = System.new(@core, { "System" => {
63                                "operator" => "foo!bar@localhost",
64                        } })
65                end
66
67                it "should response to operator" do
68                        @socket.string = ""
69                        @plugin.on_privmsg(@prefix, "#test", "operator?")
70                        @socket.string.should == ""
71
72                        @socket.string = ""
73                        @plugin.on_privmsg(@prefixop, "#test", "operator?")
74                        @socket.string.should == "NOTICE #test :You are an operator for me.\r\n"
75                end
76
77                it "can reload_plugins" do
78                        @socket.string = ""
79                        @plugin.on_privmsg(@prefixop, "#test", "reload")
80                        @socket.string.should match(/^NOTICE #test /)
81
82                        @socket.string = ""
83                        @plugin.on_privmsg(@prefixop, "#test", "reload Dummy")
84                        @socket.string.should match(/^NOTICE #test /)
85
86                        @socket.string = ""
87                        @plugin.on_privmsg(@prefixop, "#test", "reload Unknown")
88                        @socket.string.should match(/^NOTICE #test /)
89                end
90
91                it "can operate join/part" do
92                        @socket.string = ""
93                        @plugin.on_privmsg(@prefixop, "#test", "chokan: part")
94                        @socket.string.should match(/^PART #test /)
95
96                        @socket.string = ""
97                        @plugin.on_privmsg(@prefixop, "#test", "chokan: join to #foobar")
98                        @socket.string.should match(/^JOIN #foobar /)
99
100                        @socket.string = ""
101                        @plugin.on_privmsg(@prefixop, "#test", "chokan: join to #foobar password")
102                        @socket.string.should match(/^JOIN #foobar password/)
103                end
104
105                it "can Gem.clear_paths" do
106                        @socket.string = ""
107                        @plugin.on_privmsg(@prefixop, "#test", "Gem.clear_paths")
108                        @socket.string.should match(/^NOTICE #test :Gem.clear_paths/)
109                end
110        end
111
112end
113
Note: See TracBrowser for help on using the browser.