camper_van 0.0.10 → 0.0.11
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 +2 -0
- data/bin/camper_van +4 -1
- data/camper_van.gemspec +2 -2
- data/lib/camper_van/ircd.rb +38 -4
- data/lib/camper_van/server.rb +1 -1
- data/lib/camper_van/version.rb +1 -1
- data/spec/camper_van/ircd_spec.rb +79 -0
- metadata +7 -7
data/README.md
CHANGED
@@ -53,6 +53,8 @@ Connect, and `/LIST` will show you the irc channels / campfire rooms you
|
|
53
53
|
have access to. To connect to more than one subdomain, make a separate
|
54
54
|
connection for each.
|
55
55
|
|
56
|
+
If your IRC client (mIRC) doesn't allow `:` in the password, you can use `-`.
|
57
|
+
|
56
58
|
Your campfire subdomain should be just the subdomain part. If your campfire url
|
57
59
|
is `mycompany.campfirenow.com`, your subdomain would be `mycompany`.
|
58
60
|
|
data/bin/camper_van
CHANGED
@@ -46,6 +46,8 @@ Options:
|
|
46
46
|
|
47
47
|
opt :pid, 'Path of the PID file', :type => :string,
|
48
48
|
:default => '/var/run/camper_van.pid'
|
49
|
+
|
50
|
+
opt :part_on_away, 'Part from channels when going away'
|
49
51
|
end
|
50
52
|
|
51
53
|
opts = Trollop.with_standard_exception_handling parser do
|
@@ -80,7 +82,8 @@ else
|
|
80
82
|
:ssl_cert => opts[:ssl_cert],
|
81
83
|
:ssl_verify_peer => opts[:ssl_verify_peer],
|
82
84
|
:daemon => opts[:daemon],
|
83
|
-
:pid => opts[:pid]
|
85
|
+
:pid => opts[:pid],
|
86
|
+
:part_on_away => opts[:part_on_away]
|
84
87
|
)
|
85
88
|
|
86
89
|
end
|
data/camper_van.gemspec
CHANGED
@@ -20,8 +20,8 @@ Gem::Specification.new do |s|
|
|
20
20
|
|
21
21
|
s.required_ruby_version = "~> 1.9.2"
|
22
22
|
|
23
|
-
s.add_dependency "eventmachine", "~> 0.
|
24
|
-
s.add_dependency "firering", "~> 1.
|
23
|
+
s.add_dependency "eventmachine", "~> 1.0.3"
|
24
|
+
s.add_dependency "firering", "~> 1.3.0"
|
25
25
|
s.add_dependency "logging", "~> 1.5.1"
|
26
26
|
s.add_dependency "trollop", "~> 1.16.2"
|
27
27
|
|
data/lib/camper_van/ircd.rb
CHANGED
@@ -17,7 +17,7 @@ module CamperVan
|
|
17
17
|
attr_reader :subdomain, :api_key
|
18
18
|
|
19
19
|
# Information for the connected user
|
20
|
-
attr_reader :nick, :user, :host
|
20
|
+
attr_reader :nick, :user, :host, :away
|
21
21
|
|
22
22
|
# A Hash of connected CampfireChannels
|
23
23
|
attr_reader :channels
|
@@ -26,6 +26,9 @@ module CamperVan
|
|
26
26
|
# Set to false when shutting down so extra commands are ignored.
|
27
27
|
attr_reader :active
|
28
28
|
|
29
|
+
# Additional options
|
30
|
+
attr_reader :options
|
31
|
+
|
29
32
|
MOTD = <<-motd
|
30
33
|
Welcome to CamperVan.
|
31
34
|
To see what campfire rooms are available to the
|
@@ -40,11 +43,18 @@ module CamperVan
|
|
40
43
|
|
41
44
|
# Public: initialize an IRC server connection
|
42
45
|
#
|
43
|
-
# client
|
44
|
-
|
46
|
+
# client - the EM connection representing the IRC client
|
47
|
+
# options - a Hash of additional options, defaults to {}
|
48
|
+
# :part_on_away - leave connected campfire rooms when irc client
|
49
|
+
# goes away, rejoin when coming back
|
50
|
+
#
|
51
|
+
def initialize(client, options = {})
|
45
52
|
@client = client
|
46
53
|
@active = true
|
47
54
|
@channels = {}
|
55
|
+
@away = false
|
56
|
+
@saved_channels = []
|
57
|
+
@options = options
|
48
58
|
end
|
49
59
|
|
50
60
|
# The campfire client
|
@@ -95,6 +105,13 @@ module CamperVan
|
|
95
105
|
shutdown
|
96
106
|
else
|
97
107
|
@subdomain, @api_key = *args.first.split(":")
|
108
|
+
|
109
|
+
# allow alternate '-' separator
|
110
|
+
if !@api_key
|
111
|
+
# split on the last occurrence of '-':
|
112
|
+
@subdomain, @api_key = *args.first.split(/-(?=[^-]+$)/)
|
113
|
+
end
|
114
|
+
|
98
115
|
# ignore full "mycompany.campfirenow.com" being set as the subdomain
|
99
116
|
@subdomain = subdomain.split(".").first
|
100
117
|
end
|
@@ -243,7 +260,24 @@ module CamperVan
|
|
243
260
|
end
|
244
261
|
|
245
262
|
handle :away do |args|
|
246
|
-
|
263
|
+
if @away
|
264
|
+
user_reply 305, "You are no longer marked as being away"
|
265
|
+
if options[:part_on_away]
|
266
|
+
@saved_channels.each do |channel|
|
267
|
+
join_channel channel
|
268
|
+
end
|
269
|
+
@saved_channels = []
|
270
|
+
end
|
271
|
+
else
|
272
|
+
user_reply 306, "You have been marked as being away"
|
273
|
+
if options[:part_on_away]
|
274
|
+
@saved_channels = channels.keys
|
275
|
+
channels.values.each do |channel|
|
276
|
+
channel.part
|
277
|
+
end
|
278
|
+
end
|
279
|
+
end
|
280
|
+
@away = !@away
|
247
281
|
end
|
248
282
|
|
249
283
|
handle :quit do |args|
|
data/lib/camper_van/server.rb
CHANGED
data/lib/camper_van/version.rb
CHANGED
@@ -22,6 +22,8 @@ describe CamperVan::IRCD do
|
|
22
22
|
|
23
23
|
class TestIRCD < CamperVan::IRCD
|
24
24
|
attr_writer :campfire
|
25
|
+
attr_writer :away
|
26
|
+
attr_accessor :saved_channels
|
25
27
|
end
|
26
28
|
|
27
29
|
before :each do
|
@@ -42,6 +44,18 @@ describe CamperVan::IRCD do
|
|
42
44
|
@server.api_key.must_equal "asdf1234"
|
43
45
|
end
|
44
46
|
|
47
|
+
it "allows '-' as a domain/api key separator" do
|
48
|
+
@server.handle :pass => ["test-asdf1234"]
|
49
|
+
@server.subdomain.must_equal "test"
|
50
|
+
@server.api_key.must_equal "asdf1234"
|
51
|
+
end
|
52
|
+
|
53
|
+
it "uses the *last* '-' as the separator in a domain/api key pair" do
|
54
|
+
@server.handle :pass => ["test-subdomain-asdf1234"]
|
55
|
+
@server.subdomain.must_equal "test-subdomain"
|
56
|
+
@server.api_key.must_equal "asdf1234"
|
57
|
+
end
|
58
|
+
|
45
59
|
it "only uses the subdomain if a full domain is specified" do
|
46
60
|
@server.handle :pass => ["test.campfirenow.com:asdf1234"]
|
47
61
|
@server.subdomain.must_equal "test"
|
@@ -238,6 +252,71 @@ describe CamperVan::IRCD do
|
|
238
252
|
|
239
253
|
end
|
240
254
|
|
255
|
+
context "with an AWAY command" do
|
256
|
+
before :each do
|
257
|
+
# register
|
258
|
+
@server.handle :pass => ["test:1234asdf"]
|
259
|
+
@server.handle :nick => ["nathan"]
|
260
|
+
@server.handle :user => ["nathan", 0, 0, "Nathan"]
|
261
|
+
end
|
262
|
+
|
263
|
+
context "with part_on_away set" do
|
264
|
+
before :each do
|
265
|
+
@server.options[:part_on_away] = true
|
266
|
+
|
267
|
+
@server.campfire = Class.new do
|
268
|
+
def rooms
|
269
|
+
yield [
|
270
|
+
OpenStruct.new(:name => "Test"),
|
271
|
+
OpenStruct.new(:name => "Day Job")
|
272
|
+
]
|
273
|
+
end
|
274
|
+
end.new
|
275
|
+
|
276
|
+
@server.handle :join => ["#test"]
|
277
|
+
@channel = MiniTest::Mock.new
|
278
|
+
@server.channels["#test"] = @channel
|
279
|
+
|
280
|
+
@connection.sent.clear
|
281
|
+
end
|
282
|
+
|
283
|
+
after :each do
|
284
|
+
@channel.verify
|
285
|
+
end
|
286
|
+
|
287
|
+
it "parts joined channels when not away" do
|
288
|
+
@channel.expect :part, nil
|
289
|
+
@server.away = false
|
290
|
+
@server.handle :away => ["bbl..."]
|
291
|
+
@server.away.must_equal true
|
292
|
+
end
|
293
|
+
|
294
|
+
it "rejoins previous channels when away" do
|
295
|
+
@channel.expect :join, nil
|
296
|
+
@server.saved_channels = ["#test"]
|
297
|
+
@server.away = true
|
298
|
+
@server.handle :away => []
|
299
|
+
@server.away.must_equal false
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
303
|
+
context "without part_on_away set" do
|
304
|
+
it "calls #away while not away" do
|
305
|
+
@server.away = false
|
306
|
+
@server.handle :away => ["bbl..."]
|
307
|
+
@server.away.must_equal true
|
308
|
+
@connection.sent.last.must_equal ":nathan!nathan@127.0.0.1 306 :You have been marked as being away"
|
309
|
+
end
|
310
|
+
|
311
|
+
it "returns from #away while away" do
|
312
|
+
@server.away = true
|
313
|
+
@server.handle :away => []
|
314
|
+
@server.away.must_equal false
|
315
|
+
@connection.sent.last.must_equal ":nathan!nathan@127.0.0.1 305 :You are no longer marked as being away"
|
316
|
+
end
|
317
|
+
end
|
318
|
+
end
|
319
|
+
|
241
320
|
end
|
242
321
|
|
243
322
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: camper_van
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
12
|
+
date: 2013-05-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: eventmachine
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.
|
21
|
+
version: 1.0.3
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.
|
29
|
+
version: 1.0.3
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: firering
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
requirements:
|
35
35
|
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 1.
|
37
|
+
version: 1.3.0
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 1.
|
45
|
+
version: 1.3.0
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: logging
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -149,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
149
149
|
version: '0'
|
150
150
|
segments:
|
151
151
|
- 0
|
152
|
-
hash: -
|
152
|
+
hash: -1560684573150717162
|
153
153
|
requirements: []
|
154
154
|
rubyforge_project: camper_van
|
155
155
|
rubygems_version: 1.8.23
|