cinch-memo 0.0.1 → 0.1.0

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/README.md CHANGED
@@ -33,6 +33,8 @@ Currently, only Redis is available as a backend store.
33
33
 
34
34
  * !memo [nick] [message] - stores the message for the user
35
35
  * !memo? - returns memo's for your nick
36
+
37
+ The bot will also auto message a user on join of the channel if there are messages for that user.
36
38
 
37
39
  ## Integration with Cinch ##
38
40
 
@@ -4,7 +4,7 @@ module Cinch
4
4
  class Base
5
5
  include Cinch::Plugin
6
6
  attr_accessor :backend
7
-
7
+
8
8
  class << self
9
9
  attr_accessor :store, :host, :port
10
10
 
@@ -15,17 +15,26 @@ module Cinch
15
15
 
16
16
  def initialize(*args)
17
17
  super
18
- @backend =
19
- case self.class.store
20
- when :redis then Cinch::Plugins::Memo::Redis.new(self.class.host, self.class.port)
21
- else
22
- self.class.store
23
- end
18
+ @backend =
19
+ case self.class.store
20
+ when :redis then Cinch::Plugins::Memo::Redis.new(self.class.host, self.class.port)
21
+ else
22
+ self.class.store
23
+ end
24
24
  end
25
25
 
26
26
  match %r{memo (\S*) (.*)}, :method => :store_message
27
27
  match %r{memo\?}, :method => :get_message
28
28
 
29
+ listen_to :join
30
+
31
+ def listen(m)
32
+ messages = @backend.retrieve(m.user.nick)
33
+ if messages || !messages.empty?
34
+ messages.each { |msg| User(m.user.nick).send(msg) }
35
+ end
36
+ end
37
+
29
38
  # Stores message to designated user.
30
39
  def store_message(m, nick, message)
31
40
  if nick == @bot.nick
@@ -6,7 +6,7 @@ module Cinch
6
6
  class Redis
7
7
 
8
8
  def initialize(host, port)
9
- @backend = ::Redis.new(:host => host, :port => port)
9
+ @backend = ::Redis.new(:host => host, :port => port, :thread_safe => true)
10
10
  end
11
11
 
12
12
  def store(recipient, sender, message)
@@ -1,7 +1,7 @@
1
1
  module Cinch
2
2
  module Plugins
3
3
  module Memo
4
- VERSION = "0.0.1"
4
+ VERSION = "0.1.0"
5
5
  end
6
6
  end
7
7
  end
@@ -3,7 +3,7 @@ require File.expand_path('../teststrap',__FILE__)
3
3
  context "Base" do
4
4
  dont_register!
5
5
  setup { @bot = mock() }
6
-
6
+
7
7
  helper :base do |store|
8
8
  Cinch::Plugins::Memo::Base.configure do |c|
9
9
  c.store = store
@@ -16,24 +16,24 @@ context "Base" do
16
16
  setup { base(:redis) }
17
17
  asserts(:store).equals :redis
18
18
  end
19
-
19
+
20
20
  context "#initialize" do
21
21
  setup { base(:redis).new(@bot) }
22
22
  asserts_topic.assigns :backend
23
23
  end
24
-
25
- context "#store_message" do
24
+
25
+ context "#store_message" do
26
26
  setup do
27
27
  @bot.expects(:nick).returns('bob')
28
28
  @base = base(:redis).new(@bot)
29
29
  @message = mock()
30
30
  end
31
-
31
+
32
32
  context "with bot nick" do
33
33
  setup { @message.expects(:reply).with("You can't store a message for me.").returns(true) }
34
34
  asserts("that it doesn't save message for bot") { @base.store_message(@message,'bob','hey') }
35
35
  end
36
-
36
+
37
37
  context "with non-bot nick" do
38
38
  setup do
39
39
  @replier = mock() ; @replier.expects(:nick).returns("chris")
@@ -44,18 +44,18 @@ context "Base" do
44
44
  @base.backend = @backend
45
45
  end
46
46
  asserts("that it does save message") { @base.store_message(@message, 'john', 'hey') }
47
- end
47
+ end
48
48
  end
49
-
50
- context "#deliver_message" do
49
+
50
+ context "#deliver_message" do
51
51
  setup do
52
52
  @replier = mock() ; @replier.expects(:nick).returns('chris')
53
53
  @message = mock() ; @message.expects(:user).returns(@replier)
54
54
  @backend = mock()
55
55
  @base = base(:redis).new(@bot)
56
56
  end
57
-
58
- context "with message" do
57
+
58
+ context "with message" do
59
59
  setup do
60
60
  @backend.expects(:retrieve).with('chris').returns(["john: hey there!", "john: bye!"])
61
61
  @base.backend = @backend
@@ -64,8 +64,8 @@ context "Base" do
64
64
  end
65
65
  asserts("that it returns message") { @base.get_message(@message) }
66
66
  end
67
-
68
- context "without message" do
67
+
68
+ context "without message" do
69
69
  setup do
70
70
  @backend.expects(:retrieve).with('chris').returns([])
71
71
  @base.backend = @backend
@@ -74,5 +74,32 @@ context "Base" do
74
74
  asserts("that it says there aren't messages") { @base.get_message(@message) }
75
75
  end
76
76
  end
77
-
78
- end
77
+
78
+ context "#listen" do
79
+ setup do
80
+ @replier = mock() ; @replier.stubs(:nick).returns('chris')
81
+ @message = mock() ; @message.stubs(:user).returns(@replier)
82
+ @backend = mock()
83
+ @base = base(:redis).new(@bot)
84
+ end
85
+ context "with messages" do
86
+ setup do
87
+ @u = mock() ; @u.expects(:send).with('john')
88
+ @base.expects(:User).with('chris').returns(@u)
89
+ @backend.expects(:retrieve).with('chris').returns(['john'])
90
+ @base.backend = @backend
91
+ end
92
+ asserts("that it pings message") { @base.listen(@message) }
93
+ end
94
+
95
+ context "without messages" do
96
+ setup do
97
+ @backend.expects(:retrieve).with('chris').returns([])
98
+ @base.expects(:User).with('chris').never
99
+ @base.backend = @backend
100
+ end
101
+ asserts("that it doesn't ping them") { @base.listen(@message) }
102
+ end
103
+ end
104
+
105
+ end
@@ -14,7 +14,7 @@ context "Redis" do
14
14
  end
15
15
 
16
16
  context "#initialize" do
17
- setup { ::Redis.expects(:new).with(:host => 'localhost', :port => '6709') }
17
+ setup { ::Redis.expects(:new).with(:host => 'localhost', :port => '6709', :thread_safe => true) }
18
18
  setup { base.new(@bot) }
19
19
  asserts_topic.assigns :backend
20
20
  end
@@ -23,7 +23,7 @@ context "Redis" do
23
23
  setup do
24
24
  Timecop.freeze(Time.now)
25
25
  backend = mock() ; backend.expects(:sadd).with('bob', ['chris','yo yo', Time.now].to_json).returns(true)
26
- ::Redis.expects(:new).with(:host => 'localhost', :port => '6709').returns(backend)
26
+ ::Redis.expects(:new).with(:host => 'localhost', :port => '6709', :thread_safe=>true).returns(backend)
27
27
  Cinch::Plugins::Memo::Redis.new('localhost','6709')
28
28
  end
29
29
  asserts("that it stores message") { topic.store('bob', 'chris','yo yo') }
@@ -34,7 +34,7 @@ context "Redis" do
34
34
  Timecop.freeze(Time.now)
35
35
  backend = mock() ; backend.expects(:smembers).with("bob").returns("\[\"a\",\"b\",\"c\"\]")
36
36
  backend.expects(:del).with('bob').returns(true)
37
- ::Redis.expects(:new).with(:host => 'localhost', :port => '6709').returns(backend)
37
+ ::Redis.expects(:new).with(:host => 'localhost', :port => '6709', :thread_safe=>true).returns(backend)
38
38
  Cinch::Plugins::Memo::Redis.new('localhost','6709')
39
39
  end
40
40
  asserts("that it retrieves message") { topic.retrieve('bob') }
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 0
8
7
  - 1
9
- version: 0.0.1
8
+ - 0
9
+ version: 0.1.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Arthur Chiu
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-11-07 01:00:00 -07:00
17
+ date: 2010-11-09 00:00:00 -08:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency