Salut 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/Salut/Browser.rb +1 -0
- data/lib/Salut/Service.rb +3 -2
- data/spec/Service_spec.rb +221 -106
- metadata +3 -3
data/lib/Salut/Browser.rb
CHANGED
data/lib/Salut/Service.rb
CHANGED
@@ -99,7 +99,7 @@ module Salut
|
|
99
99
|
# exiting will also cause the service to stop being published.
|
100
100
|
def stop_advertising
|
101
101
|
@service.stop
|
102
|
-
@service
|
102
|
+
@service = nil
|
103
103
|
end
|
104
104
|
|
105
105
|
# @endgroup
|
@@ -110,6 +110,7 @@ module Salut
|
|
110
110
|
# A more Ruby-like #resolveWithTimeout by supporting a default argument
|
111
111
|
# @param [Float] timeout number of seconds to wait before timing out
|
112
112
|
def resolve timeout = 60.0
|
113
|
+
@service.delegate = self
|
113
114
|
@service.resolveWithTimeout timeout
|
114
115
|
end
|
115
116
|
|
@@ -178,7 +179,7 @@ module Salut
|
|
178
179
|
def netServiceDidStop sender
|
179
180
|
@advertising = false
|
180
181
|
@delegates[__method__].call sender if @delegates[__method__]
|
181
|
-
Salut.log.info "Stopped advertising service (#{sender.description})"
|
182
|
+
Salut.log.info "Stopped advertising/resolving service (#{sender.description})"
|
182
183
|
end
|
183
184
|
|
184
185
|
# @endgroup
|
data/spec/Service_spec.rb
CHANGED
@@ -49,259 +49,374 @@ describe Salut::Service do
|
|
49
49
|
|
50
50
|
|
51
51
|
describe '#service' do
|
52
|
-
|
52
|
+
before do
|
53
|
+
@service = Salut::Service.new({
|
54
|
+
port:3000,
|
55
|
+
instance_name:'Test',
|
56
|
+
service_type:'_http._tcp.'
|
57
|
+
})
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'is an NSNetService instance when not nil' do
|
61
|
+
@service.start_advertising
|
62
|
+
@service.service.class.should.be.equal NSNetService
|
53
63
|
end
|
54
64
|
|
55
65
|
it 'can be set at initialization' do
|
66
|
+
new_service = NSNetService.alloc.initWithDomain '',
|
67
|
+
type:'_http._tcp.',
|
68
|
+
name:'TEST',
|
69
|
+
port:4000
|
70
|
+
@service = Salut::Service.new({ service:new_service })
|
71
|
+
@service.service.should.be.equal new_service
|
56
72
|
end
|
57
73
|
|
58
74
|
it 'will be created when advertising starts' do
|
75
|
+
@service.service.should.be.equal nil
|
76
|
+
@service.start_advertising
|
77
|
+
@service.service.should.not.be.equal nil
|
59
78
|
end
|
60
79
|
|
61
80
|
it 'will be set to nil when advertising stops' do
|
81
|
+
@service.service.should.be.equal nil
|
82
|
+
@service.start_advertising
|
83
|
+
NSRunLoop.currentRunLoop.runUntilDate (Time.now + 5)
|
84
|
+
@service.stop_advertising
|
85
|
+
@service.service.should.be.equal nil
|
62
86
|
end
|
63
87
|
end
|
64
88
|
|
65
89
|
|
66
90
|
describe '#initialize' do
|
67
91
|
it 'will let you initialize the port number' do
|
92
|
+
Salut::Service.new({ port:4000 }).port.should.be.equal 4000
|
68
93
|
end
|
69
94
|
|
70
95
|
it 'will let you initialize the instance name' do
|
96
|
+
Salut::Service.new({ instance_name:'TEST' }).instance_name.should.be.equal 'TEST'
|
71
97
|
end
|
72
98
|
|
73
99
|
it 'will let you initialize the service type' do
|
100
|
+
Salut::Service.new({ service_type:'_http._tcp.' }).service_type.should.be.equal '_http._tcp.'
|
74
101
|
end
|
75
102
|
|
76
103
|
it 'will let you initialize with a service' do
|
104
|
+
new_service = NSNetService.alloc.initWithDomain '',
|
105
|
+
type:'_http._tcp.',
|
106
|
+
name:'TEST',
|
107
|
+
port:4000
|
108
|
+
@service = Salut::Service.new({ service:new_service })
|
109
|
+
@service.service.should.be.equal new_service
|
77
110
|
end
|
78
111
|
|
79
112
|
it 'will initialize delegates to an empty hash' do
|
113
|
+
Salut::Service.new.delegates.should.be.equal Hash.new
|
80
114
|
end
|
81
115
|
|
82
116
|
it 'will initialize @advertising to false' do
|
117
|
+
Salut::Service.new.advertising?.should.be.equal false
|
83
118
|
end
|
84
119
|
|
85
120
|
it 'will let you initialize with nothing being set' do
|
121
|
+
@service = Salut::Service.new
|
122
|
+
@service.should.not.be.equal nil
|
86
123
|
end
|
87
124
|
end
|
88
125
|
|
89
126
|
|
90
127
|
describe '#delegates' do
|
91
128
|
it 'should be initialized to an empty hash' do
|
129
|
+
Salut::Service.new.delegates.should.be.equal Hash.new
|
92
130
|
end
|
93
131
|
|
94
132
|
it 'should be writable' do
|
133
|
+
@service = Salut::Service.new
|
134
|
+
@service.delegates[:test] = Proc.new { true }
|
135
|
+
@service.delegates[:test].should.not.be.equal nil
|
95
136
|
end
|
96
137
|
end
|
97
138
|
|
98
139
|
|
99
140
|
describe '#[]' do
|
100
|
-
it 'should be equivalent to #delegates' do
|
141
|
+
it 'should be equivalent to #delegates[]' do
|
142
|
+
@service = Salut::Service.new
|
143
|
+
@service.delegates[:test] = 'HEY'
|
144
|
+
@service[:test].should.be.equal 'HEY'
|
101
145
|
end
|
102
146
|
end
|
103
147
|
|
104
148
|
|
105
149
|
describe '#[]=' do
|
106
|
-
it 'should be equivalent to #delegates=' do
|
150
|
+
it 'should be equivalent to #delegates[]=' do
|
151
|
+
@service = Salut::Service.new
|
152
|
+
@service[:test] = 'HEY'
|
153
|
+
@service.delegates[:test].should.be.equal 'HEY'
|
107
154
|
end
|
108
155
|
end
|
109
156
|
|
110
157
|
|
111
158
|
describe '#start_advertising' do
|
159
|
+
before do
|
160
|
+
@service = Salut::Service.new({
|
161
|
+
instance_name:'TEST',
|
162
|
+
service_type:'_test._tcp.',
|
163
|
+
port:9001
|
164
|
+
})
|
165
|
+
end
|
166
|
+
|
112
167
|
it 'should create a new @service object' do
|
168
|
+
@service.service.should.be.equal nil
|
169
|
+
@service.start_advertising
|
170
|
+
@service.service.should.not.be.equal nil
|
113
171
|
end
|
114
172
|
|
115
173
|
it 'should set the delegate for @service to self' do
|
174
|
+
@service.delegates[:'netServiceWillPublish:'] = Proc.new { |sender|
|
175
|
+
@service.service.should.be.equal sender
|
176
|
+
}
|
177
|
+
@service.start_advertising
|
116
178
|
end
|
117
179
|
|
118
180
|
# a fragile test since it depends on one of the callbacks
|
119
181
|
# being called
|
120
182
|
it 'should call #publish on @service' do
|
183
|
+
@service.delegates[:'netServiceWillPublish:'] = Proc.new { |sender|
|
184
|
+
@service.service.should.be.equal sender
|
185
|
+
}
|
186
|
+
@service.start_advertising
|
121
187
|
end
|
122
188
|
|
123
189
|
it 'should set domain to an empty string by default' do
|
190
|
+
@service.start_advertising
|
191
|
+
@service.service.domain.should.be.equal ''
|
124
192
|
end
|
125
193
|
|
126
194
|
it 'should allow me to specify a domain' do
|
195
|
+
@service.start_advertising 'local.'
|
196
|
+
@service.service.domain.should.be.equal 'local.'
|
197
|
+
end
|
198
|
+
|
199
|
+
it 'should fail if service type, instance name, or port are not set' do
|
200
|
+
@service.service_type = nil
|
201
|
+
should.raise(NoMethodError) { @service.start_advertising }
|
127
202
|
end
|
128
203
|
end
|
129
204
|
|
130
205
|
|
131
206
|
describe '#stop_advertising' do
|
207
|
+
before do
|
208
|
+
@service = Salut::Service.new({
|
209
|
+
instance_name:'TEST',
|
210
|
+
service_type:'_test._tcp.',
|
211
|
+
port:9001
|
212
|
+
})
|
213
|
+
@service.start_advertising
|
214
|
+
NSRunLoop.currentRunLoop.runUntilDate Time.now + 3
|
215
|
+
end
|
216
|
+
|
132
217
|
# a fragile test since it depends on one of the callbacks
|
133
218
|
# being called
|
134
219
|
it 'should call #stop on @service' do
|
220
|
+
@service.delegates[:'netServiceDidStop:'] = Proc.new { |sender|
|
221
|
+
true.should.be.equal true
|
222
|
+
}
|
223
|
+
@service.stop_advertising
|
224
|
+
NSRunLoop.currentRunLoop.runUntilDate Time.now + 3
|
135
225
|
end
|
136
226
|
|
137
227
|
it 'should set @service to nil' do
|
228
|
+
@service.service.should.not.be.equal nil
|
229
|
+
@service.stop_advertising
|
230
|
+
NSRunLoop.currentRunLoop.runUntilDate Time.now + 3
|
231
|
+
@service.service.should.be.equal nil
|
138
232
|
end
|
139
233
|
end
|
140
234
|
|
141
235
|
|
142
236
|
describe '#resolve' do
|
143
237
|
before do
|
144
|
-
|
238
|
+
@service = Salut::Service.new({
|
239
|
+
instance_name:'TEST',
|
240
|
+
service_type:'_test._tcp.',
|
241
|
+
port:9001
|
242
|
+
})
|
243
|
+
@service.start_advertising
|
244
|
+
@browser = Salut::Browser.new
|
245
|
+
NSRunLoop.currentRunLoop.runUntilDate Time.now + 2
|
145
246
|
end
|
146
247
|
|
147
|
-
# a fragile test since it depends on
|
148
|
-
# being called
|
248
|
+
# a fragile test since it depends on callbacks of callbacks being called
|
149
249
|
it 'should cause the resolve callback to be called' do
|
150
|
-
|
151
|
-
|
152
|
-
|
250
|
+
@browser.delegates[:'netServiceBrowser:didFindService:moreComing:'] = Proc.new {
|
251
|
+
|sender, service, more|
|
252
|
+
service.delegates[:'netServiceWillResolve:'] = Proc.new { |sender|
|
253
|
+
true.should.be.equal true
|
254
|
+
}
|
255
|
+
service.resolve
|
256
|
+
}
|
257
|
+
@browser.find_services '_test._tcp.', in_domain:''
|
258
|
+
NSRunLoop.currentRunLoop.runUntilDate (Time.now + 5)
|
153
259
|
end
|
154
260
|
|
155
261
|
it 'should allow me to override the timeout' do
|
262
|
+
@browser.delegates[:'netServiceBrowser:didFindService:moreComing:'] = Proc.new {
|
263
|
+
|sender, service, more|
|
264
|
+
service.delegates[:'netServiceWillResolve:'] = Proc.new { |sender|
|
265
|
+
true.should.be.equal true
|
266
|
+
}
|
267
|
+
service.resolve 2.0
|
268
|
+
}
|
269
|
+
@browser.find_services '_test._tcp.', in_domain:''
|
270
|
+
NSRunLoop.currentRunLoop.runUntilDate (Time.now + 5)
|
156
271
|
end
|
157
272
|
end
|
158
273
|
|
159
274
|
|
160
|
-
describe 'callback skeletons' do
|
275
|
+
# describe 'callback skeletons' do
|
161
276
|
|
162
|
-
|
163
|
-
|
164
|
-
|
277
|
+
# before do
|
278
|
+
# # set the logger to log INFO and log to a stringIO object
|
279
|
+
# end
|
165
280
|
|
166
281
|
|
167
|
-
|
168
|
-
|
169
|
-
|
282
|
+
# describe '#netServiceWillPublish' do
|
283
|
+
# it 'should call its proc if exists' do
|
284
|
+
# end
|
170
285
|
|
171
|
-
|
172
|
-
|
286
|
+
# it 'should not explode if the proc does not exist' do
|
287
|
+
# end
|
173
288
|
|
174
|
-
|
175
|
-
|
289
|
+
# it 'should log a message at the INFO level' do
|
290
|
+
# end
|
176
291
|
|
177
|
-
|
178
|
-
|
179
|
-
|
292
|
+
# it 'should pass self to the proc' do
|
293
|
+
# end
|
294
|
+
# end
|
180
295
|
|
181
296
|
|
182
|
-
|
183
|
-
|
184
|
-
|
297
|
+
# describe '#netService:didNotPublish:' do
|
298
|
+
# it 'should call its proc if exists' do
|
299
|
+
# end
|
185
300
|
|
186
|
-
|
187
|
-
|
301
|
+
# it 'should not explode if the proc does not exist' do
|
302
|
+
# end
|
188
303
|
|
189
|
-
|
190
|
-
|
304
|
+
# it 'should log a message at the INFO level' do
|
305
|
+
# end
|
191
306
|
|
192
|
-
|
193
|
-
|
307
|
+
# it 'should set @advertising to false' do
|
308
|
+
# end
|
194
309
|
|
195
|
-
|
196
|
-
|
310
|
+
# it 'should pass self to the proc' do
|
311
|
+
# end
|
197
312
|
|
198
|
-
|
199
|
-
|
200
|
-
|
313
|
+
# it 'should pass the error dict to the proc' do
|
314
|
+
# end
|
315
|
+
# end
|
201
316
|
|
202
317
|
|
203
|
-
|
204
|
-
|
205
|
-
|
318
|
+
# describe '#netServiceDidPublish' do
|
319
|
+
# it 'should call its proc if exists' do
|
320
|
+
# end
|
206
321
|
|
207
|
-
|
208
|
-
|
322
|
+
# it 'should not explode if the proc does not exist' do
|
323
|
+
# end
|
209
324
|
|
210
|
-
|
211
|
-
|
325
|
+
# it 'should log a message at the INFO level' do
|
326
|
+
# end
|
212
327
|
|
213
|
-
|
214
|
-
|
328
|
+
# it 'should set @advertising to true' do
|
329
|
+
# end
|
215
330
|
|
216
|
-
|
217
|
-
|
218
|
-
|
331
|
+
# it 'should pass self to the proc' do
|
332
|
+
# end
|
333
|
+
# end
|
219
334
|
|
220
335
|
|
221
|
-
|
222
|
-
|
223
|
-
|
336
|
+
# describe '#netServiceWillResolve' do
|
337
|
+
# it 'should call its proc if exists' do
|
338
|
+
# end
|
224
339
|
|
225
|
-
|
226
|
-
|
340
|
+
# it 'should not explode if the proc does not exist' do
|
341
|
+
# end
|
227
342
|
|
228
|
-
|
229
|
-
|
343
|
+
# it 'should log a message at the INFO level' do
|
344
|
+
# end
|
230
345
|
|
231
|
-
|
232
|
-
|
233
|
-
|
346
|
+
# it 'should pass self to the proc' do
|
347
|
+
# end
|
348
|
+
# end
|
234
349
|
|
235
350
|
|
236
|
-
|
237
|
-
|
238
|
-
|
351
|
+
# describe '#netService:didNotResolve:' do
|
352
|
+
# it 'should call its proc if exists' do
|
353
|
+
# end
|
239
354
|
|
240
|
-
|
241
|
-
|
355
|
+
# it 'should not explode if the proc does not exist' do
|
356
|
+
# end
|
242
357
|
|
243
|
-
|
244
|
-
|
358
|
+
# it 'should log a message at the INFO level' do
|
359
|
+
# end
|
245
360
|
|
246
|
-
|
247
|
-
|
361
|
+
# it 'should pass self to the proc' do
|
362
|
+
# end
|
248
363
|
|
249
|
-
|
250
|
-
|
251
|
-
|
364
|
+
# it 'should pass the error dict to the proc' do
|
365
|
+
# end
|
366
|
+
# end
|
252
367
|
|
253
368
|
|
254
|
-
|
255
|
-
|
256
|
-
|
369
|
+
# describe '#netServiceDidResolveAddress' do
|
370
|
+
# it 'should call its proc if exists' do
|
371
|
+
# end
|
257
372
|
|
258
|
-
|
259
|
-
|
373
|
+
# it 'should not explode if the proc does not exist' do
|
374
|
+
# end
|
260
375
|
|
261
|
-
|
262
|
-
|
376
|
+
# it 'should log a message at the INFO level' do
|
377
|
+
# end
|
263
378
|
|
264
|
-
|
265
|
-
|
266
|
-
|
379
|
+
# it 'should pass self to the proc' do
|
380
|
+
# end
|
381
|
+
# end
|
267
382
|
|
268
383
|
|
269
|
-
|
270
|
-
|
271
|
-
|
384
|
+
# describe '#netService:didUpdateTXTRecordData:' do
|
385
|
+
# it 'should call its proc if exists' do
|
386
|
+
# end
|
272
387
|
|
273
|
-
|
274
|
-
|
388
|
+
# it 'should not explode if the proc does not exist' do
|
389
|
+
# end
|
275
390
|
|
276
|
-
|
277
|
-
|
391
|
+
# it 'should log a message at the INFO level' do
|
392
|
+
# end
|
278
393
|
|
279
|
-
|
280
|
-
|
394
|
+
# it 'should pass self to the proc' do
|
395
|
+
# end
|
281
396
|
|
282
|
-
|
283
|
-
|
284
|
-
|
397
|
+
# it 'should pass the TXT record data to the proc' do
|
398
|
+
# end
|
399
|
+
# end
|
285
400
|
|
286
401
|
|
287
|
-
|
288
|
-
|
289
|
-
|
402
|
+
# describe '#netServiceDidStop' do
|
403
|
+
# it 'should call its proc if exists' do
|
404
|
+
# end
|
290
405
|
|
291
|
-
|
292
|
-
|
406
|
+
# it 'should not explode if the proc does not exist' do
|
407
|
+
# end
|
293
408
|
|
294
|
-
|
295
|
-
|
409
|
+
# it 'should log a message at the INFO level' do
|
410
|
+
# end
|
296
411
|
|
297
|
-
|
298
|
-
|
412
|
+
# it 'should set @advertising to false' do
|
413
|
+
# end
|
299
414
|
|
300
|
-
|
301
|
-
|
302
|
-
|
415
|
+
# it 'should pass self to the proc' do
|
416
|
+
# end
|
417
|
+
# end
|
303
418
|
|
304
|
-
end
|
419
|
+
# end
|
305
420
|
|
306
421
|
|
307
422
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
8
|
+
- 1
|
9
|
+
version: 0.3.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Mark Rada
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-21 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|