ionian 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
-
|