ionian 0.5.0 → 0.6.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.
@@ -24,16 +24,16 @@
24
24
  <body id="top" role="document" class="class">
25
25
  <nav role="navigation">
26
26
  <div id="project-navigation">
27
- <div id="home-section" role="banner" class="nav-section">
27
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
28
28
  <h2>
29
29
  <a href="../index.html" rel="home">Home</a>
30
30
  </h2>
31
31
 
32
- <h3>
32
+ <div id="table-of-contents-navigation">
33
33
  <a href="../table_of_contents.html#pages">Pages</a>
34
34
  <a href="../table_of_contents.html#classes">Classes</a>
35
35
  <a href="../table_of_contents.html#methods">Methods</a>
36
- </h3>
36
+ </div>
37
37
  </div>
38
38
 
39
39
  <div id="search-section" role="search" class="project-section initially-hidden">
@@ -41,14 +41,13 @@
41
41
  <div id="search-field-wrapper">
42
42
  <input id="search-field" role="combobox" aria-label="Search"
43
43
  aria-autocomplete="list" aria-controls="search-results"
44
- type="text" name="search" placeholder="Search"
44
+ type="text" name="search" placeholder="Search" spellcheck="false"
45
45
  title="Type to search, Up and Down to navigate, Enter to load">
46
46
  </div>
47
47
 
48
48
  <ul id="search-results" aria-label="Search Results"
49
49
  aria-busy="false" aria-expanded="false"
50
- aria-atomic="false" aria-live="polite"
51
- aria-relevant="all" class="initially-hidden"></ul>
50
+ aria-atomic="false" class="initially-hidden"></ul>
52
51
  </form>
53
52
  </div>
54
53
 
@@ -73,6 +72,14 @@
73
72
  <ul class="link-list">
74
73
 
75
74
 
75
+ <li><a class="extend" href="Extension/IO.html">Ionian::Extension::IO</a>
76
+
77
+
78
+
79
+ <li><a class="extend" href="Extension/Socket.html">Ionian::Extension::Socket</a>
80
+
81
+
82
+
76
83
  <li><a class="extend" href="Extension/Socket.html">Ionian::Extension::Socket</a>
77
84
 
78
85
 
@@ -105,12 +112,16 @@
105
112
 
106
113
  <li ><a href="#method-i-has_data-3F">#has_data?</a>
107
114
 
108
- <li ><a href="#method-i-persistent-3F">#persistent?</a>
115
+ <li ><a href="#method-i-on_match">#on_match</a>
109
116
 
110
- <li ><a href="#method-i-protocol-3F">#protocol?</a>
117
+ <li ><a href="#method-i-persistent-3F">#persistent?</a>
111
118
 
112
119
  <li ><a href="#method-i-puts">#puts</a>
113
120
 
121
+ <li ><a href="#method-i-register_observer">#register_observer</a>
122
+
123
+ <li ><a href="#method-i-unregister_observer">#unregister_observer</a>
124
+
114
125
  <li ><a href="#method-i-write">#write</a>
115
126
 
116
127
  </ul>
@@ -126,7 +137,7 @@
126
137
 
127
138
  <section class="description">
128
139
 
129
- <p>A convenient wrapper for TCP, UDP, and Unix sockets.</p>
140
+ <p>A convenient wrapper for TCP, UDP, and Unix client sockets.</p>
130
141
 
131
142
  </section>
132
143
 
@@ -141,6 +152,55 @@
141
152
 
142
153
 
143
154
 
155
+ <section class="attribute-method-details" class="method-section">
156
+ <header>
157
+ <h3>Attributes</h3>
158
+ </header>
159
+
160
+
161
+ <div id="attribute-i-expression" class="method-detail">
162
+ <div class="method-heading attribute-method-heading">
163
+ <span class="method-name">expression</span><span
164
+ class="attribute-access-type">[RW]</span>
165
+ </div>
166
+
167
+ <div class="method-description">
168
+
169
+
170
+
171
+ </div>
172
+ </div>
173
+
174
+ <div id="attribute-i-protocol" class="method-detail">
175
+ <div class="method-heading attribute-method-heading">
176
+ <span class="method-name">protocol</span><span
177
+ class="attribute-access-type">[R]</span>
178
+ </div>
179
+
180
+ <div class="method-description">
181
+
182
+ <p>Returns a symbol of the type of protocol this socket uses: :tcp, :udp,
183
+ :unix</p>
184
+
185
+ </div>
186
+ </div>
187
+
188
+ <div id="attribute-i-protocol-3F" class="method-detail">
189
+ <div class="method-heading attribute-method-heading">
190
+ <span class="method-name">protocol?</span><span
191
+ class="attribute-access-type">[R]</span>
192
+ </div>
193
+
194
+ <div class="method-description">
195
+
196
+ <p>Returns a symbol of the type of protocol this socket uses: :tcp, :udp,
197
+ :unix</p>
198
+
199
+ </div>
200
+ </div>
201
+
202
+ </section>
203
+
144
204
 
145
205
 
146
206
  <section id="public-class-5Buntitled-5D-method-details" class="method-section">
@@ -153,7 +213,7 @@
153
213
 
154
214
  <div class="method-heading">
155
215
  <span class="method-name">new</span><span
156
- class="method-args">(**kwargs)</span>
216
+ class="method-args">(existing_socket = nil, **kwargs)</span>
157
217
 
158
218
  <span class="method-click-advice">click to toggle source</span>
159
219
 
@@ -162,7 +222,9 @@
162
222
 
163
223
  <div class="method-description">
164
224
 
165
- <p>Args:</p>
225
+ <p>Creates a new socket or wraps an existing socket.</p>
226
+
227
+ <p>Args:</p>
166
228
 
167
229
  <pre>host: IP or hostname to connect to.
168
230
  port: Connection&#39;s port number. Default is 23. Unused by :unix protocol.
@@ -183,31 +245,65 @@ expression: Overrides the #read_match regular expression for received data.</pre
183
245
 
184
246
 
185
247
  <div class="method-source-code" id="new-source">
186
- <pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 23</span>
187
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-operator">**</span><span class="ruby-identifier">kwargs</span>)
188
- <span class="ruby-ivar">@socket</span> = <span class="ruby-keyword">nil</span>
248
+ <pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 26</span>
249
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">existing_socket</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-operator">**</span><span class="ruby-identifier">kwargs</span>)
250
+ <span class="ruby-ivar">@socket</span> = <span class="ruby-identifier">existing_socket</span>
189
251
 
190
- <span class="ruby-comment"># TODO: Should be able to parse the port out of host.</span>
191
- <span class="ruby-comment"># :port should override this parsed value.</span>
252
+ <span class="ruby-ivar">@ionian_listeners</span> = []
192
253
 
193
- <span class="ruby-ivar">@host</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:host</span>
194
- <span class="ruby-ivar">@port</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:port</span>, <span class="ruby-value">23</span>
195
- <span class="ruby-ivar">@bind_port</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:bind_port</span>, <span class="ruby-ivar">@port</span>
254
+ <span class="ruby-ivar">@expression</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:expression</span>, <span class="ruby-keyword">nil</span>
196
255
 
197
- <span class="ruby-comment"># Automatically select UDP for the multicast range. Otherwise default to TCP.</span>
198
- <span class="ruby-identifier">default_protocol</span> = <span class="ruby-value">:tcp</span>
199
- <span class="ruby-identifier">default_protocol</span> = <span class="ruby-value">:udp</span> <span class="ruby-keyword">if</span> <span class="ruby-constant">Ionian</span><span class="ruby-operator">::</span><span class="ruby-constant">Extension</span><span class="ruby-operator">::</span><span class="ruby-constant">Socket</span>.<span class="ruby-identifier">multicast?</span> <span class="ruby-ivar">@host</span>
200
- <span class="ruby-identifier">default_protocol</span> = <span class="ruby-value">:unix</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@host</span>.<span class="ruby-identifier">start_with?</span> <span class="ruby-string">&#39;/&#39;</span>
256
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">existing_socket</span>
257
+ <span class="ruby-comment"># Convert existing socket.</span>
258
+ <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">extend</span> <span class="ruby-constant">Ionian</span><span class="ruby-operator">::</span><span class="ruby-constant">Extension</span><span class="ruby-operator">::</span><span class="ruby-constant">IO</span>
259
+ <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">extend</span> <span class="ruby-constant">Ionian</span><span class="ruby-operator">::</span><span class="ruby-constant">Extension</span><span class="ruby-operator">::</span><span class="ruby-constant">Socket</span>
260
+
261
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">existing_socket</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">UNIXSocket</span>
262
+ <span class="ruby-ivar">@host</span> = <span class="ruby-identifier">existing_socket</span>.<span class="ruby-identifier">path</span>
263
+ <span class="ruby-ivar">@port</span> = <span class="ruby-keyword">nil</span>
264
+ <span class="ruby-keyword">else</span>
265
+ <span class="ruby-ivar">@host</span> = <span class="ruby-identifier">existing_socket</span>.<span class="ruby-identifier">remote_address</span>.<span class="ruby-identifier">ip_address</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">existing_socket</span>
266
+ <span class="ruby-ivar">@port</span> = <span class="ruby-identifier">existing_socket</span>.<span class="ruby-identifier">remote_address</span>.<span class="ruby-identifier">ip_port</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">existing_socket</span>
267
+ <span class="ruby-keyword">end</span>
201
268
 
202
- <span class="ruby-ivar">@protocol</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:protocol</span>, <span class="ruby-identifier">default_protocol</span>
203
- <span class="ruby-ivar">@persistent</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:persistent</span>, <span class="ruby-keyword">true</span>
204
- <span class="ruby-ivar">@expression</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:expression</span>, <span class="ruby-keyword">nil</span>
269
+ <span class="ruby-keyword">if</span> <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">TCPSocket</span>
270
+ <span class="ruby-ivar">@protocol</span> = <span class="ruby-value">:tcp</span>
271
+ <span class="ruby-keyword">elsif</span> <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">UDPSocket</span>
272
+ <span class="ruby-ivar">@protocol</span> = <span class="ruby-value">:udp</span>
273
+ <span class="ruby-keyword">elsif</span> <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">UNIXSocket</span>
274
+ <span class="ruby-ivar">@protocol</span> = <span class="ruby-value">:unix</span>
275
+ <span class="ruby-keyword">end</span>
276
+
277
+ <span class="ruby-ivar">@persistent</span> = <span class="ruby-keyword">true</span> <span class="ruby-comment"># Existing sockets are always persistent.</span>
278
+
279
+ <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">expression</span> = <span class="ruby-ivar">@expression</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@expression</span>
280
+
281
+ <span class="ruby-identifier">initialize_socket_methods</span>
282
+ <span class="ruby-keyword">else</span>
283
+ <span class="ruby-comment"># Initialize new socket.</span>
284
+
285
+ <span class="ruby-comment"># TODO: Should be able to parse the port out of host.</span>
286
+ <span class="ruby-comment"># :port should override this parsed value.</span>
287
+
288
+ <span class="ruby-ivar">@host</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:host</span>
289
+ <span class="ruby-ivar">@port</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:port</span>, <span class="ruby-value">23</span>
290
+ <span class="ruby-ivar">@bind_port</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:bind_port</span>, <span class="ruby-ivar">@port</span>
205
291
 
206
- <span class="ruby-ivar">@reuse_addr</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:reuse_addr</span>, <span class="ruby-keyword">false</span>
207
- <span class="ruby-ivar">@no_delay</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:no_delay</span>, <span class="ruby-keyword">false</span>
208
- <span class="ruby-ivar">@cork</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:cork</span>, <span class="ruby-keyword">false</span>
292
+ <span class="ruby-comment"># Automatically select UDP for the multicast range. Otherwise default to TCP.</span>
293
+ <span class="ruby-identifier">default_protocol</span> = <span class="ruby-value">:tcp</span>
294
+ <span class="ruby-identifier">default_protocol</span> = <span class="ruby-value">:udp</span> <span class="ruby-keyword">if</span> <span class="ruby-constant">Ionian</span><span class="ruby-operator">::</span><span class="ruby-constant">Extension</span><span class="ruby-operator">::</span><span class="ruby-constant">Socket</span>.<span class="ruby-identifier">multicast?</span> <span class="ruby-ivar">@host</span>
295
+ <span class="ruby-identifier">default_protocol</span> = <span class="ruby-value">:unix</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@host</span>.<span class="ruby-identifier">start_with?</span> <span class="ruby-string">&#39;/&#39;</span>
296
+
297
+ <span class="ruby-ivar">@protocol</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:protocol</span>, <span class="ruby-identifier">default_protocol</span>
298
+ <span class="ruby-ivar">@persistent</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:persistent</span>, <span class="ruby-keyword">true</span>
299
+
300
+ <span class="ruby-ivar">@reuse_addr</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:reuse_addr</span>, <span class="ruby-keyword">false</span>
301
+ <span class="ruby-ivar">@no_delay</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:no_delay</span>, <span class="ruby-keyword">false</span>
302
+ <span class="ruby-ivar">@cork</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:cork</span>, <span class="ruby-keyword">false</span>
209
303
 
210
- <span class="ruby-identifier">create_socket</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@persistent</span>
304
+
305
+ <span class="ruby-identifier">create_socket</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@persistent</span>
306
+ <span class="ruby-keyword">end</span>
211
307
  <span class="ruby-keyword">end</span></pre>
212
308
  </div>
213
309
 
@@ -274,7 +370,7 @@ expression: Overrides the #read_match regular expression for received data.</pre
274
370
 
275
371
 
276
372
  <div class="method-source-code" id="closed-3F-source">
277
- <pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 94</span>
373
+ <pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 148</span>
278
374
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">closed?</span>
279
375
  <span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@socket</span>
280
376
  <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">closed?</span>
@@ -310,7 +406,7 @@ href="Extension/IO.html#method-i-read_match">Ionian::Extension::IO#read_match</a
310
406
 
311
407
 
312
408
  <div class="method-source-code" id="cmd-source">
313
- <pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 64</span>
409
+ <pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 100</span>
314
410
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">cmd</span>(<span class="ruby-identifier">string</span>, <span class="ruby-operator">**</span><span class="ruby-identifier">kwargs</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
315
411
  <span class="ruby-identifier">create_socket</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@persistent</span>
316
412
 
@@ -357,7 +453,7 @@ non-persistent sockets.</p>
357
453
 
358
454
 
359
455
  <div class="method-source-code" id="flush-source">
360
- <pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 101</span>
456
+ <pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 155</span>
361
457
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">flush</span>
362
458
  <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">flush</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@persistent</span>
363
459
  <span class="ruby-keyword">end</span></pre>
@@ -393,7 +489,7 @@ non-persistent sockets.</p>
393
489
 
394
490
 
395
491
  <div class="method-source-code" id="has_data-3F-source">
396
- <pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 88</span>
492
+ <pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 142</span>
397
493
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">has_data?</span>(<span class="ruby-operator">**</span><span class="ruby-identifier">kwargs</span>)
398
494
  <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@socket</span>
399
495
  <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">has_data?</span> <span class="ruby-identifier">kwargs</span>
@@ -408,6 +504,34 @@ non-persistent sockets.</p>
408
504
  </div>
409
505
 
410
506
 
507
+ <div id="method-i-on_match" class="method-detail method-alias">
508
+
509
+ <div class="method-heading">
510
+ <span class="method-name">on_match</span><span
511
+ class="method-args">(&block)</span>
512
+
513
+ </div>
514
+
515
+
516
+ <div class="method-description">
517
+
518
+
519
+
520
+
521
+
522
+
523
+ </div>
524
+
525
+
526
+
527
+
528
+ <div class="aliases">
529
+ Alias for: <a href="Socket.html#method-i-register_observer">register_observer</a>
530
+ </div>
531
+
532
+ </div>
533
+
534
+
411
535
  <div id="method-i-persistent-3F" class="method-detail ">
412
536
 
413
537
  <div class="method-heading">
@@ -427,7 +551,7 @@ non-persistent sockets.</p>
427
551
 
428
552
 
429
553
  <div class="method-source-code" id="persistent-3F-source">
430
- <pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 56</span>
554
+ <pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 92</span>
431
555
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">persistent?</span>
432
556
  <span class="ruby-ivar">@persistent</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">false</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@persistent</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span> <span class="ruby-operator">?</span> <span class="ruby-keyword">false</span> <span class="ruby-operator">:</span> <span class="ruby-keyword">true</span>
433
557
  <span class="ruby-keyword">end</span></pre>
@@ -441,11 +565,11 @@ non-persistent sockets.</p>
441
565
  </div>
442
566
 
443
567
 
444
- <div id="method-i-protocol-3F" class="method-detail ">
568
+ <div id="method-i-puts" class="method-detail ">
445
569
 
446
570
  <div class="method-heading">
447
- <span class="method-name">protocol?</span><span
448
- class="method-args">()</span>
571
+ <span class="method-name">puts</span><span
572
+ class="method-args">(*string)</span>
449
573
 
450
574
  <span class="method-click-advice">click to toggle source</span>
451
575
 
@@ -454,16 +578,16 @@ non-persistent sockets.</p>
454
578
 
455
579
  <div class="method-description">
456
580
 
457
- <p>Returns a symbol of the type of protocol this socket uses: :tcp, :udp,
458
- :unix</p>
581
+ <p>Writes the given string(s) to the socket and appends a newline character to
582
+ any string not already ending with one.</p>
459
583
 
460
584
 
461
585
 
462
586
 
463
- <div class="method-source-code" id="protocol-3F-source">
464
- <pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 51</span>
465
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">protocol?</span>
466
- <span class="ruby-ivar">@protocol</span>
587
+ <div class="method-source-code" id="puts-source">
588
+ <pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 161</span>
589
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">puts</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">string</span>)
590
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">string</span>.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">chomp</span>}.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;\n&quot;</span>) <span class="ruby-operator">+</span> <span class="ruby-string">&quot;\n&quot;</span>
467
591
  <span class="ruby-keyword">end</span></pre>
468
592
  </div>
469
593
 
@@ -475,11 +599,11 @@ non-persistent sockets.</p>
475
599
  </div>
476
600
 
477
601
 
478
- <div id="method-i-puts" class="method-detail ">
602
+ <div id="method-i-register_observer" class="method-detail ">
479
603
 
480
604
  <div class="method-heading">
481
- <span class="method-name">puts</span><span
482
- class="method-args">(*string)</span>
605
+ <span class="method-name">register_observer</span><span
606
+ class="method-args">(&block)</span>
483
607
 
484
608
  <span class="method-click-advice">click to toggle source</span>
485
609
 
@@ -488,16 +612,58 @@ non-persistent sockets.</p>
488
612
 
489
613
  <div class="method-description">
490
614
 
491
- <p>Writes the given string(s) to the socket and appends a newline character to
492
- any string not already ending with one.</p>
615
+ <p>Register a block to be called when run_match receives matched data. Method
616
+ callbacks can be registered with &amp;object.method(:method). Returns a
617
+ reference to the given block. block = ionian_socket.register_observer {…}</p>
493
618
 
494
619
 
495
620
 
496
621
 
497
- <div class="method-source-code" id="puts-source">
498
- <pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 107</span>
499
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">puts</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">string</span>)
500
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">string</span>.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">chomp</span>}.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;\n&quot;</span>) <span class="ruby-operator">+</span> <span class="ruby-string">&quot;\n&quot;</span>
622
+ <div class="method-source-code" id="register_observer-source">
623
+ <pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 121</span>
624
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">register_observer</span> <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>
625
+ <span class="ruby-ivar">@ionian_listeners</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">block</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@ionian_listeners</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">block</span>
626
+ <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">register_observer</span> <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@socket</span>
627
+ <span class="ruby-identifier">block</span>
628
+ <span class="ruby-keyword">end</span></pre>
629
+ </div>
630
+
631
+ </div>
632
+
633
+
634
+ <div class="aliases">
635
+ Also aliased as: <a href="Socket.html#method-i-on_match">on_match</a>
636
+ </div>
637
+
638
+
639
+
640
+ </div>
641
+
642
+
643
+ <div id="method-i-unregister_observer" class="method-detail ">
644
+
645
+ <div class="method-heading">
646
+ <span class="method-name">unregister_observer</span><span
647
+ class="method-args">(&block)</span>
648
+
649
+ <span class="method-click-advice">click to toggle source</span>
650
+
651
+ </div>
652
+
653
+
654
+ <div class="method-description">
655
+
656
+ <p>Unregister a block from being called when matched data is received.</p>
657
+
658
+
659
+
660
+
661
+ <div class="method-source-code" id="unregister_observer-source">
662
+ <pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 130</span>
663
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">unregister_observer</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
664
+ <span class="ruby-ivar">@ionian_listeners</span>.<span class="ruby-identifier">delete_if</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">o</span><span class="ruby-operator">|</span> <span class="ruby-identifier">o</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">block</span>}
665
+ <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">unregister_observer</span> <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@socket</span>
666
+ <span class="ruby-identifier">block</span>
501
667
  <span class="ruby-keyword">end</span></pre>
502
668
  </div>
503
669
 
@@ -528,7 +694,7 @@ any string not already ending with one.</p>
528
694
 
529
695
 
530
696
  <div class="method-source-code" id="write-source">
531
- <pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 113</span>
697
+ <pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 167</span>
532
698
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">write</span>(<span class="ruby-identifier">string</span>)
533
699
  <span class="ruby-identifier">create_socket</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@persistent</span>
534
700
 
@@ -572,7 +738,7 @@ any string not already ending with one.</p>
572
738
 
573
739
  <footer id="validator-badges" role="contentinfo">
574
740
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
575
- <p>Generated by <a href="http://rdoc.rubyforge.org">RDoc</a> 4.1.0.preview.1.
741
+ <p>Generated by <a href="http://rdoc.rubyforge.org">RDoc</a> 4.1.0.
576
742
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
577
743
  </footer>
578
744
 
data/doc/Ionian.html CHANGED
@@ -24,16 +24,16 @@
24
24
  <body id="top" role="document" class="module">
25
25
  <nav role="navigation">
26
26
  <div id="project-navigation">
27
- <div id="home-section" role="banner" class="nav-section">
27
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
28
28
  <h2>
29
29
  <a href="./index.html" rel="home">Home</a>
30
30
  </h2>
31
31
 
32
- <h3>
32
+ <div id="table-of-contents-navigation">
33
33
  <a href="./table_of_contents.html#pages">Pages</a>
34
34
  <a href="./table_of_contents.html#classes">Classes</a>
35
35
  <a href="./table_of_contents.html#methods">Methods</a>
36
- </h3>
36
+ </div>
37
37
  </div>
38
38
 
39
39
  <div id="search-section" role="search" class="project-section initially-hidden">
@@ -41,14 +41,13 @@
41
41
  <div id="search-field-wrapper">
42
42
  <input id="search-field" role="combobox" aria-label="Search"
43
43
  aria-autocomplete="list" aria-controls="search-results"
44
- type="text" name="search" placeholder="Search"
44
+ type="text" name="search" placeholder="Search" spellcheck="false"
45
45
  title="Type to search, Up and Down to navigate, Enter to load">
46
46
  </div>
47
47
 
48
48
  <ul id="search-results" aria-label="Search Results"
49
49
  aria-busy="false" aria-expanded="false"
50
- aria-atomic="false" aria-live="polite"
51
- aria-relevant="all" class="initially-hidden"></ul>
50
+ aria-atomic="false" class="initially-hidden"></ul>
52
51
  </form>
53
52
  </div>
54
53
 
@@ -97,7 +96,7 @@ Features regular expression matching and notification of received data.</p>
97
96
 
98
97
  <footer id="validator-badges" role="contentinfo">
99
98
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
100
- <p>Generated by <a href="http://rdoc.rubyforge.org">RDoc</a> 4.1.0.preview.1.
99
+ <p>Generated by <a href="http://rdoc.rubyforge.org">RDoc</a> 4.1.0.
101
100
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
102
101
  </footer>
103
102
 
data/doc/created.rid CHANGED
@@ -1,5 +1,6 @@
1
- Mon, 09 Dec 2013 18:32:49 -0800
2
- lib/ionian.rb Tue, 03 Dec 2013 19:30:50 -0800
3
- lib/ionian/extension/io.rb Wed, 04 Dec 2013 19:25:58 -0800
1
+ Wed, 22 Jan 2014 18:32:41 -0800
2
+ lib/ionian.rb Sun, 19 Jan 2014 22:25:27 -0800
3
+ lib/ionian/extension/io.rb Thu, 16 Jan 2014 19:10:20 -0800
4
4
  lib/ionian/extension/socket.rb Sat, 07 Dec 2013 14:02:46 -0800
5
- lib/ionian/socket.rb Sat, 07 Dec 2013 15:13:22 -0800
5
+ lib/ionian/server.rb Wed, 22 Jan 2014 18:31:59 -0800
6
+ lib/ionian/socket.rb Wed, 22 Jan 2014 18:14:29 -0800
data/doc/index.html CHANGED
@@ -24,16 +24,16 @@
24
24
  <body id="top" role="document" class="file">
25
25
  <nav role="navigation">
26
26
  <div id="project-navigation">
27
- <div id="home-section" role="banner" class="nav-section">
27
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
28
28
  <h2>
29
29
  <a href="./index.html" rel="home">Home</a>
30
30
  </h2>
31
31
 
32
- <h3>
32
+ <div id="table-of-contents-navigation">
33
33
  <a href="./table_of_contents.html#pages">Pages</a>
34
34
  <a href="./table_of_contents.html#classes">Classes</a>
35
35
  <a href="./table_of_contents.html#methods">Methods</a>
36
- </h3>
36
+ </div>
37
37
  </div>
38
38
 
39
39
 
@@ -42,14 +42,13 @@
42
42
  <div id="search-field-wrapper">
43
43
  <input id="search-field" role="combobox" aria-label="Search"
44
44
  aria-autocomplete="list" aria-controls="search-results"
45
- type="text" name="search" placeholder="Search"
45
+ type="text" name="search" placeholder="Search" spellcheck="false"
46
46
  title="Type to search, Up and Down to navigate, Enter to load">
47
47
  </div>
48
48
 
49
49
  <ul id="search-results" aria-label="Search Results"
50
50
  aria-busy="false" aria-expanded="false"
51
- aria-atomic="false" aria-live="polite"
52
- aria-relevant="all" class="initially-hidden"></ul>
51
+ aria-atomic="false" class="initially-hidden"></ul>
53
52
  </form>
54
53
  </div>
55
54
 
@@ -70,6 +69,8 @@
70
69
 
71
70
  <li><a href="./Ionian/Extension/Socket.html">Ionian::Extension::Socket</a>
72
71
 
72
+ <li><a href="./Ionian/Server.html">Ionian::Server</a>
73
+
73
74
  <li><a href="./Ionian/Socket.html">Ionian::Socket</a>
74
75
 
75
76
  </ul>
@@ -86,7 +87,7 @@
86
87
 
87
88
  <footer id="validator-badges" role="contentinfo">
88
89
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
89
- <p>Generated by <a href="http://rdoc.rubyforge.org">RDoc</a> 4.1.0.preview.1.
90
+ <p>Generated by <a href="http://rdoc.rubyforge.org">RDoc</a> 4.1.0.
90
91
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
91
92
  </footer>
92
93
 
data/doc/js/search.js CHANGED
@@ -14,7 +14,12 @@ Search.prototype = $.extend({}, Navigation, new function() {
14
14
 
15
15
  this.init = function() {
16
16
  var _this = this;
17
- var observer = function() {
17
+ var observer = function(e) {
18
+ switch(e.originalEvent.keyCode) {
19
+ case 38: // Event.KEY_UP
20
+ case 40: // Event.KEY_DOWN
21
+ return;
22
+ }
18
23
  _this.search(_this.$input[0].value);
19
24
  };
20
25
  this.$input.keyup(observer);
@@ -82,6 +87,8 @@ Search.prototype = $.extend({}, Navigation, new function() {
82
87
  this.$input.attr('aria-activedescendant', $next.attr('id'));
83
88
  this.scrollIntoView($next[0], this.$view[0]);
84
89
  this.$current = $next;
90
+ this.$input.val($next[0].firstChild.firstChild.text);
91
+ this.$input.select();
85
92
  }
86
93
  return true;
87
94
  }