ionian 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/doc/Ionian/Extension/IO.html +10 -10
- data/doc/Ionian/Extension/Socket.html +6 -4
- data/doc/Ionian/Extension.html +2 -0
- data/doc/Ionian/Socket.html +50 -32
- data/doc/created.rid +5 -5
- data/doc/js/search_index.js +1 -1
- data/lib/ionian/extension/io.rb +8 -8
- data/lib/ionian/extension/socket.rb +2 -0
- data/lib/ionian/socket.rb +40 -23
- data/lib/ionian.rb +6 -1
- metadata +16 -3
- data/doc/Ionian/IO.html +0 -598
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ed4a0765c97eff06e5318477989af9dcc436cfb
|
4
|
+
data.tar.gz: c5a76f349eb8ed7e1ecc4f62ac1133fff87a494b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3fa5c34137d8718f792bf26fabcea6ca786c325136291cce5aecb6350a711849615f39fb1cb81d5463b4334248b47f3c58ccf597707a81d8792319aed3f195ef
|
7
|
+
data.tar.gz: 7d3a636e3260627fa07f90f61c6a7dfc855dff2a57325c5932eea2ac17a0d824ba8c5da399e566c841b361ee13977af16a9f7aa20c8c6cd58c205b5df5a8d3b8
|
@@ -412,7 +412,7 @@ automatically.</p>
|
|
412
412
|
|
413
413
|
<div class="method-heading">
|
414
414
|
<span class="method-name">read_match</span><span
|
415
|
-
class="method-args">(**
|
415
|
+
class="method-args">(**kwargs) { |$~| ... }</span>
|
416
416
|
|
417
417
|
<span class="method-click-advice">click to toggle source</span>
|
418
418
|
|
@@ -438,7 +438,7 @@ last match with match.post_match. This data remains in the buffer for the
|
|
438
438
|
next <a href="IO.html#method-i-read_match">read_match</a> cycle. This is
|
439
439
|
helpful for protocols like RS232 that do not have packet boundries.</p>
|
440
440
|
|
441
|
-
<p>
|
441
|
+
<p>kwargs:</p>
|
442
442
|
|
443
443
|
<pre>timeout: Timeout in seconds IO::select will block.
|
444
444
|
skip_select: Skip over the IO::select statement. Use if you
|
@@ -451,10 +451,10 @@ build_methods: Build method accessors from named captures.
|
|
451
451
|
|
452
452
|
<div class="method-source-code" id="read_match-source">
|
453
453
|
<pre><span class="ruby-comment"># File lib/ionian/extension/io.rb, line 77</span>
|
454
|
-
<span class="ruby-keyword">def</span> <span class="ruby-identifier">read_match</span>(<span class="ruby-operator">**</span><span class="ruby-identifier">
|
455
|
-
<span class="ruby-identifier">timeout</span> = <span class="ruby-identifier">
|
456
|
-
<span class="ruby-identifier">skip_select</span> = <span class="ruby-identifier">
|
457
|
-
<span class="ruby-identifier">build_methods</span> = <span class="ruby-identifier">
|
454
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">read_match</span>(<span class="ruby-operator">**</span><span class="ruby-identifier">kwargs</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
|
455
|
+
<span class="ruby-identifier">timeout</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:timeout</span>, <span class="ruby-ivar">@ionian_timeout</span>
|
456
|
+
<span class="ruby-identifier">skip_select</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:skip_select</span>, <span class="ruby-ivar">@ionian_skip_select</span>
|
457
|
+
<span class="ruby-identifier">build_methods</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:build_methods</span>, <span class="ruby-ivar">@ionian_build_methods</span>
|
458
458
|
|
459
459
|
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">skip_select</span>
|
460
460
|
<span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-operator">::</span><span class="ruby-constant">IO</span>.<span class="ruby-identifier">select</span> [<span class="ruby-keyword">self</span>], <span class="ruby-keyword">nil</span>, <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">timeout</span>
|
@@ -543,7 +543,7 @@ ionian_socket.register_observer {…}</p>
|
|
543
543
|
|
544
544
|
<div class="method-heading">
|
545
545
|
<span class="method-name">run_match</span><span
|
546
|
-
class="method-args">(**
|
546
|
+
class="method-args">(**kwargs)</span>
|
547
547
|
|
548
548
|
<span class="method-click-advice">click to toggle source</span>
|
549
549
|
|
@@ -553,7 +553,7 @@ ionian_socket.register_observer {…}</p>
|
|
553
553
|
<div class="method-description">
|
554
554
|
|
555
555
|
<p>Start a thread that checks for data and notifies listeners (do |match,
|
556
|
-
socket|). Passes
|
556
|
+
socket|). Passes kwargs to <a
|
557
557
|
href="IO.html#method-i-read_match">read_match</a>. This method SHOULD NOT
|
558
558
|
be used if <a href="IO.html#method-i-read_match">read_match</a> is used.</p>
|
559
559
|
|
@@ -562,11 +562,11 @@ be used if <a href="IO.html#method-i-read_match">read_match</a> is used.</p>
|
|
562
562
|
|
563
563
|
<div class="method-source-code" id="run_match-source">
|
564
564
|
<pre><span class="ruby-comment"># File lib/ionian/extension/io.rb, line 118</span>
|
565
|
-
<span class="ruby-keyword">def</span> <span class="ruby-identifier">run_match</span>(<span class="ruby-operator">**</span><span class="ruby-identifier">
|
565
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">run_match</span>(<span class="ruby-operator">**</span><span class="ruby-identifier">kwargs</span>)
|
566
566
|
<span class="ruby-ivar">@match_listener</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword">do</span>
|
567
567
|
<span class="ruby-keyword">begin</span>
|
568
568
|
<span class="ruby-keyword">while</span> <span class="ruby-keyword">not</span> <span class="ruby-identifier">closed?</span> <span class="ruby-keyword">do</span>
|
569
|
-
<span class="ruby-identifier">matches</span> = <span class="ruby-identifier">read_match</span> <span class="ruby-identifier">
|
569
|
+
<span class="ruby-identifier">matches</span> = <span class="ruby-identifier">read_match</span> <span class="ruby-identifier">kwargs</span>
|
570
570
|
<span class="ruby-identifier">matches</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">match</span><span class="ruby-operator">|</span>
|
571
571
|
<span class="ruby-ivar">@ionian_listeners</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">listener</span><span class="ruby-operator">|</span> <span class="ruby-identifier">listener</span>.<span class="ruby-identifier">call</span> <span class="ruby-identifier">match</span>, <span class="ruby-keyword">self</span>}
|
572
572
|
} <span class="ruby-keyword">if</span> <span class="ruby-identifier">matches</span>
|
@@ -183,13 +183,15 @@ my_socket.extend <a href="../Socket.html">Ionian::Socket</a></p>
|
|
183
183
|
|
184
184
|
<div class="method-description">
|
185
185
|
|
186
|
-
|
186
|
+
<p>Initialize the <a href="../../Ionian.html">Ionian</a> <a
|
187
|
+
href="Socket.html">Socket</a> variables. This is called automatically if
|
188
|
+
extend is called on an object.</p>
|
187
189
|
|
188
190
|
|
189
191
|
|
190
192
|
|
191
193
|
<div class="method-source-code" id="initialize_ionian_socket-source">
|
192
|
-
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line
|
194
|
+
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line 23</span>
|
193
195
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize_ionian_socket</span>
|
194
196
|
<span class="ruby-keyword">end</span></pre>
|
195
197
|
</div>
|
@@ -222,7 +224,7 @@ false.</p>
|
|
222
224
|
|
223
225
|
|
224
226
|
<div class="method-source-code" id="no_delay-source">
|
225
|
-
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line
|
227
|
+
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line 28</span>
|
226
228
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">no_delay</span>
|
227
229
|
<span class="ruby-identifier">nagle_disabled</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">getsockopt</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Socket</span><span class="ruby-operator">::</span><span class="ruby-constant">IPPROTO_TCP</span>, <span class="ruby-operator">::</span><span class="ruby-constant">Socket</span><span class="ruby-operator">::</span><span class="ruby-constant">TCP_NODELAY</span>).<span class="ruby-identifier">data</span>.<span class="ruby-identifier">ord</span>
|
228
230
|
<span class="ruby-identifier">nagle_disabled</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span> <span class="ruby-operator">?</span> <span class="ruby-keyword">true</span> <span class="ruby-operator">:</span> <span class="ruby-keyword">false</span>
|
@@ -257,7 +259,7 @@ false disables the flag (enables Nagle).</p>
|
|
257
259
|
|
258
260
|
|
259
261
|
<div class="method-source-code" id="no_delay-3D-source">
|
260
|
-
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line
|
262
|
+
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line 35</span>
|
261
263
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">no_delay=</span>(<span class="ruby-identifier">value</span>)
|
262
264
|
<span class="ruby-identifier">disable_nagle</span> = <span class="ruby-identifier">value</span> <span class="ruby-operator">?</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-value">0</span>
|
263
265
|
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">setsockopt</span> <span class="ruby-operator">::</span><span class="ruby-constant">Socket</span><span class="ruby-operator">::</span><span class="ruby-constant">IPPROTO_TCP</span>, <span class="ruby-operator">::</span><span class="ruby-constant">Socket</span><span class="ruby-operator">::</span><span class="ruby-constant">TCP_NODELAY</span>, <span class="ruby-identifier">disable_nagle</span>
|
data/doc/Ionian/Extension.html
CHANGED
data/doc/Ionian/Socket.html
CHANGED
@@ -118,6 +118,8 @@
|
|
118
118
|
|
119
119
|
<section class="description">
|
120
120
|
|
121
|
+
<p>A convenient wrapper for TCP, UDP, and Unix sockets.</p>
|
122
|
+
|
121
123
|
</section>
|
122
124
|
|
123
125
|
|
@@ -143,7 +145,7 @@
|
|
143
145
|
|
144
146
|
<div class="method-heading">
|
145
147
|
<span class="method-name">new</span><span
|
146
|
-
class="method-args">(**
|
148
|
+
class="method-args">(**kwargs)</span>
|
147
149
|
|
148
150
|
<span class="method-click-advice">click to toggle source</span>
|
149
151
|
|
@@ -152,26 +154,29 @@
|
|
152
154
|
|
153
155
|
<div class="method-description">
|
154
156
|
|
155
|
-
<p>
|
157
|
+
<p>Args:</p>
|
156
158
|
|
157
|
-
<
|
158
|
-
|
159
|
-
|
160
|
-
|
159
|
+
<pre>host: IP or hostname to connect to.
|
160
|
+
port: Connection's port number. Default is 23. Unused by :unix protocol.
|
161
|
+
protocol: Type of socket to create. :tcp, :udp, :unix. Default is :tcp.
|
162
|
+
persistent: The socket remains open after data is sent if this is true.
|
163
|
+
The socket closes after data is sent and a packet is received
|
164
|
+
if this is false. Default is true.
|
165
|
+
expression: Overrides the #read_match regular expression for received data.</pre>
|
161
166
|
|
162
167
|
|
163
168
|
|
164
169
|
|
165
170
|
<div class="method-source-code" id="new-source">
|
166
|
-
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line
|
167
|
-
<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-operator">**</span><span class="ruby-identifier">
|
171
|
+
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 16</span>
|
172
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-operator">**</span><span class="ruby-identifier">kwargs</span>)
|
168
173
|
<span class="ruby-ivar">@socket</span> = <span class="ruby-keyword">nil</span>
|
169
174
|
|
170
|
-
<span class="ruby-ivar">@host</span> = <span class="ruby-identifier">
|
171
|
-
<span class="ruby-ivar">@port</span> = <span class="ruby-identifier">
|
172
|
-
<span class="ruby-ivar">@
|
173
|
-
<span class="ruby-ivar">@
|
174
|
-
<span class="ruby-ivar">@
|
175
|
+
<span class="ruby-ivar">@host</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:host</span>
|
176
|
+
<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>
|
177
|
+
<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-value">:tcp</span>
|
178
|
+
<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>
|
179
|
+
<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>
|
175
180
|
|
176
181
|
<span class="ruby-identifier">create_socket</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@persistent</span>
|
177
182
|
<span class="ruby-keyword">end</span></pre>
|
@@ -240,7 +245,7 @@ closed as well?</p>
|
|
240
245
|
|
241
246
|
|
242
247
|
<div class="method-source-code" id="closed-3F-source">
|
243
|
-
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line
|
248
|
+
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 73</span>
|
244
249
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">closed?</span>
|
245
250
|
<span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@socket</span>
|
246
251
|
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">closed?</span>
|
@@ -259,7 +264,7 @@ closed as well?</p>
|
|
259
264
|
|
260
265
|
<div class="method-heading">
|
261
266
|
<span class="method-name">cmd</span><span
|
262
|
-
class="method-args">(string, **
|
267
|
+
class="method-args">(string, **kwargs) { |match| ... }</span>
|
263
268
|
|
264
269
|
<span class="method-click-advice">click to toggle source</span>
|
265
270
|
|
@@ -268,21 +273,27 @@ closed as well?</p>
|
|
268
273
|
|
269
274
|
<div class="method-description">
|
270
275
|
|
271
|
-
<p>Send a command (data) to the socket. Returns received matches.
|
272
|
-
received match. See <a
|
273
|
-
href="Extension/IO.html#method-i-read_match">Ionian::Extension::IO#read_match</a
|
276
|
+
<p>Send a command (data) to the socket. Returns an array of received matches.
|
277
|
+
Block yields received match. See <a
|
278
|
+
href="Extension/IO.html#method-i-read_match">Ionian::Extension::IO#read_match</a>.</p>
|
274
279
|
|
275
280
|
|
276
281
|
|
277
282
|
|
278
283
|
<div class="method-source-code" id="cmd-source">
|
279
|
-
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line
|
280
|
-
<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">
|
284
|
+
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 43</span>
|
285
|
+
<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">&</span><span class="ruby-identifier">block</span>)
|
281
286
|
<span class="ruby-identifier">create_socket</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@persistent</span>
|
282
|
-
|
287
|
+
|
288
|
+
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@protocol</span> <span class="ruby-operator">==</span> <span class="ruby-value">:udp</span>
|
289
|
+
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">send</span> <span class="ruby-identifier">string</span>, <span class="ruby-value">0</span>
|
290
|
+
<span class="ruby-keyword">else</span>
|
291
|
+
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">string</span>
|
292
|
+
<span class="ruby-keyword">end</span>
|
293
|
+
|
283
294
|
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">flush</span>
|
284
295
|
|
285
|
-
<span class="ruby-identifier">matches</span> = <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">read_match</span>(<span class="ruby-identifier">
|
296
|
+
<span class="ruby-identifier">matches</span> = <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">read_match</span>(<span class="ruby-identifier">kwargs</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">match</span><span class="ruby-operator">|</span> <span class="ruby-keyword">yield</span> <span class="ruby-identifier">match</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">block_given?</span>}
|
286
297
|
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@persistent</span>
|
287
298
|
|
288
299
|
<span class="ruby-identifier">matches</span>
|
@@ -317,7 +328,7 @@ non-persistent sockets.</p>
|
|
317
328
|
|
318
329
|
|
319
330
|
<div class="method-source-code" id="flush-source">
|
320
|
-
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line
|
331
|
+
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 80</span>
|
321
332
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">flush</span>
|
322
333
|
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">flush</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@persistent</span>
|
323
334
|
<span class="ruby-keyword">end</span></pre>
|
@@ -335,7 +346,7 @@ non-persistent sockets.</p>
|
|
335
346
|
|
336
347
|
<div class="method-heading">
|
337
348
|
<span class="method-name">has_data?</span><span
|
338
|
-
class="method-args">(**
|
349
|
+
class="method-args">(**kwargs)</span>
|
339
350
|
|
340
351
|
<span class="method-click-advice">click to toggle source</span>
|
341
352
|
|
@@ -353,10 +364,10 @@ non-persistent sockets.</p>
|
|
353
364
|
|
354
365
|
|
355
366
|
<div class="method-source-code" id="has_data-3F-source">
|
356
|
-
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line
|
357
|
-
<span class="ruby-keyword">def</span> <span class="ruby-identifier">has_data?</span>(<span class="ruby-operator">**</span><span class="ruby-identifier">
|
367
|
+
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 67</span>
|
368
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">has_data?</span>(<span class="ruby-operator">**</span><span class="ruby-identifier">kwargs</span>)
|
358
369
|
<span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@socket</span>
|
359
|
-
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">has_data?</span> <span class="ruby-identifier">
|
370
|
+
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">has_data?</span> <span class="ruby-identifier">kwargs</span>
|
360
371
|
<span class="ruby-keyword">end</span></pre>
|
361
372
|
</div>
|
362
373
|
|
@@ -387,7 +398,7 @@ non-persistent sockets.</p>
|
|
387
398
|
|
388
399
|
|
389
400
|
<div class="method-source-code" id="persistent-3F-source">
|
390
|
-
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line
|
401
|
+
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 35</span>
|
391
402
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">persistent?</span>
|
392
403
|
<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>
|
393
404
|
<span class="ruby-keyword">end</span></pre>
|
@@ -421,7 +432,7 @@ non-persistent sockets.</p>
|
|
421
432
|
|
422
433
|
|
423
434
|
<div class="method-source-code" id="protocol-3F-source">
|
424
|
-
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line
|
435
|
+
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 30</span>
|
425
436
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">protocol?</span>
|
426
437
|
<span class="ruby-ivar">@protocol</span>
|
427
438
|
<span class="ruby-keyword">end</span></pre>
|
@@ -455,7 +466,7 @@ any string not already ending with one.</p>
|
|
455
466
|
|
456
467
|
|
457
468
|
<div class="method-source-code" id="puts-source">
|
458
|
-
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line
|
469
|
+
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 86</span>
|
459
470
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">puts</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">string</span>)
|
460
471
|
<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">"\n"</span>) <span class="ruby-operator">+</span> <span class="ruby-string">"\n"</span>
|
461
472
|
<span class="ruby-keyword">end</span></pre>
|
@@ -488,10 +499,17 @@ any string not already ending with one.</p>
|
|
488
499
|
|
489
500
|
|
490
501
|
<div class="method-source-code" id="write-source">
|
491
|
-
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line
|
502
|
+
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 92</span>
|
492
503
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">write</span>(<span class="ruby-identifier">string</span>)
|
493
504
|
<span class="ruby-identifier">create_socket</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@persistent</span>
|
494
|
-
|
505
|
+
|
506
|
+
<span class="ruby-identifier">num_bytes</span> = <span class="ruby-value">0</span>
|
507
|
+
|
508
|
+
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@protocol</span> <span class="ruby-operator">==</span> <span class="ruby-value">:udp</span>
|
509
|
+
<span class="ruby-identifier">num_bytes</span> = <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">send</span> <span class="ruby-identifier">string</span>, <span class="ruby-value">0</span>
|
510
|
+
<span class="ruby-keyword">else</span>
|
511
|
+
<span class="ruby-identifier">num_bytes</span> = <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">string</span>
|
512
|
+
<span class="ruby-keyword">end</span>
|
495
513
|
|
496
514
|
<span class="ruby-keyword">unless</span> <span class="ruby-ivar">@persistent</span>
|
497
515
|
<span class="ruby-comment"># Read in data to prevent RST packets.</span>
|
data/doc/created.rid
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
|
2
|
-
lib/ionian.rb
|
3
|
-
lib/ionian/extension/io.rb
|
4
|
-
lib/ionian/extension/socket.rb
|
5
|
-
lib/ionian/socket.rb
|
1
|
+
Tue, 03 Dec 2013 19:30:58 -0800
|
2
|
+
lib/ionian.rb Tue, 03 Dec 2013 19:30:50 -0800
|
3
|
+
lib/ionian/extension/io.rb Tue, 03 Dec 2013 19:28:00 -0800
|
4
|
+
lib/ionian/extension/socket.rb Tue, 03 Dec 2013 19:28:50 -0800
|
5
|
+
lib/ionian/socket.rb Tue, 03 Dec 2013 19:29:44 -0800
|
data/doc/js/search_index.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
var search_data = {"index":{"searchIndex":["ionian","extension","io","socket","socket","<<()","closed?()","cmd()","expression()","expression=()","extended()","extended()","flush()","has_data?()","has_data?()","initialize_ionian()","initialize_ionian_socket()","new()","no_delay()","no_delay=()","on_match()","persistent?()","protocol?()","purge()","puts()","read_match()","register_observer()","run_match()","unregister_observer()","write()"],"longSearchIndex":["ionian","ionian::extension","ionian::extension::io","ionian::extension::socket","ionian::socket","ionian::socket#<<()","ionian::socket#closed?()","ionian::socket#cmd()","ionian::extension::io#expression()","ionian::extension::io#expression=()","ionian::extension::io::extended()","ionian::extension::socket::extended()","ionian::socket#flush()","ionian::extension::io#has_data?()","ionian::socket#has_data?()","ionian::extension::io#initialize_ionian()","ionian::extension::socket#initialize_ionian_socket()","ionian::socket::new()","ionian::extension::socket#no_delay()","ionian::extension::socket#no_delay=()","ionian::extension::io#on_match()","ionian::socket#persistent?()","ionian::socket#protocol?()","ionian::extension::io#purge()","ionian::socket#puts()","ionian::extension::io#read_match()","ionian::extension::io#register_observer()","ionian::extension::io#run_match()","ionian::extension::io#unregister_observer()","ionian::socket#write()"],"info":[["Ionian","","Ionian.html","","<p>A library to simplify interaction with IO streams. This includes network\nsockets, file sockets, and serial …\n"],["Ionian::Extension","","Ionian/Extension.html","",""],["Ionian::Extension::IO","","Ionian/Extension/IO.html","","<p>A mixin for IO objects that allows regular expression matching and\nconvenient notification of received …\n"],["Ionian::Extension::Socket","","Ionian/Extension/Socket.html","","<p>A mixin for Socket objects.\n<p>This module was designed to be extended by instantiated objects that\nimplement …\n"],["Ionian::Socket","","Ionian/Socket.html","",""],["<<","Ionian::Socket","Ionian/Socket.html#method-i-3C-3C","(string)",""],["closed?","Ionian::Socket","Ionian/Socket.html#method-i-closed-3F","()","<p>Returns true if the socket is closed.\n"],["cmd","Ionian::Socket","Ionian/Socket.html#method-i-cmd","(string, **
|
1
|
+
var search_data = {"index":{"searchIndex":["ionian","extension","io","socket","socket","<<()","closed?()","cmd()","expression()","expression=()","extended()","extended()","flush()","has_data?()","has_data?()","initialize_ionian()","initialize_ionian_socket()","new()","no_delay()","no_delay=()","on_match()","persistent?()","protocol?()","purge()","puts()","read_match()","register_observer()","run_match()","unregister_observer()","write()"],"longSearchIndex":["ionian","ionian::extension","ionian::extension::io","ionian::extension::socket","ionian::socket","ionian::socket#<<()","ionian::socket#closed?()","ionian::socket#cmd()","ionian::extension::io#expression()","ionian::extension::io#expression=()","ionian::extension::io::extended()","ionian::extension::socket::extended()","ionian::socket#flush()","ionian::extension::io#has_data?()","ionian::socket#has_data?()","ionian::extension::io#initialize_ionian()","ionian::extension::socket#initialize_ionian_socket()","ionian::socket::new()","ionian::extension::socket#no_delay()","ionian::extension::socket#no_delay=()","ionian::extension::io#on_match()","ionian::socket#persistent?()","ionian::socket#protocol?()","ionian::extension::io#purge()","ionian::socket#puts()","ionian::extension::io#read_match()","ionian::extension::io#register_observer()","ionian::extension::io#run_match()","ionian::extension::io#unregister_observer()","ionian::socket#write()"],"info":[["Ionian","","Ionian.html","","<p>A library to simplify interaction with IO streams. This includes network\nsockets, file sockets, and serial …\n"],["Ionian::Extension","","Ionian/Extension.html","","<p>A collection of mixins.\n"],["Ionian::Extension::IO","","Ionian/Extension/IO.html","","<p>A mixin for IO objects that allows regular expression matching and\nconvenient notification of received …\n"],["Ionian::Extension::Socket","","Ionian/Extension/Socket.html","","<p>A mixin for Socket objects.\n<p>This module was designed to be extended by instantiated objects that\nimplement …\n"],["Ionian::Socket","","Ionian/Socket.html","","<p>A convenient wrapper for TCP, UDP, and Unix sockets.\n"],["<<","Ionian::Socket","Ionian/Socket.html#method-i-3C-3C","(string)",""],["closed?","Ionian::Socket","Ionian/Socket.html#method-i-closed-3F","()","<p>Returns true if the socket is closed.\n"],["cmd","Ionian::Socket","Ionian/Socket.html#method-i-cmd","(string, **kwargs, &block)","<p>Send a command (data) to the socket. Returns an array of received matches.\nBlock yields received match. …\n"],["expression","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-expression","()","<p>Returns the regular expression used for #read_match.\n"],["expression=","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-expression-3D","(exp)","<p>Set the expression to match against the read buffer. Can be a regular\nexpression specifying capture groups, …\n"],["extended","Ionian::Extension::IO","Ionian/Extension/IO.html#method-c-extended","(obj)","<p>Called automaticallly when the object is extended with #extend.\n"],["extended","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-c-extended","(obj)","<p>Called automaticallly when the object is extended with #extend.\n"],["flush","Ionian::Socket","Ionian/Socket.html#method-i-flush","()","<p>Flushes buffered data to the operating system. This method has no effect on\nnon-persistent sockets.\n"],["has_data?","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-has_data-3F","(timeout: 0)","<p>Returns true if there is data in the receive buffer. Args:\n\n<pre>Timeout: Number of seconds to wait for data ...</pre>\n"],["has_data?","Ionian::Socket","Ionian/Socket.html#method-i-has_data-3F","(**kwargs)","<p>Returns true if there is data in the receive buffer. Args:\n\n<pre>Timeout: Number of seconds to wait for data ...</pre>\n"],["initialize_ionian","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-initialize_ionian","()","<p>Initialize the Ionian instance variables. This is called automatically if\n#extend is called on an object. …\n"],["initialize_ionian_socket","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-initialize_ionian_socket","()","<p>Initialize the Ionian Socket variables. This is called automatically if\n#extend is called on an object. …\n"],["new","Ionian::Socket","Ionian/Socket.html#method-c-new","(**kwargs)","<p>Args:\n\n<pre>host: IP or hostname to connect to.\nport: Connection's port number. Default is 23. Unused by :unix ...</pre>\n"],["no_delay","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-no_delay","()","<p>Returns true if the TCP_NODELAY flag is enabled (Nagle disabled). Otherwise\nfalse.\n"],["no_delay=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-no_delay-3D","(value)","<p>Setting to true enables the TCP_NODELAY flag (disables Nagle). Setting to\nfalse disables the flag (enables …\n"],["on_match","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-on_match","(&block)",""],["persistent?","Ionian::Socket","Ionian/Socket.html#method-i-persistent-3F","()","<p>Returns true if the socket remains open after writing data.\n"],["protocol?","Ionian::Socket","Ionian/Socket.html#method-i-protocol-3F","()","<p>Returns a symbol of the type of protocol this socket uses: :tcp, :udp,\n:unix\n"],["purge","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-purge","()","<p>Erase the data in the IO and Ionian buffers. This is typically handled\nautomatically.\n"],["puts","Ionian::Socket","Ionian/Socket.html#method-i-puts","(*string)","<p>Writes the given string(s) to the socket and appends a newline character to\nany string not already ending …\n"],["read_match","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-read_match","(**kwargs, &block)","<p>Read matched data from the buffer. This method SHOULD NOT be used if\n#run_match is used.\n<p>Passes matches …\n"],["register_observer","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-register_observer","(&block)","<p>Register a block to be called when #run_match receives matched data. Method\ncallbacks can be registered …\n"],["run_match","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-run_match","(**kwargs)","<p>Start a thread that checks for data and notifies listeners (do |match,\nsocket|). Passes kwargs to #read_match …\n"],["unregister_observer","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-unregister_observer","(&block)","<p>Unregister a block from being called when matched data is received.\n"],["write","Ionian::Socket","Ionian/Socket.html#method-i-write","(string)","<p>Writes the given string to the socket. Returns the number of bytes written.\n"]]}}
|
data/lib/ionian/extension/io.rb
CHANGED
@@ -68,16 +68,16 @@ module Ionian
|
|
68
68
|
# buffer for the next #read_match cycle. This is helpful for protocols
|
69
69
|
# like RS232 that do not have packet boundries.
|
70
70
|
#
|
71
|
-
#
|
71
|
+
# kwargs:
|
72
72
|
# timeout: Timeout in seconds IO::select will block.
|
73
73
|
# skip_select: Skip over the IO::select statement. Use if you
|
74
74
|
# are calling IO::select ahead of this method.
|
75
75
|
# build_methods: Build method accessors from named captures.
|
76
76
|
# Enabled by default.
|
77
|
-
def read_match(**
|
78
|
-
timeout =
|
79
|
-
skip_select =
|
80
|
-
build_methods =
|
77
|
+
def read_match(**kwargs, &block)
|
78
|
+
timeout = kwargs.fetch :timeout, @ionian_timeout
|
79
|
+
skip_select = kwargs.fetch :skip_select, @ionian_skip_select
|
80
|
+
build_methods = kwargs.fetch :build_methods, @ionian_build_methods
|
81
81
|
|
82
82
|
unless skip_select
|
83
83
|
return nil unless ::IO.select [self], nil, nil, timeout
|
@@ -113,13 +113,13 @@ module Ionian
|
|
113
113
|
end
|
114
114
|
|
115
115
|
# Start a thread that checks for data and notifies listeners (do |match, socket|).
|
116
|
-
# Passes
|
116
|
+
# Passes kwargs to #read_match.
|
117
117
|
# This method SHOULD NOT be used if #read_match is used.
|
118
|
-
def run_match(**
|
118
|
+
def run_match(**kwargs)
|
119
119
|
@match_listener ||= Thread.new do
|
120
120
|
begin
|
121
121
|
while not closed? do
|
122
|
-
matches = read_match
|
122
|
+
matches = read_match kwargs
|
123
123
|
matches.each {|match|
|
124
124
|
@ionian_listeners.each {|listener| listener.call match, self}
|
125
125
|
} if matches
|
data/lib/ionian/socket.rb
CHANGED
@@ -1,25 +1,26 @@
|
|
1
1
|
require 'ionian/extension/socket'
|
2
2
|
|
3
3
|
module Ionian
|
4
|
+
|
5
|
+
# A convenient wrapper for TCP, UDP, and Unix sockets.
|
4
6
|
class Socket
|
5
7
|
|
6
|
-
|
7
|
-
#
|
8
|
-
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
|
15
|
-
def initialize(**kvargs)
|
8
|
+
# Args:
|
9
|
+
# host: IP or hostname to connect to.
|
10
|
+
# port: Connection's port number. Default is 23. Unused by :unix protocol.
|
11
|
+
# protocol: Type of socket to create. :tcp, :udp, :unix. Default is :tcp.
|
12
|
+
# persistent: The socket remains open after data is sent if this is true.
|
13
|
+
# The socket closes after data is sent and a packet is received
|
14
|
+
# if this is false. Default is true.
|
15
|
+
# expression: Overrides the #read_match regular expression for received data.
|
16
|
+
def initialize(**kwargs)
|
16
17
|
@socket = nil
|
17
18
|
|
18
|
-
@host =
|
19
|
-
@port =
|
20
|
-
@
|
21
|
-
@
|
22
|
-
@
|
19
|
+
@host = kwargs.fetch :host
|
20
|
+
@port = kwargs.fetch :port, 23
|
21
|
+
@protocol = kwargs.fetch :protocol, :tcp
|
22
|
+
@persistent = kwargs.fetch :persistent, true
|
23
|
+
@expression = kwargs.fetch :expression, nil
|
23
24
|
|
24
25
|
create_socket if @persistent
|
25
26
|
end
|
@@ -35,15 +36,22 @@ module Ionian
|
|
35
36
|
@persistent == false || @persistent == nil ? false : true
|
36
37
|
end
|
37
38
|
|
38
|
-
# Send a command (data) to the socket.
|
39
|
+
# Send a command (data) to the socket.
|
40
|
+
# Returns an array of received matches.
|
39
41
|
# Block yields received match.
|
40
|
-
# See Ionian::Extension::IO#read_match
|
41
|
-
def cmd(string, **
|
42
|
+
# See Ionian::Extension::IO#read_match.
|
43
|
+
def cmd(string, **kwargs, &block)
|
42
44
|
create_socket unless @persistent
|
43
|
-
|
45
|
+
|
46
|
+
if @protocol == :udp
|
47
|
+
@socket.send string, 0
|
48
|
+
else
|
49
|
+
@socket.write string
|
50
|
+
end
|
51
|
+
|
44
52
|
@socket.flush
|
45
53
|
|
46
|
-
matches = @socket.read_match(
|
54
|
+
matches = @socket.read_match(kwargs) {|match| yield match if block_given?}
|
47
55
|
@socket.close unless @persistent
|
48
56
|
|
49
57
|
matches
|
@@ -56,9 +64,9 @@ module Ionian
|
|
56
64
|
# Args:
|
57
65
|
# Timeout: Number of seconds to wait for data until
|
58
66
|
# giving up. Set to nil for blocking.
|
59
|
-
def has_data?(**
|
67
|
+
def has_data?(**kwargs)
|
60
68
|
return false unless @socket
|
61
|
-
@socket.has_data?
|
69
|
+
@socket.has_data? kwargs
|
62
70
|
end
|
63
71
|
|
64
72
|
# Returns true if the socket is closed.
|
@@ -83,7 +91,14 @@ module Ionian
|
|
83
91
|
# bytes written.
|
84
92
|
def write(string)
|
85
93
|
create_socket unless @persistent
|
86
|
-
|
94
|
+
|
95
|
+
num_bytes = 0
|
96
|
+
|
97
|
+
if @protocol == :udp
|
98
|
+
num_bytes = @socket.send string, 0
|
99
|
+
else
|
100
|
+
num_bytes = @socket.write string
|
101
|
+
end
|
87
102
|
|
88
103
|
unless @persistent
|
89
104
|
# Read in data to prevent RST packets.
|
@@ -101,6 +116,7 @@ module Ionian
|
|
101
116
|
|
102
117
|
private
|
103
118
|
|
119
|
+
# Initialize or reinitialize @socket.
|
104
120
|
def create_socket
|
105
121
|
@socket.close if @socket and not @socket.closed?
|
106
122
|
|
@@ -109,6 +125,7 @@ module Ionian
|
|
109
125
|
@socket = ::TCPSocket.new @host, @port
|
110
126
|
when :udp
|
111
127
|
@socket = ::UDPSocket.new
|
128
|
+
@socket.bind '', @port
|
112
129
|
@socket.connect @host, @port
|
113
130
|
when :unix
|
114
131
|
@socket = ::UNIXSocket.new @host
|
data/lib/ionian.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ionian
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex McLain
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
11
|
+
date: 2013-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: fivemat
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
description: A library to simplify interaction with IO streams. This includes network
|
70
84
|
sockets, file sockets, and serial streams like the console and RS232. Features regular
|
71
85
|
expression matching and notification of received data.
|
@@ -117,7 +131,6 @@ files:
|
|
117
131
|
- doc/Ionian.html
|
118
132
|
- doc/fonts.css
|
119
133
|
- doc/Ionian/Extension.html
|
120
|
-
- doc/Ionian/IO.html
|
121
134
|
- doc/Ionian/Socket.html
|
122
135
|
- doc/Ionian/Extension/IO.html
|
123
136
|
- doc/Ionian/Extension/Socket.html
|
data/doc/Ionian/IO.html
DELETED
@@ -1,598 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
|
3
|
-
<html>
|
4
|
-
<head>
|
5
|
-
<meta charset="UTF-8">
|
6
|
-
|
7
|
-
<title>module Ionian::IO - RDoc Documentation</title>
|
8
|
-
|
9
|
-
<link href="../fonts.css" rel="stylesheet">
|
10
|
-
<link href="../rdoc.css" rel="stylesheet">
|
11
|
-
|
12
|
-
<script type="text/javascript">
|
13
|
-
var rdoc_rel_prefix = "../";
|
14
|
-
</script>
|
15
|
-
|
16
|
-
<script src="../js/jquery.js"></script>
|
17
|
-
<script src="../js/navigation.js"></script>
|
18
|
-
<script src="../js/search_index.js"></script>
|
19
|
-
<script src="../js/search.js"></script>
|
20
|
-
<script src="../js/searcher.js"></script>
|
21
|
-
<script src="../js/darkfish.js"></script>
|
22
|
-
|
23
|
-
|
24
|
-
<body id="top" role="document" class="module">
|
25
|
-
<nav role="navigation">
|
26
|
-
<div id="project-navigation">
|
27
|
-
<div id="home-section" role="banner" class="nav-section">
|
28
|
-
<h2>
|
29
|
-
<a href="../index.html" rel="home">Home</a>
|
30
|
-
</h2>
|
31
|
-
|
32
|
-
<h3>
|
33
|
-
<a href="../table_of_contents.html#pages">Pages</a>
|
34
|
-
<a href="../table_of_contents.html#classes">Classes</a>
|
35
|
-
<a href="../table_of_contents.html#methods">Methods</a>
|
36
|
-
</h3>
|
37
|
-
</div>
|
38
|
-
|
39
|
-
<div id="search-section" role="search" class="project-section initially-hidden">
|
40
|
-
<form action="#" method="get" accept-charset="utf-8">
|
41
|
-
<div id="search-field-wrapper">
|
42
|
-
<input id="search-field" role="combobox" aria-label="Search"
|
43
|
-
aria-autocomplete="list" aria-controls="search-results"
|
44
|
-
type="text" name="search" placeholder="Search"
|
45
|
-
title="Type to search, Up and Down to navigate, Enter to load">
|
46
|
-
</div>
|
47
|
-
|
48
|
-
<ul id="search-results" aria-label="Search Results"
|
49
|
-
aria-busy="false" aria-expanded="false"
|
50
|
-
aria-atomic="false" aria-live="polite"
|
51
|
-
aria-relevant="all" class="initially-hidden"></ul>
|
52
|
-
</form>
|
53
|
-
</div>
|
54
|
-
|
55
|
-
</div>
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
<div id="class-metadata">
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
<!-- Method Quickref -->
|
65
|
-
<div id="method-list-section" class="nav-section">
|
66
|
-
<h3>Methods</h3>
|
67
|
-
|
68
|
-
<ul class="link-list" role="directory">
|
69
|
-
|
70
|
-
<li ><a href="#method-c-extended">::extended</a>
|
71
|
-
|
72
|
-
<li ><a href="#method-i-expression">#expression</a>
|
73
|
-
|
74
|
-
<li ><a href="#method-i-expression-3D">#expression=</a>
|
75
|
-
|
76
|
-
<li ><a href="#method-i-initialize_ionian">#initialize_ionian</a>
|
77
|
-
|
78
|
-
<li ><a href="#method-i-on_match">#on_match</a>
|
79
|
-
|
80
|
-
<li ><a href="#method-i-purge">#purge</a>
|
81
|
-
|
82
|
-
<li ><a href="#method-i-read_match">#read_match</a>
|
83
|
-
|
84
|
-
<li ><a href="#method-i-register_observer">#register_observer</a>
|
85
|
-
|
86
|
-
<li ><a href="#method-i-run_match">#run_match</a>
|
87
|
-
|
88
|
-
<li ><a href="#method-i-unregister_observer">#unregister_observer</a>
|
89
|
-
|
90
|
-
</ul>
|
91
|
-
</div>
|
92
|
-
|
93
|
-
</div>
|
94
|
-
</nav>
|
95
|
-
|
96
|
-
<main role="main" aria-labelledby="module-Ionian::IO">
|
97
|
-
<h1 id="module-Ionian::IO" class="module">
|
98
|
-
module Ionian::IO
|
99
|
-
</h1>
|
100
|
-
|
101
|
-
<section class="description">
|
102
|
-
|
103
|
-
<p>A mixin for <a href="IO.html">IO</a> objects that allows regular expression
|
104
|
-
matching and convenient notification of received data.</p>
|
105
|
-
|
106
|
-
<p>This module was designed to be extended by instantiated objects that
|
107
|
-
implement the standard library <a href="IO.html">IO</a> class.
|
108
|
-
my_socket.extend <a href="IO.html">Ionian::IO</a></p>
|
109
|
-
|
110
|
-
</section>
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
<section id="5Buntitled-5D" class="documentation-section">
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
<section class="attribute-method-details" class="method-section">
|
124
|
-
<header>
|
125
|
-
<h3>Attributes</h3>
|
126
|
-
</header>
|
127
|
-
|
128
|
-
|
129
|
-
<div id="attribute-i-ionian_timeout" class="method-detail">
|
130
|
-
<div class="method-heading attribute-method-heading">
|
131
|
-
<span class="method-name">ionian_timeout</span><span
|
132
|
-
class="attribute-access-type">[RW]</span>
|
133
|
-
</div>
|
134
|
-
|
135
|
-
<div class="method-description">
|
136
|
-
|
137
|
-
<p>Number of seconds to attempt an <a href="IO.html">IO</a> operation before
|
138
|
-
timing out. See standard library IO::select.</p>
|
139
|
-
|
140
|
-
</div>
|
141
|
-
</div>
|
142
|
-
|
143
|
-
</section>
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
<section id="public-class-5Buntitled-5D-method-details" class="method-section">
|
148
|
-
<header>
|
149
|
-
<h3>Public Class Methods</h3>
|
150
|
-
</header>
|
151
|
-
|
152
|
-
|
153
|
-
<div id="method-c-extended" class="method-detail ">
|
154
|
-
|
155
|
-
<div class="method-heading">
|
156
|
-
<span class="method-name">extended</span><span
|
157
|
-
class="method-args">(obj)</span>
|
158
|
-
|
159
|
-
<span class="method-click-advice">click to toggle source</span>
|
160
|
-
|
161
|
-
</div>
|
162
|
-
|
163
|
-
|
164
|
-
<div class="method-description">
|
165
|
-
|
166
|
-
<p>Called automaticallly when the object is extended with extend.</p>
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
<div class="method-source-code" id="extended-source">
|
172
|
-
<pre><span class="ruby-comment"># File lib/ionian/io.rb, line 14</span>
|
173
|
-
<span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">extended</span>(<span class="ruby-identifier">obj</span>)
|
174
|
-
<span class="ruby-identifier">obj</span>.<span class="ruby-identifier">initialize_ionian</span>
|
175
|
-
<span class="ruby-keyword">end</span></pre>
|
176
|
-
</div>
|
177
|
-
|
178
|
-
</div>
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
</div>
|
184
|
-
|
185
|
-
|
186
|
-
</section>
|
187
|
-
|
188
|
-
<section id="public-instance-5Buntitled-5D-method-details" class="method-section">
|
189
|
-
<header>
|
190
|
-
<h3>Public Instance Methods</h3>
|
191
|
-
</header>
|
192
|
-
|
193
|
-
|
194
|
-
<div id="method-i-expression" class="method-detail ">
|
195
|
-
|
196
|
-
<div class="method-heading">
|
197
|
-
<span class="method-name">expression</span><span
|
198
|
-
class="method-args">()</span>
|
199
|
-
|
200
|
-
<span class="method-click-advice">click to toggle source</span>
|
201
|
-
|
202
|
-
</div>
|
203
|
-
|
204
|
-
|
205
|
-
<div class="method-description">
|
206
|
-
|
207
|
-
<p>Returns the regular expression used for <a
|
208
|
-
href="IO.html#method-i-read_match">read_match</a>.</p>
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
<div class="method-source-code" id="expression-source">
|
214
|
-
<pre><span class="ruby-comment"># File lib/ionian/io.rb, line 30</span>
|
215
|
-
<span class="ruby-keyword">def</span> <span class="ruby-identifier">expression</span>
|
216
|
-
<span class="ruby-ivar">@ionian_expression</span>
|
217
|
-
<span class="ruby-keyword">end</span></pre>
|
218
|
-
</div>
|
219
|
-
|
220
|
-
</div>
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
</div>
|
226
|
-
|
227
|
-
|
228
|
-
<div id="method-i-expression-3D" class="method-detail ">
|
229
|
-
|
230
|
-
<div class="method-heading">
|
231
|
-
<span class="method-name">expression=</span><span
|
232
|
-
class="method-args">(exp)</span>
|
233
|
-
|
234
|
-
<span class="method-click-advice">click to toggle source</span>
|
235
|
-
|
236
|
-
</div>
|
237
|
-
|
238
|
-
|
239
|
-
<div class="method-description">
|
240
|
-
|
241
|
-
<p>Set the expression to match against the read buffer. Can be a regular
|
242
|
-
expression specifying capture groups, or a string specifying the separator
|
243
|
-
or line terminator sequence. It is possible to use named captures in a
|
244
|
-
regex, which allows for convienient accessors like <a
|
245
|
-
href=":parameter">match</a>.</p>
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
<div class="method-source-code" id="expression-3D-source">
|
251
|
-
<pre><span class="ruby-comment"># File lib/ionian/io.rb, line 40</span>
|
252
|
-
<span class="ruby-keyword">def</span> <span class="ruby-identifier">expression=</span>(<span class="ruby-identifier">exp</span>)
|
253
|
-
<span class="ruby-ivar">@ionian_expression</span> = <span class="ruby-identifier">exp</span>
|
254
|
-
<span class="ruby-ivar">@ionian_expression</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span> <span class="ruby-node">"(.*?)#{expression}"</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">exp</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">String</span>
|
255
|
-
<span class="ruby-keyword">end</span></pre>
|
256
|
-
</div>
|
257
|
-
|
258
|
-
</div>
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
</div>
|
264
|
-
|
265
|
-
|
266
|
-
<div id="method-i-initialize_ionian" class="method-detail ">
|
267
|
-
|
268
|
-
<div class="method-heading">
|
269
|
-
<span class="method-name">initialize_ionian</span><span
|
270
|
-
class="method-args">()</span>
|
271
|
-
|
272
|
-
<span class="method-click-advice">click to toggle source</span>
|
273
|
-
|
274
|
-
</div>
|
275
|
-
|
276
|
-
|
277
|
-
<div class="method-description">
|
278
|
-
|
279
|
-
<p>Initialize the <a href="../Ionian.html">Ionian</a> instance variables. This
|
280
|
-
is called automatically if extend is called on an object.</p>
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
<div class="method-source-code" id="initialize_ionian-source">
|
286
|
-
<pre><span class="ruby-comment"># File lib/ionian/io.rb, line 20</span>
|
287
|
-
<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize_ionian</span>
|
288
|
-
<span class="ruby-ivar">@ionian_listeners</span> = []
|
289
|
-
<span class="ruby-ivar">@ionian_buf</span> = <span class="ruby-string">''</span>
|
290
|
-
<span class="ruby-ivar">@ionian_expression</span> = <span class="ruby-regexp">/(.*?)\n/</span>
|
291
|
-
<span class="ruby-ivar">@ionian_timeout</span> = <span class="ruby-keyword">nil</span>
|
292
|
-
<span class="ruby-ivar">@ionian_skip_select</span> = <span class="ruby-keyword">false</span>
|
293
|
-
<span class="ruby-ivar">@ionian_build_methods</span> = <span class="ruby-keyword">true</span>
|
294
|
-
<span class="ruby-keyword">end</span></pre>
|
295
|
-
</div>
|
296
|
-
|
297
|
-
</div>
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
</div>
|
303
|
-
|
304
|
-
|
305
|
-
<div id="method-i-on_match" class="method-detail method-alias">
|
306
|
-
|
307
|
-
<div class="method-heading">
|
308
|
-
<span class="method-name">on_match</span><span
|
309
|
-
class="method-args">(&block)</span>
|
310
|
-
|
311
|
-
</div>
|
312
|
-
|
313
|
-
|
314
|
-
<div class="method-description">
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
</div>
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
<div class="aliases">
|
327
|
-
Alias for: <a href="IO.html#method-i-register_observer">register_observer</a>
|
328
|
-
</div>
|
329
|
-
|
330
|
-
</div>
|
331
|
-
|
332
|
-
|
333
|
-
<div id="method-i-purge" class="method-detail ">
|
334
|
-
|
335
|
-
<div class="method-heading">
|
336
|
-
<span class="method-name">purge</span><span
|
337
|
-
class="method-args">()</span>
|
338
|
-
|
339
|
-
<span class="method-click-advice">click to toggle source</span>
|
340
|
-
|
341
|
-
</div>
|
342
|
-
|
343
|
-
|
344
|
-
<div class="method-description">
|
345
|
-
|
346
|
-
<p>Erase the data in the <a href="IO.html">IO</a> and <a
|
347
|
-
href="../Ionian.html">Ionian</a> buffers. This is typically handled
|
348
|
-
automatically.</p>
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
<div class="method-source-code" id="purge-source">
|
354
|
-
<pre><span class="ruby-comment"># File lib/ionian/io.rb, line 128</span>
|
355
|
-
<span class="ruby-keyword">def</span> <span class="ruby-identifier">purge</span>
|
356
|
-
<span class="ruby-comment"># Erase IO buffer.</span>
|
357
|
-
<span class="ruby-keyword">while</span> <span class="ruby-operator">::</span><span class="ruby-constant">IO</span>.<span class="ruby-identifier">select</span> [<span class="ruby-keyword">self</span>], <span class="ruby-keyword">nil</span>, <span class="ruby-keyword">nil</span>, <span class="ruby-value">0</span>
|
358
|
-
<span class="ruby-identifier">readpartial</span>(<span class="ruby-value">0xFFFF</span>)
|
359
|
-
<span class="ruby-keyword">end</span>
|
360
|
-
|
361
|
-
<span class="ruby-ivar">@ionian_buf</span> = <span class="ruby-string">''</span>
|
362
|
-
<span class="ruby-keyword">end</span></pre>
|
363
|
-
</div>
|
364
|
-
|
365
|
-
</div>
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
</div>
|
371
|
-
|
372
|
-
|
373
|
-
<div id="method-i-read_match" class="method-detail ">
|
374
|
-
|
375
|
-
<div class="method-heading">
|
376
|
-
<span class="method-name">read_match</span><span
|
377
|
-
class="method-args">(**kvargs) { |$~| ... }</span>
|
378
|
-
|
379
|
-
<span class="method-click-advice">click to toggle source</span>
|
380
|
-
|
381
|
-
</div>
|
382
|
-
|
383
|
-
|
384
|
-
<div class="method-description">
|
385
|
-
|
386
|
-
<p>Read matched data from the buffer. This method SHOULD NOT be used if <a
|
387
|
-
href="IO.html#method-i-run_match">run_match</a> is used.</p>
|
388
|
-
|
389
|
-
<p>Passes matches to the block (do |match|). If there are multiple matches,
|
390
|
-
the block is called multiple times.</p>
|
391
|
-
|
392
|
-
<p>Returns an array of matches. Returns nil if no data was received within the
|
393
|
-
timeout period.</p>
|
394
|
-
|
395
|
-
<p>Junk data that could exist before a match in the buffer can be accessed
|
396
|
-
with match.pre_match.</p>
|
397
|
-
|
398
|
-
<p>Data at the end of the buffer that is not matched can be accessed in the
|
399
|
-
last match with match.post_match. This data remains in the buffer for the
|
400
|
-
next <a href="IO.html#method-i-read_match">read_match</a> cycle. This is
|
401
|
-
helpful for protocols like RS232 that do not have packet boundries.</p>
|
402
|
-
|
403
|
-
<p>kvargs:</p>
|
404
|
-
|
405
|
-
<pre>timeout: Timeout in seconds IO::select will block.
|
406
|
-
skip_select: Skip over the IO::select statement. Use if you
|
407
|
-
are calling IO::select ahead of this method.
|
408
|
-
build_methods: Build method accessors from named captures.
|
409
|
-
Enabled by default.</pre>
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
<div class="method-source-code" id="read_match-source">
|
415
|
-
<pre><span class="ruby-comment"># File lib/ionian/io.rb, line 68</span>
|
416
|
-
<span class="ruby-keyword">def</span> <span class="ruby-identifier">read_match</span>(<span class="ruby-operator">**</span><span class="ruby-identifier">kvargs</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
|
417
|
-
<span class="ruby-identifier">timeout</span> = <span class="ruby-identifier">kvargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:timeout</span>, <span class="ruby-ivar">@ionian_timeout</span>
|
418
|
-
<span class="ruby-identifier">skip_select</span> = <span class="ruby-identifier">kvargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:skip_select</span>, <span class="ruby-ivar">@ionian_skip_select</span>
|
419
|
-
<span class="ruby-identifier">build_methods</span> = <span class="ruby-identifier">kvargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:build_methods</span>, <span class="ruby-ivar">@ionian_build_methods</span>
|
420
|
-
|
421
|
-
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">skip_select</span>
|
422
|
-
<span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-operator">::</span><span class="ruby-constant">IO</span>.<span class="ruby-identifier">select</span> [<span class="ruby-keyword">self</span>], <span class="ruby-keyword">nil</span>, <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">timeout</span>
|
423
|
-
<span class="ruby-keyword">end</span>
|
424
|
-
|
425
|
-
<span class="ruby-comment"># Read data from the IO buffer until it's empty.</span>
|
426
|
-
<span class="ruby-identifier">loop</span> <span class="ruby-keyword">do</span>
|
427
|
-
<span class="ruby-ivar">@ionian_buf</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">readpartial</span>(<span class="ruby-value">0xFFFF</span>)
|
428
|
-
<span class="ruby-keyword">break</span> <span class="ruby-keyword">unless</span> <span class="ruby-operator">::</span><span class="ruby-constant">IO</span>.<span class="ruby-identifier">select</span> [<span class="ruby-keyword">self</span>], <span class="ruby-keyword">nil</span>, <span class="ruby-keyword">nil</span>, <span class="ruby-value">0</span>
|
429
|
-
<span class="ruby-keyword">end</span>
|
430
|
-
|
431
|
-
<span class="ruby-ivar">@matches</span> = []
|
432
|
-
|
433
|
-
<span class="ruby-keyword">while</span> <span class="ruby-ivar">@ionian_buf</span> <span class="ruby-operator">=~</span> <span class="ruby-ivar">@ionian_expression</span>
|
434
|
-
<span class="ruby-ivar">@matches</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">$~</span> <span class="ruby-comment"># Match data.</span>
|
435
|
-
<span class="ruby-keyword">yield</span> <span class="ruby-identifier">$~</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">block_given?</span>
|
436
|
-
<span class="ruby-ivar">@ionian_buf</span> = <span class="ruby-node">$'</span> <span class="ruby-comment"># Leave post match data in the buffer.</span>
|
437
|
-
<span class="ruby-keyword">end</span>
|
438
|
-
|
439
|
-
<span class="ruby-comment"># Convert named captures to methods.</span>
|
440
|
-
<span class="ruby-keyword">if</span> <span class="ruby-identifier">build_methods</span>
|
441
|
-
<span class="ruby-ivar">@matches</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">match</span><span class="ruby-operator">|</span>
|
442
|
-
<span class="ruby-identifier">match</span>.<span class="ruby-identifier">names</span>
|
443
|
-
.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">name</span><span class="ruby-operator">|</span> <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_sym</span>}
|
444
|
-
.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">symbol</span><span class="ruby-operator">|</span> <span class="ruby-identifier">match</span>.<span class="ruby-identifier">singleton_class</span>
|
445
|
-
.<span class="ruby-identifier">send</span>(<span class="ruby-value">:define_method</span>, <span class="ruby-identifier">symbol</span>) { <span class="ruby-identifier">match</span>[<span class="ruby-identifier">symbol</span>] } <span class="ruby-keyword">unless</span> <span class="ruby-identifier">match</span>.<span class="ruby-identifier">respond_to?</span> <span class="ruby-identifier">symbol</span>
|
446
|
-
}
|
447
|
-
<span class="ruby-keyword">end</span>
|
448
|
-
<span class="ruby-keyword">end</span>
|
449
|
-
|
450
|
-
<span class="ruby-ivar">@matches</span>
|
451
|
-
<span class="ruby-keyword">end</span></pre>
|
452
|
-
</div>
|
453
|
-
|
454
|
-
</div>
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
</div>
|
460
|
-
|
461
|
-
|
462
|
-
<div id="method-i-register_observer" class="method-detail ">
|
463
|
-
|
464
|
-
<div class="method-heading">
|
465
|
-
<span class="method-name">register_observer</span><span
|
466
|
-
class="method-args">(&block)</span>
|
467
|
-
|
468
|
-
<span class="method-click-advice">click to toggle source</span>
|
469
|
-
|
470
|
-
</div>
|
471
|
-
|
472
|
-
|
473
|
-
<div class="method-description">
|
474
|
-
|
475
|
-
<p>Register a block to be called when <a
|
476
|
-
href="IO.html#method-i-run_match">run_match</a> receives matched data.
|
477
|
-
Method callbacks can be registered with &object.method(:method).
|
478
|
-
Returns a reference to the given block. block =
|
479
|
-
ionian_socket.register_observer {…}</p>
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
<div class="method-source-code" id="register_observer-source">
|
485
|
-
<pre><span class="ruby-comment"># File lib/ionian/io.rb, line 141</span>
|
486
|
-
<span class="ruby-keyword">def</span> <span class="ruby-identifier">register_observer</span>(<span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
|
487
|
-
<span class="ruby-ivar">@ionian_listeners</span> <span class="ruby-operator"><<</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>
|
488
|
-
<span class="ruby-identifier">block</span>
|
489
|
-
<span class="ruby-keyword">end</span></pre>
|
490
|
-
</div>
|
491
|
-
|
492
|
-
</div>
|
493
|
-
|
494
|
-
|
495
|
-
<div class="aliases">
|
496
|
-
Also aliased as: <a href="IO.html#method-i-on_match">on_match</a>
|
497
|
-
</div>
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
</div>
|
502
|
-
|
503
|
-
|
504
|
-
<div id="method-i-run_match" class="method-detail ">
|
505
|
-
|
506
|
-
<div class="method-heading">
|
507
|
-
<span class="method-name">run_match</span><span
|
508
|
-
class="method-args">(**kvargs)</span>
|
509
|
-
|
510
|
-
<span class="method-click-advice">click to toggle source</span>
|
511
|
-
|
512
|
-
</div>
|
513
|
-
|
514
|
-
|
515
|
-
<div class="method-description">
|
516
|
-
|
517
|
-
<p>Start a thread that checks for data and notifies listeners (do |match,
|
518
|
-
socket|). Passes kvargs to <a
|
519
|
-
href="IO.html#method-i-read_match">read_match</a>. This method SHOULD NOT
|
520
|
-
be used if <a href="IO.html#method-i-read_match">read_match</a> is used.</p>
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
<div class="method-source-code" id="run_match-source">
|
526
|
-
<pre><span class="ruby-comment"># File lib/ionian/io.rb, line 109</span>
|
527
|
-
<span class="ruby-keyword">def</span> <span class="ruby-identifier">run_match</span>(<span class="ruby-operator">**</span><span class="ruby-identifier">kvargs</span>)
|
528
|
-
<span class="ruby-ivar">@match_listener</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword">do</span>
|
529
|
-
<span class="ruby-keyword">begin</span>
|
530
|
-
<span class="ruby-keyword">while</span> <span class="ruby-keyword">not</span> <span class="ruby-identifier">closed?</span> <span class="ruby-keyword">do</span>
|
531
|
-
<span class="ruby-identifier">matches</span> = <span class="ruby-identifier">read_match</span> <span class="ruby-identifier">kvargs</span>
|
532
|
-
<span class="ruby-identifier">matches</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">match</span><span class="ruby-operator">|</span>
|
533
|
-
<span class="ruby-ivar">@ionian_listeners</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">listener</span><span class="ruby-operator">|</span> <span class="ruby-identifier">listener</span>.<span class="ruby-identifier">call</span> <span class="ruby-identifier">match</span>, <span class="ruby-keyword">self</span>}
|
534
|
-
} <span class="ruby-keyword">if</span> <span class="ruby-identifier">matches</span>
|
535
|
-
<span class="ruby-keyword">end</span>
|
536
|
-
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">EOFError</span>
|
537
|
-
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">IOError</span>
|
538
|
-
<span class="ruby-keyword">end</span>
|
539
|
-
|
540
|
-
<span class="ruby-ivar">@match_listener</span> = <span class="ruby-keyword">nil</span>
|
541
|
-
<span class="ruby-keyword">end</span>
|
542
|
-
<span class="ruby-keyword">end</span></pre>
|
543
|
-
</div>
|
544
|
-
|
545
|
-
</div>
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
</div>
|
551
|
-
|
552
|
-
|
553
|
-
<div id="method-i-unregister_observer" class="method-detail ">
|
554
|
-
|
555
|
-
<div class="method-heading">
|
556
|
-
<span class="method-name">unregister_observer</span><span
|
557
|
-
class="method-args">(&block)</span>
|
558
|
-
|
559
|
-
<span class="method-click-advice">click to toggle source</span>
|
560
|
-
|
561
|
-
</div>
|
562
|
-
|
563
|
-
|
564
|
-
<div class="method-description">
|
565
|
-
|
566
|
-
<p>Unregister a block from being called when matched data is received.</p>
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
<div class="method-source-code" id="unregister_observer-source">
|
572
|
-
<pre><span class="ruby-comment"># File lib/ionian/io.rb, line 149</span>
|
573
|
-
<span class="ruby-keyword">def</span> <span class="ruby-identifier">unregister_observer</span>(<span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
|
574
|
-
<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>}
|
575
|
-
<span class="ruby-identifier">block</span>
|
576
|
-
<span class="ruby-keyword">end</span></pre>
|
577
|
-
</div>
|
578
|
-
|
579
|
-
</div>
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
</div>
|
585
|
-
|
586
|
-
|
587
|
-
</section>
|
588
|
-
|
589
|
-
</section>
|
590
|
-
</main>
|
591
|
-
|
592
|
-
|
593
|
-
<footer id="validator-badges" role="contentinfo">
|
594
|
-
<p><a href="http://validator.w3.org/check/referer">Validate</a>
|
595
|
-
<p>Generated by <a href="http://rdoc.rubyforge.org">RDoc</a> 4.1.0.preview.1.
|
596
|
-
<p>Based on <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
|
597
|
-
</footer>
|
598
|
-
|