dragoon 0.0.9 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,6 +7,7 @@ require 'json'
7
7
  require 'active_support/core_ext/hash/indifferent_access'
8
8
 
9
9
  require 'dragoon/event'
10
+ require 'dragoon/receiver'
10
11
  require 'dragoon/network'
11
12
  require 'dragoon/event_manager'
12
13
  require 'dragoon/color'
@@ -99,14 +100,14 @@ module Dragoon
99
100
  end
100
101
 
101
102
  on :privmsg do |msg, source|
102
- if growlnotify_supported?
103
+ if growlnotify_supported? && growl_running?
103
104
  if keyword = @keywords.detect { |keyword| msg.text.include?(keyword) }
104
105
  system("growlnotify " +
105
- "-t \"#{msg.channel} - #{keyword}\" " +
106
+ "-t \"#{msg.receiver} - #{keyword}\" " +
106
107
  "-m \"#{msg.privmsg.escape_double_quotes}\"")
107
108
  end
108
109
  end
109
- log "#{colorize(msg.channel)} <#{msg.nickname}> #{highlight_keywords(msg.privmsg,@keywords)}"
110
+ log "#{colorize(msg.receiver)} <#{msg.nickname}> #{highlight_keywords(msg.privmsg,@keywords)}"
110
111
  end
111
112
  end
112
113
 
@@ -136,7 +137,7 @@ module Dragoon
136
137
  dispatch(@event,
137
138
  @networks.select{ |n|
138
139
  n.server == socket.peeraddr[2] &&
139
- n.port = socket.peeraddr[1]
140
+ n.port == socket.peeraddr[1]
140
141
  }.first
141
142
  )
142
143
  end
@@ -167,6 +168,10 @@ module Dragoon
167
168
  @growlnotify_supported ||= system("which growlnotify > /dev/null")
168
169
  end
169
170
 
171
+ def growl_running?
172
+ `ps ax | grep -i growl | grep -v grep | wc -l `.strip.to_i == 1
173
+ end
174
+
170
175
  end
171
176
  end
172
177
 
@@ -30,7 +30,7 @@ module Dragoon
30
30
  :nickname => $1,
31
31
  :user => $2,
32
32
  :hostname => $3,
33
- :channel => $4,
33
+ :receiver => Receiver.new($4),
34
34
  :privmsg => $5))
35
35
  when /^:\S+ (4\d{2}|5\d{2}) .*/
36
36
  self.new(:err, Message.new(:text => line, :error_code => $1))
@@ -0,0 +1,22 @@
1
+ module Dragoon
2
+ # RFC 1459 section 4.4.1
3
+ #
4
+ # a receiver can be
5
+ # a nickname,
6
+ # a channel
7
+ #
8
+ class Receiver < String
9
+
10
+ def initialize(raw_string)
11
+ super(raw_string)
12
+ end
13
+ # checks if first character of is #
14
+ def channel?
15
+ self[0].chr == "#"
16
+ end
17
+
18
+ def nickname?
19
+ !channel?
20
+ end
21
+ end
22
+ end
@@ -1,3 +1,3 @@
1
1
  module Dragoon
2
- VERSION = "0.0.9"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -36,7 +36,7 @@ describe Dragoon::Bot do
36
36
  socket = @client.connect(@network)
37
37
  socket.class.should == TCPSocket
38
38
  socket.peeraddr[1].should == 7777
39
- socket.peeraddr[2].should == 'localhost'
39
+ socket.peeraddr[2].should include 'localhost'
40
40
  end
41
41
  end
42
42
  end
@@ -49,8 +49,18 @@ describe Dragoon::Event do
49
49
  event.message.nickname.should == "nick"
50
50
  event.message.user.should == "~user"
51
51
  event.message.hostname.should == "hostname"
52
- event.message.channel.should == "#ruby"
52
+ event.message.receiver.should == "#ruby"
53
53
  event.message.privmsg.should == "array << 0 if array.size.odd?"
54
+
55
+ msg = ":NeoStats!Neo@NeoStats.QuartzNet.Org PRIVMSG fenix456 :VERSION"
56
+ event = Dragoon::Event.parse(msg)
57
+ event.name.should == :privmsg
58
+ event.message.text.should == msg
59
+ event.message.nickname.should == "NeoStats"
60
+ event.message.user.should == "Neo"
61
+ event.message.hostname.should == "NeoStats.QuartzNet.Org"
62
+ event.message.receiver.should == "fenix456"
63
+ event.message.privmsg.should == "VERSION"
54
64
  end
55
65
 
56
66
  it "should process error reply event" do
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe Dragoon::Receiver do
4
+ context "when its a nickname" do
5
+ before(:each) do
6
+ @raw_string = "fenix456"
7
+ @receiver = Dragoon::Receiver.new(@raw_string)
8
+ end
9
+
10
+ it "should be a nickname" do
11
+ @receiver.nickname?.should == true
12
+ @receiver.channel?.should == false
13
+ end
14
+
15
+ it "should have nickname as value" do
16
+ @receiver.should == @raw_string
17
+ end
18
+ end
19
+
20
+ context "when its a channel" do
21
+ before(:each) do
22
+ @raw_string = "#coffeescript"
23
+ @receiver = Dragoon::Receiver.new(@raw_string)
24
+ end
25
+
26
+ it "should be a channel" do
27
+ @receiver.channel?.should == true
28
+ @receiver.nickname?.should == false
29
+ end
30
+
31
+ it "should have channel as value" do
32
+ @receiver.should == @raw_string
33
+ end
34
+ end
35
+
36
+ end
@@ -16,13 +16,13 @@ class LocalServer
16
16
  @port = port
17
17
  end
18
18
 
19
+ # child processes spawned from accepting new connection would automatically quit upon client exit
19
20
  def run
20
21
  server = TCPServer.new('localhost', @port)
21
- server.listen(5)
22
22
  @pid = fork {
23
23
  while socket = server.accept
24
24
  fork {
25
- trap("PIPE") { exit }
25
+ trap("PIPE") { exit } # exit on write attempt after client exits
26
26
  loop { socket.write("localhost port #{socket.addr[1]} dumping text\r\n") }
27
27
  }
28
28
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dragoon
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
+ - 1
8
9
  - 0
9
- - 9
10
- version: 0.0.9
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Reginald Tan
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-02-12 00:00:00 Z
18
+ date: 2012-03-07 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rspec
@@ -99,7 +99,6 @@ extra_rdoc_files: []
99
99
  files:
100
100
  - .gitignore
101
101
  - Gemfile
102
- - Gemfile.lock
103
102
  - README.md
104
103
  - Rakefile
105
104
  - TODO
@@ -111,12 +110,14 @@ files:
111
110
  - lib/dragoon/event.rb
112
111
  - lib/dragoon/event_manager.rb
113
112
  - lib/dragoon/network.rb
113
+ - lib/dragoon/receiver.rb
114
114
  - lib/dragoon/version.rb
115
115
  - sample_config
116
116
  - spec/colors_spec.rb
117
117
  - spec/dragoon_spec.rb
118
118
  - spec/event_manager_spec.rb
119
119
  - spec/event_spec.rb
120
+ - spec/receiver_spec.rb
120
121
  - spec/spec_helper.rb
121
122
  homepage: https://github.com/redgetan/dragoon
122
123
  licenses: []
@@ -156,5 +157,6 @@ test_files:
156
157
  - spec/dragoon_spec.rb
157
158
  - spec/event_manager_spec.rb
158
159
  - spec/event_spec.rb
160
+ - spec/receiver_spec.rb
159
161
  - spec/spec_helper.rb
160
162
  has_rdoc: