rack-auth-ip 0.0.4 → 0.0.5

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.
@@ -1,794 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
- <html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'><head><title>/Library/Ruby/Gems/gems/ipaddr_list-0.0.2/lib/ipaddr_list.rb - C0 code coverage information</title>
3
- <style type='text/css'>body { background-color: rgb(240, 240, 245); }</style>
4
- <style type='text/css'>span.cross-ref-title {
5
- font-size: 140%;
6
- }
7
- span.cross-ref a {
8
- text-decoration: none;
9
- }
10
- span.cross-ref {
11
- background-color:#f3f7fa;
12
- border: 1px dashed #333;
13
- margin: 1em;
14
- padding: 0.5em;
15
- overflow: hidden;
16
- }
17
- a.crossref-toggle {
18
- text-decoration: none;
19
- }
20
- span.marked0 {
21
- background-color: rgb(185, 210, 200);
22
- display: block;
23
- }
24
- span.marked1 {
25
- background-color: rgb(190, 215, 205);
26
- display: block;
27
- }
28
- span.inferred0 {
29
- background-color: rgb(175, 200, 200);
30
- display: block;
31
- }
32
- span.inferred1 {
33
- background-color: rgb(180, 205, 205);
34
- display: block;
35
- }
36
- span.uncovered0 {
37
- background-color: rgb(225, 110, 110);
38
- display: block;
39
- }
40
- span.uncovered1 {
41
- background-color: rgb(235, 120, 120);
42
- display: block;
43
- }
44
- span.overview {
45
- border-bottom: 8px solid black;
46
- }
47
- div.overview {
48
- border-bottom: 8px solid black;
49
- }
50
- body {
51
- font-family: verdana, arial, helvetica;
52
- }
53
- div.footer {
54
- font-size: 68%;
55
- margin-top: 1.5em;
56
- }
57
- h1, h2, h3, h4, h5, h6 {
58
- margin-bottom: 0.5em;
59
- }
60
- h5 {
61
- margin-top: 0.5em;
62
- }
63
- .hidden {
64
- display: none;
65
- }
66
- div.separator {
67
- height: 10px;
68
- }
69
- /* Commented out for better readability, esp. on IE */
70
- /*
71
- table tr td, table tr th {
72
- font-size: 68%;
73
- }
74
- td.value table tr td {
75
- font-size: 11px;
76
- }
77
- */
78
- table.percent_graph {
79
- height: 12px;
80
- border: #808080 1px solid;
81
- empty-cells: show;
82
- }
83
- table.percent_graph td.covered {
84
- height: 10px;
85
- background: #00f000;
86
- }
87
- table.percent_graph td.uncovered {
88
- height: 10px;
89
- background: #e00000;
90
- }
91
- table.percent_graph td.NA {
92
- height: 10px;
93
- background: #eaeaea;
94
- }
95
- table.report {
96
- border-collapse: collapse;
97
- width: 100%;
98
- }
99
- table.report td.heading {
100
- background: #dcecff;
101
- border: #d0d0d0 1px solid;
102
- font-weight: bold;
103
- text-align: center;
104
- }
105
- table.report td.heading:hover {
106
- background: #c0ffc0;
107
- }
108
- table.report td.text {
109
- border: #d0d0d0 1px solid;
110
- }
111
- table.report td.value,
112
- table.report td.lines_total,
113
- table.report td.lines_code {
114
- text-align: right;
115
- border: #d0d0d0 1px solid;
116
- }
117
- table.report tr.light {
118
- background-color: rgb(240, 240, 245);
119
- }
120
- table.report tr.dark {
121
- background-color: rgb(230, 230, 235);
122
- }
123
- </style>
124
- <script type='text/javascript'>
125
- // <![CDATA[
126
- function toggleCode( id ) {
127
- if ( document.getElementById )
128
- elem = document.getElementById( id );
129
- else if ( document.all )
130
- elem = eval( "document.all." + id );
131
- else
132
- return false;
133
-
134
- elemStyle = elem.style;
135
-
136
- if ( elemStyle.display != "block" ) {
137
- elemStyle.display = "block"
138
- } else {
139
- elemStyle.display = "none"
140
- }
141
-
142
- return true;
143
- }
144
-
145
- // Make cross-references hidden by default
146
- document.writeln( "<style type=\"text/css\">span.cross-ref { display: none }</style>" )
147
- // ]]>
148
- </script>
149
- <style type='text/css'>span.run0 {
150
- background-color: rgb(178, 204, 255);
151
- display: block;
152
- }
153
- span.run1 {
154
- background-color: rgb(178, 206, 255);
155
- display: block;
156
- }
157
- span.run2 {
158
- background-color: rgb(178, 209, 255);
159
- display: block;
160
- }
161
- span.run3 {
162
- background-color: rgb(178, 211, 255);
163
- display: block;
164
- }
165
- span.run4 {
166
- background-color: rgb(178, 214, 255);
167
- display: block;
168
- }
169
- span.run5 {
170
- background-color: rgb(178, 218, 255);
171
- display: block;
172
- }
173
- span.run6 {
174
- background-color: rgb(178, 220, 255);
175
- display: block;
176
- }
177
- span.run7 {
178
- background-color: rgb(178, 223, 255);
179
- display: block;
180
- }
181
- span.run8 {
182
- background-color: rgb(178, 225, 255);
183
- display: block;
184
- }
185
- span.run9 {
186
- background-color: rgb(178, 228, 255);
187
- display: block;
188
- }
189
- span.run10 {
190
- background-color: rgb(178, 232, 255);
191
- display: block;
192
- }
193
- span.run11 {
194
- background-color: rgb(178, 234, 255);
195
- display: block;
196
- }
197
- span.run12 {
198
- background-color: rgb(178, 237, 255);
199
- display: block;
200
- }
201
- span.run13 {
202
- background-color: rgb(178, 239, 255);
203
- display: block;
204
- }
205
- span.run14 {
206
- background-color: rgb(178, 242, 255);
207
- display: block;
208
- }
209
- span.run15 {
210
- background-color: rgb(178, 246, 255);
211
- display: block;
212
- }
213
- span.run16 {
214
- background-color: rgb(178, 248, 255);
215
- display: block;
216
- }
217
- span.run17 {
218
- background-color: rgb(178, 251, 255);
219
- display: block;
220
- }
221
- span.run18 {
222
- background-color: rgb(178, 253, 255);
223
- display: block;
224
- }
225
- span.run19 {
226
- background-color: rgb(178, 255, 253);
227
- display: block;
228
- }
229
- span.run20 {
230
- background-color: rgb(178, 255, 249);
231
- display: block;
232
- }
233
- span.run21 {
234
- background-color: rgb(178, 255, 247);
235
- display: block;
236
- }
237
- span.run22 {
238
- background-color: rgb(178, 255, 244);
239
- display: block;
240
- }
241
- span.run23 {
242
- background-color: rgb(178, 255, 242);
243
- display: block;
244
- }
245
- span.run24 {
246
- background-color: rgb(178, 255, 239);
247
- display: block;
248
- }
249
- span.run25 {
250
- background-color: rgb(178, 255, 235);
251
- display: block;
252
- }
253
- span.run26 {
254
- background-color: rgb(178, 255, 233);
255
- display: block;
256
- }
257
- span.run27 {
258
- background-color: rgb(178, 255, 230);
259
- display: block;
260
- }
261
- span.run28 {
262
- background-color: rgb(178, 255, 228);
263
- display: block;
264
- }
265
- span.run29 {
266
- background-color: rgb(178, 255, 225);
267
- display: block;
268
- }
269
- span.run30 {
270
- background-color: rgb(178, 255, 221);
271
- display: block;
272
- }
273
- span.run31 {
274
- background-color: rgb(178, 255, 219);
275
- display: block;
276
- }
277
- span.run32 {
278
- background-color: rgb(178, 255, 216);
279
- display: block;
280
- }
281
- span.run33 {
282
- background-color: rgb(178, 255, 214);
283
- display: block;
284
- }
285
- span.run34 {
286
- background-color: rgb(178, 255, 211);
287
- display: block;
288
- }
289
- span.run35 {
290
- background-color: rgb(178, 255, 207);
291
- display: block;
292
- }
293
- span.run36 {
294
- background-color: rgb(178, 255, 205);
295
- display: block;
296
- }
297
- span.run37 {
298
- background-color: rgb(178, 255, 202);
299
- display: block;
300
- }
301
- span.run38 {
302
- background-color: rgb(178, 255, 200);
303
- display: block;
304
- }
305
- span.run39 {
306
- background-color: rgb(178, 255, 197);
307
- display: block;
308
- }
309
- span.run40 {
310
- background-color: rgb(178, 255, 193);
311
- display: block;
312
- }
313
- span.run41 {
314
- background-color: rgb(178, 255, 191);
315
- display: block;
316
- }
317
- span.run42 {
318
- background-color: rgb(178, 255, 188);
319
- display: block;
320
- }
321
- span.run43 {
322
- background-color: rgb(178, 255, 186);
323
- display: block;
324
- }
325
- span.run44 {
326
- background-color: rgb(178, 255, 183);
327
- display: block;
328
- }
329
- span.run45 {
330
- background-color: rgb(178, 255, 179);
331
- display: block;
332
- }
333
- span.run46 {
334
- background-color: rgb(179, 255, 178);
335
- display: block;
336
- }
337
- span.run47 {
338
- background-color: rgb(182, 255, 178);
339
- display: block;
340
- }
341
- span.run48 {
342
- background-color: rgb(184, 255, 178);
343
- display: block;
344
- }
345
- span.run49 {
346
- background-color: rgb(187, 255, 178);
347
- display: block;
348
- }
349
- span.run50 {
350
- background-color: rgb(191, 255, 178);
351
- display: block;
352
- }
353
- span.run51 {
354
- background-color: rgb(193, 255, 178);
355
- display: block;
356
- }
357
- span.run52 {
358
- background-color: rgb(196, 255, 178);
359
- display: block;
360
- }
361
- span.run53 {
362
- background-color: rgb(198, 255, 178);
363
- display: block;
364
- }
365
- span.run54 {
366
- background-color: rgb(201, 255, 178);
367
- display: block;
368
- }
369
- span.run55 {
370
- background-color: rgb(205, 255, 178);
371
- display: block;
372
- }
373
- span.run56 {
374
- background-color: rgb(207, 255, 178);
375
- display: block;
376
- }
377
- span.run57 {
378
- background-color: rgb(210, 255, 178);
379
- display: block;
380
- }
381
- span.run58 {
382
- background-color: rgb(212, 255, 178);
383
- display: block;
384
- }
385
- span.run59 {
386
- background-color: rgb(215, 255, 178);
387
- display: block;
388
- }
389
- span.run60 {
390
- background-color: rgb(219, 255, 178);
391
- display: block;
392
- }
393
- span.run61 {
394
- background-color: rgb(221, 255, 178);
395
- display: block;
396
- }
397
- span.run62 {
398
- background-color: rgb(224, 255, 178);
399
- display: block;
400
- }
401
- span.run63 {
402
- background-color: rgb(226, 255, 178);
403
- display: block;
404
- }
405
- span.run64 {
406
- background-color: rgb(229, 255, 178);
407
- display: block;
408
- }
409
- span.run65 {
410
- background-color: rgb(233, 255, 178);
411
- display: block;
412
- }
413
- span.run66 {
414
- background-color: rgb(235, 255, 178);
415
- display: block;
416
- }
417
- span.run67 {
418
- background-color: rgb(238, 255, 178);
419
- display: block;
420
- }
421
- span.run68 {
422
- background-color: rgb(240, 255, 178);
423
- display: block;
424
- }
425
- span.run69 {
426
- background-color: rgb(243, 255, 178);
427
- display: block;
428
- }
429
- span.run70 {
430
- background-color: rgb(247, 255, 178);
431
- display: block;
432
- }
433
- span.run71 {
434
- background-color: rgb(249, 255, 178);
435
- display: block;
436
- }
437
- span.run72 {
438
- background-color: rgb(252, 255, 178);
439
- display: block;
440
- }
441
- span.run73 {
442
- background-color: rgb(255, 255, 178);
443
- display: block;
444
- }
445
- span.run74 {
446
- background-color: rgb(255, 252, 178);
447
- display: block;
448
- }
449
- span.run75 {
450
- background-color: rgb(255, 248, 178);
451
- display: block;
452
- }
453
- span.run76 {
454
- background-color: rgb(255, 246, 178);
455
- display: block;
456
- }
457
- span.run77 {
458
- background-color: rgb(255, 243, 178);
459
- display: block;
460
- }
461
- span.run78 {
462
- background-color: rgb(255, 240, 178);
463
- display: block;
464
- }
465
- span.run79 {
466
- background-color: rgb(255, 238, 178);
467
- display: block;
468
- }
469
- span.run80 {
470
- background-color: rgb(255, 234, 178);
471
- display: block;
472
- }
473
- span.run81 {
474
- background-color: rgb(255, 232, 178);
475
- display: block;
476
- }
477
- span.run82 {
478
- background-color: rgb(255, 229, 178);
479
- display: block;
480
- }
481
- span.run83 {
482
- background-color: rgb(255, 226, 178);
483
- display: block;
484
- }
485
- span.run84 {
486
- background-color: rgb(255, 224, 178);
487
- display: block;
488
- }
489
- span.run85 {
490
- background-color: rgb(255, 220, 178);
491
- display: block;
492
- }
493
- span.run86 {
494
- background-color: rgb(255, 218, 178);
495
- display: block;
496
- }
497
- span.run87 {
498
- background-color: rgb(255, 215, 178);
499
- display: block;
500
- }
501
- span.run88 {
502
- background-color: rgb(255, 212, 178);
503
- display: block;
504
- }
505
- span.run89 {
506
- background-color: rgb(255, 210, 178);
507
- display: block;
508
- }
509
- span.run90 {
510
- background-color: rgb(255, 206, 178);
511
- display: block;
512
- }
513
- span.run91 {
514
- background-color: rgb(255, 204, 178);
515
- display: block;
516
- }
517
- span.run92 {
518
- background-color: rgb(255, 201, 178);
519
- display: block;
520
- }
521
- span.run93 {
522
- background-color: rgb(255, 198, 178);
523
- display: block;
524
- }
525
- span.run94 {
526
- background-color: rgb(255, 196, 178);
527
- display: block;
528
- }
529
- span.run95 {
530
- background-color: rgb(255, 192, 178);
531
- display: block;
532
- }
533
- span.run96 {
534
- background-color: rgb(255, 189, 178);
535
- display: block;
536
- }
537
- span.run97 {
538
- background-color: rgb(255, 187, 178);
539
- display: block;
540
- }
541
- span.run98 {
542
- background-color: rgb(255, 184, 178);
543
- display: block;
544
- }
545
- span.run99 {
546
- background-color: rgb(255, 182, 178);
547
- display: block;
548
- }
549
- span.run100 {
550
- background-color: rgb(255, 178, 178);
551
- display: block;
552
- }
553
- </style>
554
- </head>
555
- <body><h3>C0 code coverage information</h3>
556
- <p>Generated on Sat Sep 13 07:41:02 +0900 2008 with <a href='http://eigenclass.org/hiki/rcov'>rcov 0.8.1.2</a>
557
- </p>
558
- <hr/>
559
- <pre><span class='marked0'>Code reported as executed by Ruby looks like this...
560
- </span><span class='marked1'>and this: this line is also marked as covered.
561
- </span><span class='inferred0'>Lines considered as run by rcov, but not reported by Ruby, look like this,
562
- </span><span class='inferred1'>and this: these lines were inferred by rcov (using simple heuristics).
563
- </span><span class='uncovered0'>Finally, here&apos;s a line marked as not executed.
564
- </span></pre>
565
- <table class='report'><thead><tr><td class='heading'>Name</td>
566
- <td class='heading'>Total lines</td>
567
- <td class='heading'>Lines of code</td>
568
- <td class='heading'>Total coverage</td>
569
- <td class='heading'>Code coverage</td>
570
- </tr>
571
- </thead>
572
- <tbody><tr class='light'><td><a href='-Library-Ruby-Gems-gems-ipaddr_list-0_0_2-lib-ipaddr_list_rb.html'>/Library/Ruby/Gems/gems/ipaddr_list-0.0.2/lib/ipaddr_list.rb</a>
573
- </td>
574
- <td class='lines_total'><tt>184</tt>
575
- </td>
576
- <td class='lines_code'><tt>138</tt>
577
- </td>
578
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_total'>64.1%</tt>
579
- &nbsp;</td>
580
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='64'/>
581
- <td class='uncovered' width='36'/>
582
- </tr>
583
- </table>
584
- </td>
585
- </tr>
586
- </table>
587
- </td>
588
- <td><table cellspacing='0' cellpadding='0' align='right'><tr><td><tt class='coverage_code'>52.9%</tt>
589
- &nbsp;</td>
590
- <td><table cellspacing='0' class='percent_graph' cellpadding='0' width='100'><tr><td class='covered' width='53'/>
591
- <td class='uncovered' width='47'/>
592
- </tr>
593
- </table>
594
- </td>
595
- </tr>
596
- </table>
597
- </td>
598
- </tr>
599
- </tbody>
600
- </table>
601
- <pre><span class="inferred1"><a name="line1"></a> 1
602
- </span><span class="marked0"><a name="line2"></a> 2 require 'ipaddr'
603
- </span><span class="inferred1"><a name="line3"></a> 3
604
- </span><span class="inferred0"><a name="line4"></a> 4 # taking method from 1.9.0 for comparing IPAddr instance.
605
- </span><span class="marked1"><a name="line5"></a> 5 if RUBY_VERSION &lt; '1.9.0'
606
- </span><span class="marked0"><a name="line6"></a> 6 class IPAddr
607
- </span><span class="inferred1"><a name="line7"></a> 7 # This code come from Ruby 1.9
608
- </span><span class="inferred0"><a name="line8"></a> 8 # Compares the ipaddr with another.
609
- </span><span class="marked1"><a name="line9"></a> 9 def &lt;=&gt;(other)
610
- </span><span class="marked0"><a name="line10"></a> 10 other = coerce_other(other)
611
- </span><span class="inferred1"><a name="line11"></a> 11
612
- </span><span class="marked0"><a name="line12"></a> 12 return nil if other.family != @family
613
- </span><span class="inferred1"><a name="line13"></a> 13
614
- </span><span class="marked0"><a name="line14"></a> 14 return @addr &lt;=&gt; other.to_i
615
- </span><span class="inferred1"><a name="line15"></a> 15 end
616
- </span><span class="marked0"><a name="line16"></a> 16 include Comparable
617
- </span><span class="inferred1"><a name="line17"></a> 17
618
- </span><span class="marked0"><a name="line18"></a> 18 private
619
- </span><span class="inferred1"><a name="line19"></a> 19
620
- </span><span class="marked0"><a name="line20"></a> 20 def coerce_other(other)
621
- </span><span class="marked1"><a name="line21"></a> 21 case other
622
- </span><span class="marked0"><a name="line22"></a> 22 when IPAddr
623
- </span><span class="marked1"><a name="line23"></a> 23 other
624
- </span><span class="uncovered0"><a name="line24"></a> 24 when String
625
- </span><span class="uncovered1"><a name="line25"></a> 25 self.class.new(other)
626
- </span><span class="uncovered0"><a name="line26"></a> 26 else
627
- </span><span class="uncovered1"><a name="line27"></a> 27 self.class.new(other, @family)
628
- </span><span class="uncovered0"><a name="line28"></a> 28 end
629
- </span><span class="marked1"><a name="line29"></a> 29 end
630
- </span><span class="inferred0"><a name="line30"></a> 30 end
631
- </span><span class="inferred1"><a name="line31"></a> 31 end
632
- </span><span class="inferred0"><a name="line32"></a> 32
633
- </span><span class="inferred1"><a name="line33"></a> 33 #
634
- </span><span class="inferred0"><a name="line34"></a> 34 # SYNOPSIS
635
- </span><span class="inferred1"><a name="line35"></a> 35 #
636
- </span><span class="inferred0"><a name="line36"></a> 36 # require 'ipaddr_list'
637
- </span><span class="inferred1"><a name="line37"></a> 37 # list = IPAddrList.new(['192.168.2.3/24', '192.168.0.100/24'], :BinarySearch)
638
- </span><span class="inferred0"><a name="line38"></a> 38 # list.add('192.168.1.100/24')
639
- </span><span class="inferred1"><a name="line39"></a> 39 # list.include?('192.168.0.30') #=&gt; true
640
- </span><span class="inferred0"><a name="line40"></a> 40 #
641
- </span><span class="inferred1"><a name="line41"></a> 41 #
642
- </span><span class="marked0"><a name="line42"></a> 42 class IPAddrList
643
- </span><span class="marked1"><a name="line43"></a> 43 module Algorithm
644
- </span><span class="inferred0"><a name="line44"></a> 44 # base interface for algorithm module. algorithm module should include this.
645
- </span><span class="marked1"><a name="line45"></a> 45 module Lint
646
- </span><span class="inferred0"><a name="line46"></a> 46 # called automatically from IPAddrList#initialize.
647
- </span><span class="inferred1"><a name="line47"></a> 47 # you should implement how save ip address list.
648
- </span><span class="marked0"><a name="line48"></a> 48 def after_init ip_list=[]
649
- </span><span class="uncovered1"><a name="line49"></a> 49 raise NotImprementedError
650
- </span><span class="uncovered0"><a name="line50"></a> 50 end
651
- </span><span class="inferred1"><a name="line51"></a> 51
652
- </span><span class="inferred0"><a name="line52"></a> 52 # abstract method. your should implement adding iterating ip address list.
653
- </span><span class="marked1"><a name="line53"></a> 53 def each &amp;block
654
- </span><span class="uncovered0"><a name="line54"></a> 54 raise NotImprementedError
655
- </span><span class="uncovered1"><a name="line55"></a> 55 end
656
- </span><span class="inferred0"><a name="line56"></a> 56
657
- </span><span class="marked1"><a name="line57"></a> 57 include Enumerable
658
- </span><span class="inferred0"><a name="line58"></a> 58
659
- </span><span class="inferred1"><a name="line59"></a> 59 # abstract method. you should implement adding ip address to ip address list.
660
- </span><span class="marked0"><a name="line60"></a> 60 def add ip
661
- </span><span class="uncovered1"><a name="line61"></a> 61 raise NotImprementedError
662
- </span><span class="uncovered0"><a name="line62"></a> 62 end
663
- </span><span class="uncovered1"><a name="line63"></a> 63 end
664
- </span><span class="inferred0"><a name="line64"></a> 64
665
- </span><span class="inferred1"><a name="line65"></a> 65 # slow and simple. It's for just benchmarking script.
666
- </span><span class="marked0"><a name="line66"></a> 66 module LinearSearch
667
- </span><span class="marked1"><a name="line67"></a> 67 include Lint
668
- </span><span class="inferred0"><a name="line68"></a> 68
669
- </span><span class="marked1"><a name="line69"></a> 69 def after_init ip_list=[]
670
- </span><span class="uncovered0"><a name="line70"></a> 70 @ip_list = ip_list.map {|item|
671
- </span><span class="uncovered1"><a name="line71"></a> 71 if item.kind_of? IPAddr
672
- </span><span class="uncovered0"><a name="line72"></a> 72 item
673
- </span><span class="uncovered1"><a name="line73"></a> 73 else
674
- </span><span class="uncovered0"><a name="line74"></a> 74 IPAddr.new(item.to_s)
675
- </span><span class="uncovered1"><a name="line75"></a> 75 end
676
- </span><span class="uncovered0"><a name="line76"></a> 76 }
677
- </span><span class="uncovered1"><a name="line77"></a> 77 end
678
- </span><span class="inferred0"><a name="line78"></a> 78
679
- </span><span class="marked1"><a name="line79"></a> 79 def add ip
680
- </span><span class="uncovered0"><a name="line80"></a> 80 unless ip.kind_of? IPAddr
681
- </span><span class="uncovered1"><a name="line81"></a> 81 ip = IPAddr.new(ip.to_s)
682
- </span><span class="uncovered0"><a name="line82"></a> 82 end
683
- </span><span class="uncovered1"><a name="line83"></a> 83 @ip_list.push ip
684
- </span><span class="uncovered0"><a name="line84"></a> 84 end
685
- </span><span class="inferred1"><a name="line85"></a> 85
686
- </span><span class="marked0"><a name="line86"></a> 86 $LinearCount = 0
687
- </span><span class="marked1"><a name="line87"></a> 87 def each &amp;block
688
- </span><span class="uncovered0"><a name="line88"></a> 88 @ip_list.each(&amp;block)
689
- </span><span class="uncovered1"><a name="line89"></a> 89 end
690
- </span><span class="inferred0"><a name="line90"></a> 90
691
- </span><span class="marked1"><a name="line91"></a> 91 def include? ip
692
- </span><span class="uncovered0"><a name="line92"></a> 92 if ip.kind_of? IPAddr
693
- </span><span class="uncovered1"><a name="line93"></a> 93 ipaddr = ip
694
- </span><span class="uncovered0"><a name="line94"></a> 94 else
695
- </span><span class="uncovered1"><a name="line95"></a> 95 ipaddr = IPAddr.new(ip)
696
- </span><span class="uncovered0"><a name="line96"></a> 96 end
697
- </span><span class="uncovered1"><a name="line97"></a> 97 @ip_list.any? {|item| item.include? ipaddr }
698
- </span><span class="uncovered0"><a name="line98"></a> 98 end
699
- </span><span class="uncovered1"><a name="line99"></a> 99 end
700
- </span><span class="inferred0"><a name="line100"></a>100
701
- </span><span class="inferred1"><a name="line101"></a>101 # searching ipaddress with binary search.
702
- </span><span class="marked0"><a name="line102"></a>102 module BinarySearch
703
- </span><span class="marked1"><a name="line103"></a>103 include Lint
704
- </span><span class="inferred0"><a name="line104"></a>104
705
- </span><span class="marked1"><a name="line105"></a>105 def after_init ip_list=[]
706
- </span><span class="marked0"><a name="line106"></a>106 @ip_list = ip_list.map {|item|
707
- </span><span class="marked1"><a name="line107"></a>107 if item.kind_of? IPAddr
708
- </span><span class="uncovered0"><a name="line108"></a>108 item
709
- </span><span class="inferred1"><a name="line109"></a>109 else
710
- </span><span class="marked0"><a name="line110"></a>110 IPAddr.new(item.to_s)
711
- </span><span class="inferred1"><a name="line111"></a>111 end
712
- </span><span class="inferred0"><a name="line112"></a>112 }.sort
713
- </span><span class="marked1"><a name="line113"></a>113 end
714
- </span><span class="inferred0"><a name="line114"></a>114
715
- </span><span class="marked1"><a name="line115"></a>115 def add ip
716
- </span><span class="uncovered0"><a name="line116"></a>116 unless ip.kind_of? IPAddr
717
- </span><span class="uncovered1"><a name="line117"></a>117 ip = IPAddr.new(ip.to_s)
718
- </span><span class="uncovered0"><a name="line118"></a>118 end
719
- </span><span class="uncovered1"><a name="line119"></a>119 @ip_list.push(ip)
720
- </span><span class="uncovered0"><a name="line120"></a>120 @ip_list = @ip_list.sort
721
- </span><span class="uncovered1"><a name="line121"></a>121 end
722
- </span><span class="inferred0"><a name="line122"></a>122
723
- </span><span class="marked1"><a name="line123"></a>123 def each &amp;block
724
- </span><span class="uncovered0"><a name="line124"></a>124 @ip_list.each(&amp;block)
725
- </span><span class="uncovered1"><a name="line125"></a>125 self
726
- </span><span class="uncovered0"><a name="line126"></a>126 end
727
- </span><span class="inferred1"><a name="line127"></a>127
728
- </span><span class="marked0"><a name="line128"></a>128 def include? ip
729
- </span><span class="marked1"><a name="line129"></a>129 binary_search ip do |ipaddr, range|
730
- </span><span class="marked0"><a name="line130"></a>130 range.any? {|idx| @ip_list[idx].include? ipaddr }
731
- </span><span class="inferred1"><a name="line131"></a>131 end
732
- </span><span class="marked0"><a name="line132"></a>132 end
733
- </span><span class="inferred1"><a name="line133"></a>133
734
- </span><span class="inferred0"><a name="line134"></a>134 # binary search
735
- </span><span class="inferred1"><a name="line135"></a>135 # SEE ALSO: http://dsas.blog.klab.org/archives/51293334.html
736
- </span><span class="marked0"><a name="line136"></a>136 def binary_search ip, &amp;block
737
- </span><span class="marked1"><a name="line137"></a>137 ipaddr = nil
738
- </span><span class="marked0"><a name="line138"></a>138 if ip.kind_of? IPAddr
739
- </span><span class="marked1"><a name="line139"></a>139 ipaddr = ip
740
- </span><span class="uncovered0"><a name="line140"></a>140 else
741
- </span><span class="uncovered1"><a name="line141"></a>141 ipaddr = IPAddr.new(ip)
742
- </span><span class="uncovered0"><a name="line142"></a>142 end
743
- </span><span class="marked1"><a name="line143"></a>143 min_idx = 0
744
- </span><span class="marked0"><a name="line144"></a>144 max_idx = @ip_list.size - 1
745
- </span><span class="marked1"><a name="line145"></a>145 if @ip_list[max_idx] &lt; ipaddr
746
- </span><span class="marked0"><a name="line146"></a>146 min_idx = max_idx
747
- </span><span class="marked1"><a name="line147"></a>147 elsif @ip_list[min_idx] &gt; ipaddr
748
- </span><span class="marked0"><a name="line148"></a>148 max_idx = min_idx
749
- </span><span class="inferred1"><a name="line149"></a>149 else
750
- </span><span class="marked0"><a name="line150"></a>150 span = max_idx - min_idx
751
- </span><span class="marked1"><a name="line151"></a>151 while ( ( span ) &gt; 7 ) do
752
- </span><span class="uncovered0"><a name="line152"></a>152 middle_idx = span / 2 + min_idx
753
- </span><span class="uncovered1"><a name="line153"></a>153 middle_ip = @ip_list[ middle_idx ]
754
- </span><span class="uncovered0"><a name="line154"></a>154 if ipaddr &gt;= middle_ip
755
- </span><span class="uncovered1"><a name="line155"></a>155 min_idx = middle_idx
756
- </span><span class="uncovered0"><a name="line156"></a>156 else
757
- </span><span class="uncovered1"><a name="line157"></a>157 max_idx = middle_idx
758
- </span><span class="uncovered0"><a name="line158"></a>158 end
759
- </span><span class="uncovered1"><a name="line159"></a>159
760
- </span><span class="uncovered0"><a name="line160"></a>160 span = max_idx - min_idx
761
- </span><span class="uncovered1"><a name="line161"></a>161 end
762
- </span><span class="uncovered0"><a name="line162"></a>162 end
763
- </span><span class="inferred1"><a name="line163"></a>163
764
- </span><span class="marked0"><a name="line164"></a>164 block.call(ipaddr, min_idx..max_idx)
765
- </span><span class="inferred1"><a name="line165"></a>165 end
766
- </span><span class="inferred0"><a name="line166"></a>166 end
767
- </span><span class="inferred1"><a name="line167"></a>167 end
768
- </span><span class="inferred0"><a name="line168"></a>168
769
- </span><span class="marked1"><a name="line169"></a>169 def initialize ip_list, algorithm=IPAddrList::Algorithm::BinarySearch
770
- </span><span class="marked0"><a name="line170"></a>170 unless algorithm.kind_of? Module
771
- </span><span class="uncovered1"><a name="line171"></a>171 algorithm = IPAddrList::Algorithm.const_get(algorithm.to_s)
772
- </span><span class="uncovered0"><a name="line172"></a>172 end
773
- </span><span class="marked1"><a name="line173"></a>173 self.extend(algorithm)
774
- </span><span class="marked0"><a name="line174"></a>174 @algorithm = algorithm
775
- </span><span class="marked1"><a name="line175"></a>175 after_init ip_list
776
- </span><span class="inferred0"><a name="line176"></a>176 end
777
- </span><span class="inferred1"><a name="line177"></a>177 end
778
- </span><span class="inferred0"><a name="line178"></a>178
779
- </span><span class="marked1"><a name="line179"></a>179 if $0 == __FILE__
780
- </span><span class="uncovered0"><a name="line180"></a>180 ip_list = IPAddrList.new(['192.168.2.3/24', '192.168.0.100/24'], :BinarySearch)
781
- </span><span class="uncovered1"><a name="line181"></a>181 ip_list.add('192.168.1.10/24')
782
- </span><span class="uncovered0"><a name="line182"></a>182 p ip_list.include?('192.168.1.1')
783
- </span><span class="uncovered1"><a name="line183"></a>183 p ip_list.include?('192.168.0.100')
784
- </span><span class="uncovered0"><a name="line184"></a>184 end
785
- </span></pre><hr/>
786
- <p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
787
- version 0.8.1.2.</p>
788
- <p><a href='http://validator.w3.org/check/referer'><img src='http://www.w3.org/Icons/valid-xhtml10' height='31' alt='Valid XHTML 1.0!' width='88'/>
789
- </a>
790
- <a href='http://jigsaw.w3.org/css-validator/check/referer'><img src='http://jigsaw.w3.org/css-validator/images/vcss' alt='Valid CSS!' style='border:0;width:88px;height:31px'/>
791
- </a>
792
- </p>
793
- </body>
794
- </html>