Salut 0.3.0 → 0.3.1
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/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
|