blackbox 1.1.2 → 3.1.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.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +25 -0
  3. data/Gemfile +1 -0
  4. data/Guardfile +3 -2
  5. data/Makefile +1 -0
  6. data/README.md +1 -1
  7. data/Rakefile +14 -16
  8. data/blackbox.gemspec +24 -18
  9. data/coverage/.last_run.json +1 -1
  10. data/coverage/.resultset.json +136 -37
  11. data/coverage/.resultset.json.lock +0 -0
  12. data/coverage/assets/0.10.0/application.css +799 -0
  13. data/coverage/assets/0.10.0/application.js +1707 -0
  14. data/coverage/assets/0.10.0/colorbox/border.png +0 -0
  15. data/coverage/assets/0.10.0/colorbox/controls.png +0 -0
  16. data/coverage/assets/0.10.0/colorbox/loading.gif +0 -0
  17. data/coverage/assets/0.10.0/colorbox/loading_background.png +0 -0
  18. data/coverage/assets/0.10.0/favicon_green.png +0 -0
  19. data/coverage/assets/0.10.0/favicon_red.png +0 -0
  20. data/coverage/assets/0.10.0/favicon_yellow.png +0 -0
  21. data/coverage/assets/0.10.0/loading.gif +0 -0
  22. data/coverage/assets/0.10.0/magnify.png +0 -0
  23. data/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  24. data/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  25. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  26. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  27. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  28. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  29. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  30. data/coverage/assets/0.10.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  31. data/coverage/assets/0.10.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
  32. data/coverage/assets/0.10.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  33. data/coverage/assets/0.10.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
  34. data/coverage/assets/0.10.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
  35. data/coverage/assets/0.10.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  36. data/coverage/index.html +1153 -543
  37. data/doc/BB.html +22 -11
  38. data/doc/BB/Crypto.html +30 -34
  39. data/doc/BB/Gem.html +415 -0
  40. data/doc/BB/Hash.html +16 -16
  41. data/doc/BB/Number.html +100 -68
  42. data/doc/BB/String.html +12 -12
  43. data/doc/_index.html +22 -7
  44. data/doc/class_list.html +8 -3
  45. data/doc/css/style.css +2 -1
  46. data/doc/file.README.html +7 -7
  47. data/doc/file_list.html +7 -2
  48. data/doc/frames.html +5 -7
  49. data/doc/index.html +7 -7
  50. data/doc/js/app.js +7 -2
  51. data/doc/js/full_list.js +11 -3
  52. data/doc/method_list.html +25 -38
  53. data/doc/top-level-namespace.html +6 -6
  54. data/lib/blackbox.rb +7 -5
  55. data/lib/blackbox/crypto.rb +8 -10
  56. data/lib/blackbox/gem.rb +82 -0
  57. data/lib/blackbox/hash.rb +5 -5
  58. data/lib/blackbox/number.rb +127 -110
  59. data/lib/blackbox/string.rb +5 -5
  60. data/lib/blackbox/version.rb +2 -1
  61. data/spec/blackbox_spec.rb +1 -1
  62. data/spec/crypto_spec.rb +23 -23
  63. data/spec/gem_spec.rb +48 -0
  64. data/spec/hash_spec.rb +26 -26
  65. data/spec/number_spec.rb +95 -44
  66. data/spec/spec_helper.rb +2 -1
  67. data/spec/string_spec.rb +3 -3
  68. metadata +76 -4
Binary file
Binary file
data/coverage/index.html CHANGED
@@ -3,38 +3,38 @@
3
3
  <head>
4
4
  <title>Code coverage for Blackbox</title>
5
5
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
6
- <script src='./assets/0.7.1/application.js' type='text/javascript'></script>
7
- <link href='./assets/0.7.1/application.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
8
- <link rel="shortcut icon" type="image/png" href="./assets/0.7.1/favicon_green.png" />
9
- <link rel="icon" type="image/png" href="./assets/0.7.1/favicon.png" />
6
+ <script src='./assets/0.10.0/application.js' type='text/javascript'></script>
7
+ <link href='./assets/0.10.0/application.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
8
+ <link rel="shortcut icon" type="image/png" href="./assets/0.10.0/favicon_green.png" />
9
+ <link rel="icon" type="image/png" href="./assets/0.10.0/favicon.png" />
10
10
  </head>
11
11
 
12
12
  <body>
13
13
  <div id="loading">
14
- <img src="./assets/0.7.1/loading.gif" alt="loading"/>
14
+ <img src="./assets/0.10.0/loading.gif" alt="loading"/>
15
15
  </div>
16
16
  <div id="wrapper" style="display:none;">
17
- <div class="timestamp">Generated <abbr class="timeago" title="2015-11-22T18:39:43+01:00">2015-11-22T18:39:43+01:00</abbr></div>
17
+ <div class="timestamp">Generated <abbr class="timeago" title="2016-05-14T21:21:14+02:00">2016-05-14T21:21:14+02:00</abbr></div>
18
18
  <ul class="group_tabs"></ul>
19
19
 
20
20
  <div id="content">
21
21
  <div class="file_list_container" id="AllFiles">
22
22
  <h2>
23
23
  <span class="group_name">All Files</span>
24
- (<span class="covered_percent"><span class="green">95.79%</span></span>
24
+ (<span class="covered_percent"><span class="green">100.0%</span></span>
25
25
  covered at
26
26
  <span class="covered_strength">
27
27
  <span class="green">
28
- 65.07
28
+ 62.74
29
29
  </span>
30
30
  </span> hits/line)
31
31
  </h2>
32
32
  <a name="AllFiles"></a>
33
33
  <div>
34
- <b>4</b> files in total.
35
- <b>95</b> relevant lines.
36
- <span class="green"><b>91</b> lines covered</span> and
37
- <span class="red"><b>4</b> lines missed </span>
34
+ <b>5</b> files in total.
35
+ <b>130</b> relevant lines.
36
+ <span class="green"><b>130</b> lines covered</span> and
37
+ <span class="red"><b>0</b> lines missed </span>
38
38
  </div>
39
39
  <table class="file_list">
40
40
  <thead>
@@ -51,37 +51,47 @@
51
51
  <tbody>
52
52
 
53
53
  <tr>
54
- <td class="strong"><a href="#3eb50c8871134c0eb239d05a74a2c349bacd014c" class="src_link" title="lib/blackbox/crypto.rb">lib/blackbox/crypto.rb</a></td>
54
+ <td class="strong"><a href="#f65d5c5fcad29642ef7df71c31f708bfebe1c731" class="src_link" title="lib/blackbox/crypto.rb">lib/blackbox/crypto.rb</a></td>
55
55
  <td class="green strong">100.0 %</td>
56
- <td>99</td>
57
- <td>32</td>
58
- <td>32</td>
56
+ <td>97</td>
57
+ <td>31</td>
58
+ <td>31</td>
59
59
  <td>0</td>
60
- <td>236.6</td>
60
+ <td>238.4</td>
61
61
  </tr>
62
62
 
63
63
  <tr>
64
- <td class="strong"><a href="#0f28219d887f431000ca3154b089891bcf6218e3" class="src_link" title="lib/blackbox/hash.rb">lib/blackbox/hash.rb</a></td>
64
+ <td class="strong"><a href="#192e300fd7769b750c82567439ee016f85516f3d" class="src_link" title="lib/blackbox/gem.rb">lib/blackbox/gem.rb</a></td>
65
+ <td class="green strong">100.0 %</td>
66
+ <td>82</td>
67
+ <td>29</td>
68
+ <td>29</td>
69
+ <td>0</td>
70
+ <td>2.4</td>
71
+ </tr>
72
+
73
+ <tr>
74
+ <td class="strong"><a href="#636c073a27c86cd147d7b0f717311b3b9eded478" class="src_link" title="lib/blackbox/hash.rb">lib/blackbox/hash.rb</a></td>
65
75
  <td class="green strong">100.0 %</td>
66
76
  <td>49</td>
67
77
  <td>13</td>
68
78
  <td>13</td>
69
79
  <td>0</td>
70
- <td>14.7</td>
80
+ <td>15.6</td>
71
81
  </tr>
72
82
 
73
83
  <tr>
74
- <td class="strong"><a href="#7a135b0407697dbb00ab589a4ca6477d724b7276" class="src_link" title="lib/blackbox/number.rb">lib/blackbox/number.rb</a></td>
75
- <td class="green strong">91.11 %</td>
76
- <td>165</td>
77
- <td>45</td>
78
- <td>41</td>
79
- <td>4</td>
80
- <td>8.0</td>
84
+ <td class="strong"><a href="#09e4da465507022615e91e2292a827cde0e5535c" class="src_link" title="lib/blackbox/number.rb">lib/blackbox/number.rb</a></td>
85
+ <td class="green strong">100.0 %</td>
86
+ <td>182</td>
87
+ <td>52</td>
88
+ <td>52</td>
89
+ <td>0</td>
90
+ <td>9.4</td>
81
91
  </tr>
82
92
 
83
93
  <tr>
84
- <td class="strong"><a href="#b75f047c409859a12a41002ece7dbd0d81dd859d" class="src_link" title="lib/blackbox/string.rb">lib/blackbox/string.rb</a></td>
94
+ <td class="strong"><a href="#1503164dbfa2b2b494fd2100a9b38b04be306a6e" class="src_link" title="lib/blackbox/string.rb">lib/blackbox/string.rb</a></td>
85
95
  <td class="green strong">100.0 %</td>
86
96
  <td>17</td>
87
97
  <td>5</td>
@@ -99,20 +109,20 @@
99
109
  </div>
100
110
 
101
111
  <div id="footer">
102
- Generated by <a href="http://github.com/colszowka/simplecov">simplecov</a> v0.7.1
103
- and simplecov-html v0.7.1<br/>
112
+ Generated by <a href="http://github.com/colszowka/simplecov">simplecov</a> v0.11.2
113
+ and simplecov-html v0.10.0<br/>
104
114
  using RSpec
105
115
  </div>
106
116
 
107
117
  <div class="source_files">
108
118
 
109
- <div class="source_table" id="3eb50c8871134c0eb239d05a74a2c349bacd014c">
119
+ <div class="source_table" id="f65d5c5fcad29642ef7df71c31f708bfebe1c731">
110
120
  <div class="header">
111
121
  <h3>lib/blackbox/crypto.rb</h3>
112
122
  <h4><span class="green">100.0 %</span> covered</h4>
113
123
  <div>
114
- <b>32</b> relevant lines.
115
- <span class="green"><b>32</b> lines covered</span> and
124
+ <b>31</b> relevant lines.
125
+ <span class="green"><b>31</b> lines covered</span> and
116
126
  <span class="red"><b>0</b> lines missed.</span>
117
127
  </div>
118
128
  </div>
@@ -120,611 +130,599 @@
120
130
  <pre>
121
131
  <ol>
122
132
 
123
- <li class="covered" data-hits="1" data-linenumber="1">
133
+ <li class="never" data-hits="" data-linenumber="1">
134
+
135
+
136
+ <code class="ruby"># frozen_string_literal: true</code>
137
+ </li>
138
+
139
+ <li class="covered" data-hits="1" data-linenumber="2">
124
140
  <span class="hits">1</span>
125
141
 
126
142
  <code class="ruby">require &#39;openssl&#39;</code>
127
143
  </li>
128
144
 
129
- <li class="covered" data-hits="1" data-linenumber="2">
145
+ <li class="covered" data-hits="1" data-linenumber="3">
130
146
  <span class="hits">1</span>
131
147
 
132
148
  <code class="ruby">require &#39;base64&#39;</code>
133
149
  </li>
134
150
 
135
- <li class="never" data-hits="" data-linenumber="3">
151
+ <li class="never" data-hits="" data-linenumber="4">
136
152
 
137
153
 
138
154
  <code class="ruby"></code>
139
155
  </li>
140
156
 
141
- <li class="covered" data-hits="1" data-linenumber="4">
157
+ <li class="covered" data-hits="1" data-linenumber="5">
142
158
  <span class="hits">1</span>
143
159
 
144
160
  <code class="ruby">module BB</code>
145
161
  </li>
146
162
 
147
- <li class="never" data-hits="" data-linenumber="5">
163
+ <li class="never" data-hits="" data-linenumber="6">
148
164
 
149
165
 
150
166
  <code class="ruby"> # Crypto utilities.</code>
151
167
  </li>
152
168
 
153
- <li class="covered" data-hits="1" data-linenumber="6">
169
+ <li class="covered" data-hits="1" data-linenumber="7">
154
170
  <span class="hits">1</span>
155
171
 
156
172
  <code class="ruby"> module Crypto</code>
157
173
  </li>
158
174
 
159
- <li class="covered" data-hits="1" data-linenumber="7">
175
+ <li class="covered" data-hits="1" data-linenumber="8">
160
176
  <span class="hits">1</span>
161
177
 
162
178
  <code class="ruby"> class &lt;&lt; self</code>
163
179
  </li>
164
180
 
165
- <li class="never" data-hits="" data-linenumber="8">
181
+ <li class="never" data-hits="" data-linenumber="9">
166
182
 
167
183
 
168
184
  <code class="ruby"> # Encrypt a String.</code>
169
185
  </li>
170
186
 
171
- <li class="never" data-hits="" data-linenumber="9">
187
+ <li class="never" data-hits="" data-linenumber="10">
172
188
 
173
189
 
174
190
  <code class="ruby"> #</code>
175
191
  </li>
176
192
 
177
- <li class="never" data-hits="" data-linenumber="10">
193
+ <li class="never" data-hits="" data-linenumber="11">
178
194
 
179
195
 
180
196
  <code class="ruby"> # @param [String] plaintext Input String (plaintext)</code>
181
197
  </li>
182
198
 
183
- <li class="never" data-hits="" data-linenumber="11">
199
+ <li class="never" data-hits="" data-linenumber="12">
184
200
 
185
201
 
186
202
  <code class="ruby"> # @param [String] key Encryption key</code>
187
203
  </li>
188
204
 
189
- <li class="never" data-hits="" data-linenumber="12">
205
+ <li class="never" data-hits="" data-linenumber="13">
190
206
 
191
207
 
192
208
  <code class="ruby"> # @param [String] cipher_type OpenSSL cipher</code>
193
209
  </li>
194
210
 
195
- <li class="never" data-hits="" data-linenumber="13">
211
+ <li class="never" data-hits="" data-linenumber="14">
196
212
 
197
213
 
198
214
  <code class="ruby"> # @param [String] iv Initialization vector</code>
199
215
  </li>
200
216
 
201
- <li class="never" data-hits="" data-linenumber="14">
217
+ <li class="never" data-hits="" data-linenumber="15">
202
218
 
203
219
 
204
220
  <code class="ruby"> # @return [String] When iv == nil: iv_length+iv+ciphertext</code>
205
221
  </li>
206
222
 
207
- <li class="never" data-hits="" data-linenumber="15">
223
+ <li class="never" data-hits="" data-linenumber="16">
208
224
 
209
225
 
210
226
  <code class="ruby"> # @return [String] When iv != nil: ciphertext</code>
211
227
  </li>
212
228
 
213
- <li class="covered" data-hits="1" data-linenumber="16">
229
+ <li class="covered" data-hits="1" data-linenumber="17">
214
230
  <span class="hits">1</span>
215
231
 
216
- <code class="ruby"> def encrypt(plaintext, key, cipher_type=&#39;aes-256-cbc&#39;, iv=nil)</code>
232
+ <code class="ruby"> def encrypt(plaintext, key, cipher_type = &#39;aes-256-cbc&#39;, iv = nil)</code>
217
233
  </li>
218
234
 
219
- <li class="covered" data-hits="697" data-linenumber="17">
235
+ <li class="covered" data-hits="697" data-linenumber="18">
220
236
  <span class="hits">697</span>
221
237
 
222
238
  <code class="ruby"> cipher = OpenSSL::Cipher::Cipher.new(cipher_type)</code>
223
239
  </li>
224
240
 
225
- <li class="covered" data-hits="697" data-linenumber="18">
241
+ <li class="covered" data-hits="697" data-linenumber="19">
226
242
  <span class="hits">697</span>
227
243
 
228
244
  <code class="ruby"> cipher.encrypt</code>
229
245
  </li>
230
246
 
231
- <li class="covered" data-hits="697" data-linenumber="19">
247
+ <li class="covered" data-hits="697" data-linenumber="20">
232
248
  <span class="hits">697</span>
233
249
 
234
250
  <code class="ruby"> cipher.key = key</code>
235
251
  </li>
236
252
 
237
- <li class="covered" data-hits="697" data-linenumber="20">
253
+ <li class="covered" data-hits="697" data-linenumber="21">
238
254
  <span class="hits">697</span>
239
255
 
240
256
  <code class="ruby"> if iv.nil?</code>
241
257
  </li>
242
258
 
243
- <li class="covered" data-hits="328" data-linenumber="21">
259
+ <li class="covered" data-hits="328" data-linenumber="22">
244
260
  <span class="hits">328</span>
245
261
 
246
262
  <code class="ruby"> iv = cipher.random_iv</code>
247
263
  </li>
248
264
 
249
- <li class="covered" data-hits="328" data-linenumber="22">
265
+ <li class="covered" data-hits="328" data-linenumber="23">
250
266
  <span class="hits">328</span>
251
267
 
252
268
  <code class="ruby"> [iv.length].pack(&#39;C&#39;) + iv + cipher.update(plaintext) + cipher.final</code>
253
269
  </li>
254
270
 
255
- <li class="never" data-hits="" data-linenumber="23">
271
+ <li class="never" data-hits="" data-linenumber="24">
256
272
 
257
273
 
258
274
  <code class="ruby"> else</code>
259
275
  </li>
260
276
 
261
- <li class="covered" data-hits="369" data-linenumber="24">
277
+ <li class="covered" data-hits="369" data-linenumber="25">
262
278
  <span class="hits">369</span>
263
279
 
264
280
  <code class="ruby"> cipher.iv = iv</code>
265
281
  </li>
266
282
 
267
- <li class="covered" data-hits="369" data-linenumber="25">
283
+ <li class="covered" data-hits="369" data-linenumber="26">
268
284
  <span class="hits">369</span>
269
285
 
270
286
  <code class="ruby"> cipher.update(plaintext) + cipher.final</code>
271
287
  </li>
272
288
 
273
- <li class="never" data-hits="" data-linenumber="26">
289
+ <li class="never" data-hits="" data-linenumber="27">
274
290
 
275
291
 
276
292
  <code class="ruby"> end</code>
277
293
  </li>
278
294
 
279
- <li class="never" data-hits="" data-linenumber="27">
295
+ <li class="never" data-hits="" data-linenumber="28">
280
296
 
281
297
 
282
298
  <code class="ruby"> end</code>
283
299
  </li>
284
300
 
285
- <li class="never" data-hits="" data-linenumber="28">
301
+ <li class="never" data-hits="" data-linenumber="29">
286
302
 
287
303
 
288
304
  <code class="ruby"></code>
289
305
  </li>
290
306
 
291
- <li class="never" data-hits="" data-linenumber="29">
307
+ <li class="never" data-hits="" data-linenumber="30">
292
308
 
293
309
 
294
310
  <code class="ruby"> # Decrypt a String.</code>
295
311
  </li>
296
312
 
297
- <li class="never" data-hits="" data-linenumber="30">
313
+ <li class="never" data-hits="" data-linenumber="31">
298
314
 
299
315
 
300
316
  <code class="ruby"> #</code>
301
317
  </li>
302
318
 
303
- <li class="never" data-hits="" data-linenumber="31">
319
+ <li class="never" data-hits="" data-linenumber="32">
304
320
 
305
321
 
306
322
  <code class="ruby"> # @param [String] ciphertext Input String (ciphertext)</code>
307
323
  </li>
308
324
 
309
- <li class="never" data-hits="" data-linenumber="32">
325
+ <li class="never" data-hits="" data-linenumber="33">
310
326
 
311
327
 
312
328
  <code class="ruby"> # @param [String] key Encryption key</code>
313
329
  </li>
314
330
 
315
- <li class="never" data-hits="" data-linenumber="33">
331
+ <li class="never" data-hits="" data-linenumber="34">
316
332
 
317
333
 
318
334
  <code class="ruby"> # @param [String] cipher_type OpenSSL cipher</code>
319
335
  </li>
320
336
 
321
- <li class="never" data-hits="" data-linenumber="34">
337
+ <li class="never" data-hits="" data-linenumber="35">
322
338
 
323
339
 
324
340
  <code class="ruby"> # @param [String] iv Initialization vector</code>
325
341
  </li>
326
342
 
327
- <li class="never" data-hits="" data-linenumber="35">
343
+ <li class="never" data-hits="" data-linenumber="36">
328
344
 
329
345
 
330
346
  <code class="ruby"> # @return [String] Plaintext</code>
331
347
  </li>
332
348
 
333
- <li class="covered" data-hits="1" data-linenumber="36">
349
+ <li class="covered" data-hits="1" data-linenumber="37">
334
350
  <span class="hits">1</span>
335
351
 
336
- <code class="ruby"> def decrypt(ciphertext, key, cipher_type=&#39;aes-256-cbc&#39;, iv=nil)</code>
352
+ <code class="ruby"> def decrypt(ciphertext, key, cipher_type = &#39;aes-256-cbc&#39;, iv = nil)</code>
337
353
  </li>
338
354
 
339
- <li class="covered" data-hits="369" data-linenumber="37">
355
+ <li class="covered" data-hits="369" data-linenumber="38">
340
356
  <span class="hits">369</span>
341
357
 
342
358
  <code class="ruby"> cipher = OpenSSL::Cipher::Cipher.new(cipher_type)</code>
343
359
  </li>
344
360
 
345
- <li class="covered" data-hits="369" data-linenumber="38">
361
+ <li class="covered" data-hits="369" data-linenumber="39">
346
362
  <span class="hits">369</span>
347
363
 
348
364
  <code class="ruby"> cipher.decrypt</code>
349
365
  </li>
350
366
 
351
- <li class="covered" data-hits="369" data-linenumber="39">
367
+ <li class="covered" data-hits="369" data-linenumber="40">
352
368
  <span class="hits">369</span>
353
369
 
354
370
  <code class="ruby"> cipher.key = key</code>
355
371
  </li>
356
372
 
357
- <li class="covered" data-hits="369" data-linenumber="40">
373
+ <li class="covered" data-hits="369" data-linenumber="41">
358
374
  <span class="hits">369</span>
359
375
 
360
376
  <code class="ruby"> if iv.nil?</code>
361
377
  </li>
362
378
 
363
- <li class="covered" data-hits="246" data-linenumber="41">
379
+ <li class="covered" data-hits="246" data-linenumber="42">
364
380
  <span class="hits">246</span>
365
381
 
366
382
  <code class="ruby"> iv_len = ciphertext.slice!(0).unpack(&#39;C&#39;)[0]</code>
367
383
  </li>
368
384
 
369
- <li class="covered" data-hits="246" data-linenumber="42">
385
+ <li class="covered" data-hits="246" data-linenumber="43">
370
386
  <span class="hits">246</span>
371
387
 
372
- <code class="ruby"> unless 0 == iv_len</code>
373
- </li>
374
-
375
- <li class="covered" data-hits="180" data-linenumber="43">
376
- <span class="hits">180</span>
377
-
378
- <code class="ruby"> cipher.iv = ciphertext.slice!(0..iv_len-1)</code>
388
+ <code class="ruby"> cipher.iv = ciphertext.slice!(0..iv_len - 1) unless 0 == iv_len</code>
379
389
  </li>
380
390
 
381
391
  <li class="never" data-hits="" data-linenumber="44">
382
392
 
383
393
 
384
- <code class="ruby"> end</code>
385
- </li>
386
-
387
- <li class="never" data-hits="" data-linenumber="45">
388
-
389
-
390
394
  <code class="ruby"> else</code>
391
395
  </li>
392
396
 
393
- <li class="covered" data-hits="123" data-linenumber="46">
397
+ <li class="covered" data-hits="123" data-linenumber="45">
394
398
  <span class="hits">123</span>
395
399
 
396
400
  <code class="ruby"> cipher.iv = iv</code>
397
401
  </li>
398
402
 
399
- <li class="never" data-hits="" data-linenumber="47">
403
+ <li class="never" data-hits="" data-linenumber="46">
400
404
 
401
405
 
402
406
  <code class="ruby"> end</code>
403
407
  </li>
404
408
 
405
- <li class="covered" data-hits="369" data-linenumber="48">
409
+ <li class="covered" data-hits="369" data-linenumber="47">
406
410
  <span class="hits">369</span>
407
411
 
408
412
  <code class="ruby"> cipher.update(ciphertext) + cipher.final</code>
409
413
  </li>
410
414
 
411
- <li class="never" data-hits="" data-linenumber="49">
415
+ <li class="never" data-hits="" data-linenumber="48">
412
416
 
413
417
 
414
418
  <code class="ruby"> end</code>
415
419
  </li>
416
420
 
417
- <li class="never" data-hits="" data-linenumber="50">
421
+ <li class="never" data-hits="" data-linenumber="49">
418
422
 
419
423
 
420
424
  <code class="ruby"></code>
421
425
  </li>
422
426
 
423
- <li class="never" data-hits="" data-linenumber="51">
427
+ <li class="never" data-hits="" data-linenumber="50">
424
428
 
425
429
 
426
430
  <code class="ruby"> # Encrypt a String and encode the resulting ciphertext to Base64.</code>
427
431
  </li>
428
432
 
429
- <li class="never" data-hits="" data-linenumber="52">
433
+ <li class="never" data-hits="" data-linenumber="51">
430
434
 
431
435
 
432
436
  <code class="ruby"> #</code>
433
437
  </li>
434
438
 
435
- <li class="never" data-hits="" data-linenumber="53">
439
+ <li class="never" data-hits="" data-linenumber="52">
436
440
 
437
441
 
438
442
  <code class="ruby"> # @param [String] plaintext Input String (plaintext)</code>
439
443
  </li>
440
444
 
441
- <li class="never" data-hits="" data-linenumber="54">
445
+ <li class="never" data-hits="" data-linenumber="53">
442
446
 
443
447
 
444
448
  <code class="ruby"> # @param [String] key Encryption key</code>
445
449
  </li>
446
450
 
447
- <li class="never" data-hits="" data-linenumber="55">
451
+ <li class="never" data-hits="" data-linenumber="54">
448
452
 
449
453
 
450
454
  <code class="ruby"> # @param [String] cipher_type OpenSSL cipher</code>
451
455
  </li>
452
456
 
453
- <li class="never" data-hits="" data-linenumber="56">
457
+ <li class="never" data-hits="" data-linenumber="55">
454
458
 
455
459
 
456
460
  <code class="ruby"> # @param [String] iv Initialization vector</code>
457
461
  </li>
458
462
 
459
- <li class="never" data-hits="" data-linenumber="57">
463
+ <li class="never" data-hits="" data-linenumber="56">
460
464
 
461
465
 
462
466
  <code class="ruby"> # @return [String] When iv == nil: base64(iv_length+iv+ciphertext)</code>
463
467
  </li>
464
468
 
465
- <li class="never" data-hits="" data-linenumber="58">
469
+ <li class="never" data-hits="" data-linenumber="57">
466
470
 
467
471
 
468
472
  <code class="ruby"> # @return [String] When iv != nil: base64(ciphertext)</code>
469
473
  </li>
470
474
 
471
- <li class="covered" data-hits="1" data-linenumber="59">
475
+ <li class="covered" data-hits="1" data-linenumber="58">
472
476
  <span class="hits">1</span>
473
477
 
474
- <code class="ruby"> def encrypt_base64(plaintext, key, cipher_type=&#39;aes-256-cbc&#39;, iv=nil)</code>
478
+ <code class="ruby"> def encrypt_base64(plaintext, key, cipher_type = &#39;aes-256-cbc&#39;, iv = nil)</code>
475
479
  </li>
476
480
 
477
- <li class="covered" data-hits="246" data-linenumber="60">
481
+ <li class="covered" data-hits="246" data-linenumber="59">
478
482
  <span class="hits">246</span>
479
483
 
480
484
  <code class="ruby"> Base64.strict_encode64(encrypt(plaintext, key, cipher_type, iv))</code>
481
485
  </li>
482
486
 
483
- <li class="never" data-hits="" data-linenumber="61">
487
+ <li class="never" data-hits="" data-linenumber="60">
484
488
 
485
489
 
486
490
  <code class="ruby"> end</code>
487
491
  </li>
488
492
 
489
- <li class="never" data-hits="" data-linenumber="62">
493
+ <li class="never" data-hits="" data-linenumber="61">
490
494
 
491
495
 
492
496
  <code class="ruby"></code>
493
497
  </li>
494
498
 
495
- <li class="never" data-hits="" data-linenumber="63">
499
+ <li class="never" data-hits="" data-linenumber="62">
496
500
 
497
501
 
498
502
  <code class="ruby"> # Decode and Decrypt a Base64-String.</code>
499
503
  </li>
500
504
 
501
- <li class="never" data-hits="" data-linenumber="64">
505
+ <li class="never" data-hits="" data-linenumber="63">
502
506
 
503
507
 
504
508
  <code class="ruby"> #</code>
505
509
  </li>
506
510
 
507
- <li class="never" data-hits="" data-linenumber="65">
511
+ <li class="never" data-hits="" data-linenumber="64">
508
512
 
509
513
 
510
514
  <code class="ruby"> # @param [String] ciphertext Input String (base64(ciphertext))</code>
511
515
  </li>
512
516
 
513
- <li class="never" data-hits="" data-linenumber="66">
517
+ <li class="never" data-hits="" data-linenumber="65">
514
518
 
515
519
 
516
520
  <code class="ruby"> # @param [String] key Encryption key</code>
517
521
  </li>
518
522
 
519
- <li class="never" data-hits="" data-linenumber="67">
523
+ <li class="never" data-hits="" data-linenumber="66">
520
524
 
521
525
 
522
526
  <code class="ruby"> # @param [String] cipher_type OpenSSL cipher</code>
523
527
  </li>
524
528
 
525
- <li class="never" data-hits="" data-linenumber="68">
529
+ <li class="never" data-hits="" data-linenumber="67">
526
530
 
527
531
 
528
532
  <code class="ruby"> # @param [String] iv Initialization vector</code>
529
533
  </li>
530
534
 
531
- <li class="never" data-hits="" data-linenumber="69">
535
+ <li class="never" data-hits="" data-linenumber="68">
532
536
 
533
537
 
534
538
  <code class="ruby"> # @return [String] Plaintext</code>
535
539
  </li>
536
540
 
537
- <li class="covered" data-hits="1" data-linenumber="70">
541
+ <li class="covered" data-hits="1" data-linenumber="69">
538
542
  <span class="hits">1</span>
539
543
 
540
- <code class="ruby"> def decrypt_base64(ciphertext, key, cipher_type=&#39;aes-256-cbc&#39;, iv=nil)</code>
544
+ <code class="ruby"> def decrypt_base64(ciphertext, key, cipher_type = &#39;aes-256-cbc&#39;, iv = nil)</code>
541
545
  </li>
542
546
 
543
- <li class="covered" data-hits="123" data-linenumber="71">
547
+ <li class="covered" data-hits="123" data-linenumber="70">
544
548
  <span class="hits">123</span>
545
549
 
546
550
  <code class="ruby"> decrypt(Base64.decode64(ciphertext), key, cipher_type, iv)</code>
547
551
  </li>
548
552
 
549
- <li class="never" data-hits="" data-linenumber="72">
553
+ <li class="never" data-hits="" data-linenumber="71">
550
554
 
551
555
 
552
556
  <code class="ruby"> end</code>
553
557
  </li>
554
558
 
555
- <li class="never" data-hits="" data-linenumber="73">
559
+ <li class="never" data-hits="" data-linenumber="72">
556
560
 
557
561
 
558
562
  <code class="ruby"></code>
559
563
  </li>
560
564
 
561
- <li class="never" data-hits="" data-linenumber="74">
565
+ <li class="never" data-hits="" data-linenumber="73">
562
566
 
563
567
 
564
568
  <code class="ruby"> # Encrypt a String and encode the resulting ciphertext to urlsafe Base64.</code>
565
569
  </li>
566
570
 
567
- <li class="never" data-hits="" data-linenumber="75">
571
+ <li class="never" data-hits="" data-linenumber="74">
568
572
 
569
573
 
570
574
  <code class="ruby"> #</code>
571
575
  </li>
572
576
 
573
- <li class="never" data-hits="" data-linenumber="76">
577
+ <li class="never" data-hits="" data-linenumber="75">
574
578
 
575
579
 
576
580
  <code class="ruby"> # @param [String] plaintext Input String (plaintext)</code>
577
581
  </li>
578
582
 
579
- <li class="never" data-hits="" data-linenumber="77">
583
+ <li class="never" data-hits="" data-linenumber="76">
580
584
 
581
585
 
582
586
  <code class="ruby"> # @param [String] key Encryption key</code>
583
587
  </li>
584
588
 
585
- <li class="never" data-hits="" data-linenumber="78">
589
+ <li class="never" data-hits="" data-linenumber="77">
586
590
 
587
591
 
588
592
  <code class="ruby"> # @param [String] cipher_type OpenSSL cipher</code>
589
593
  </li>
590
594
 
591
- <li class="never" data-hits="" data-linenumber="79">
595
+ <li class="never" data-hits="" data-linenumber="78">
592
596
 
593
597
 
594
598
  <code class="ruby"> # @param [String] iv Initialization vector</code>
595
599
  </li>
596
600
 
597
- <li class="never" data-hits="" data-linenumber="80">
601
+ <li class="never" data-hits="" data-linenumber="79">
598
602
 
599
603
 
600
604
  <code class="ruby"> # @return [String] When iv == nil: urlsafe_base64(iv_length+iv+ciphertext)</code>
601
605
  </li>
602
606
 
603
- <li class="never" data-hits="" data-linenumber="81">
607
+ <li class="never" data-hits="" data-linenumber="80">
604
608
 
605
609
 
606
610
  <code class="ruby"> # @return [String] When iv != nil: urlsafe_base64(ciphertext)</code>
607
611
  </li>
608
612
 
609
- <li class="covered" data-hits="1" data-linenumber="82">
613
+ <li class="covered" data-hits="1" data-linenumber="81">
610
614
  <span class="hits">1</span>
611
615
 
612
- <code class="ruby"> def encrypt_urlsafe_base64(plaintext, key, cipher_type=&#39;aes-256-cbc&#39;, iv=nil)</code>
616
+ <code class="ruby"> def encrypt_urlsafe_base64(plaintext, key, cipher_type = &#39;aes-256-cbc&#39;, iv = nil)</code>
613
617
  </li>
614
618
 
615
- <li class="covered" data-hits="246" data-linenumber="83">
619
+ <li class="covered" data-hits="246" data-linenumber="82">
616
620
  <span class="hits">246</span>
617
621
 
618
622
  <code class="ruby"> Base64.urlsafe_encode64(encrypt(plaintext, key, cipher_type, iv))</code>
619
623
  </li>
620
624
 
621
- <li class="never" data-hits="" data-linenumber="84">
625
+ <li class="never" data-hits="" data-linenumber="83">
622
626
 
623
627
 
624
628
  <code class="ruby"> end</code>
625
629
  </li>
626
630
 
627
- <li class="never" data-hits="" data-linenumber="85">
631
+ <li class="never" data-hits="" data-linenumber="84">
628
632
 
629
633
 
630
634
  <code class="ruby"></code>
631
635
  </li>
632
636
 
633
- <li class="never" data-hits="" data-linenumber="86">
637
+ <li class="never" data-hits="" data-linenumber="85">
634
638
 
635
639
 
636
640
  <code class="ruby"> # Decode and Decrypt an urlsafe Base64-String.</code>
637
641
  </li>
638
642
 
639
- <li class="never" data-hits="" data-linenumber="87">
643
+ <li class="never" data-hits="" data-linenumber="86">
640
644
 
641
645
 
642
646
  <code class="ruby"> #</code>
643
647
  </li>
644
648
 
645
- <li class="never" data-hits="" data-linenumber="88">
649
+ <li class="never" data-hits="" data-linenumber="87">
646
650
 
647
651
 
648
652
  <code class="ruby"> # @param [String] ciphertext Input String (urlsafe_base64(ciphertext))</code>
649
653
  </li>
650
654
 
651
- <li class="never" data-hits="" data-linenumber="89">
655
+ <li class="never" data-hits="" data-linenumber="88">
652
656
 
653
657
 
654
658
  <code class="ruby"> # @param [String] key Encryption key</code>
655
659
  </li>
656
660
 
657
- <li class="never" data-hits="" data-linenumber="90">
661
+ <li class="never" data-hits="" data-linenumber="89">
658
662
 
659
663
 
660
664
  <code class="ruby"> # @param [String] cipher_type OpenSSL cipher</code>
661
665
  </li>
662
666
 
663
- <li class="never" data-hits="" data-linenumber="91">
667
+ <li class="never" data-hits="" data-linenumber="90">
664
668
 
665
669
 
666
670
  <code class="ruby"> # @param [String] iv Initialization vector</code>
667
671
  </li>
668
672
 
669
- <li class="never" data-hits="" data-linenumber="92">
673
+ <li class="never" data-hits="" data-linenumber="91">
670
674
 
671
675
 
672
676
  <code class="ruby"> # @return [String] Plaintext</code>
673
677
  </li>
674
678
 
675
- <li class="covered" data-hits="1" data-linenumber="93">
679
+ <li class="covered" data-hits="1" data-linenumber="92">
676
680
  <span class="hits">1</span>
677
681
 
678
- <code class="ruby"> def decrypt_urlsafe_base64(ciphertext, key, cipher_type=&#39;aes-256-cbc&#39;, iv=nil)</code>
682
+ <code class="ruby"> def decrypt_urlsafe_base64(ciphertext, key, cipher_type = &#39;aes-256-cbc&#39;, iv = nil)</code>
679
683
  </li>
680
684
 
681
- <li class="covered" data-hits="123" data-linenumber="94">
685
+ <li class="covered" data-hits="123" data-linenumber="93">
682
686
  <span class="hits">123</span>
683
687
 
684
688
  <code class="ruby"> decrypt(Base64.urlsafe_decode64(ciphertext), key, cipher_type, iv)</code>
685
689
  </li>
686
690
 
687
- <li class="never" data-hits="" data-linenumber="95">
691
+ <li class="never" data-hits="" data-linenumber="94">
688
692
 
689
693
 
690
694
  <code class="ruby"> end</code>
691
695
  </li>
692
696
 
693
- <li class="never" data-hits="" data-linenumber="96">
697
+ <li class="never" data-hits="" data-linenumber="95">
694
698
 
695
699
 
696
700
  <code class="ruby"> end</code>
697
701
  </li>
698
702
 
699
- <li class="never" data-hits="" data-linenumber="97">
703
+ <li class="never" data-hits="" data-linenumber="96">
700
704
 
701
705
 
702
706
  <code class="ruby"> end</code>
703
707
  </li>
704
708
 
705
- <li class="never" data-hits="" data-linenumber="98">
709
+ <li class="never" data-hits="" data-linenumber="97">
706
710
 
707
711
 
708
712
  <code class="ruby">end</code>
709
713
  </li>
710
714
 
711
- <li class="never" data-hits="" data-linenumber="99">
712
-
713
-
714
- <code class="ruby"></code>
715
- </li>
716
-
717
715
  </ol>
718
716
  </pre>
719
717
  </div>
720
718
 
721
- <div class="source_table" id="0f28219d887f431000ca3154b089891bcf6218e3">
719
+ <div class="source_table" id="192e300fd7769b750c82567439ee016f85516f3d">
722
720
  <div class="header">
723
- <h3>lib/blackbox/hash.rb</h3>
721
+ <h3>lib/blackbox/gem.rb</h3>
724
722
  <h4><span class="green">100.0 %</span> covered</h4>
725
723
  <div>
726
- <b>13</b> relevant lines.
727
- <span class="green"><b>13</b> lines covered</span> and
724
+ <b>29</b> relevant lines.
725
+ <span class="green"><b>29</b> lines covered</span> and
728
726
  <span class="red"><b>0</b> lines missed.</span>
729
727
  </div>
730
728
  </div>
@@ -732,1313 +730,1925 @@
732
730
  <pre>
733
731
  <ol>
734
732
 
735
- <li class="covered" data-hits="1" data-linenumber="1">
733
+ <li class="never" data-hits="" data-linenumber="1">
734
+
735
+
736
+ <code class="ruby"># frozen_string_literal: true</code>
737
+ </li>
738
+
739
+ <li class="covered" data-hits="1" data-linenumber="2">
736
740
  <span class="hits">1</span>
737
741
 
738
742
  <code class="ruby">module BB</code>
739
743
  </li>
740
744
 
741
- <li class="never" data-hits="" data-linenumber="2">
745
+ <li class="never" data-hits="" data-linenumber="3">
742
746
 
743
747
 
744
- <code class="ruby"> # Hash utilities.</code>
748
+ <code class="ruby"> # Gem utilities.</code>
745
749
  </li>
746
750
 
747
- <li class="covered" data-hits="1" data-linenumber="3">
751
+ <li class="covered" data-hits="1" data-linenumber="4">
748
752
  <span class="hits">1</span>
749
753
 
750
- <code class="ruby"> module Hash</code>
754
+ <code class="ruby"> module Gem</code>
751
755
  </li>
752
756
 
753
- <li class="covered" data-hits="1" data-linenumber="4">
757
+ <li class="covered" data-hits="1" data-linenumber="5">
754
758
  <span class="hits">1</span>
755
759
 
756
760
  <code class="ruby"> class &lt;&lt; self</code>
757
761
  </li>
758
762
 
759
- <li class="never" data-hits="" data-linenumber="5">
760
-
761
-
762
- <code class="ruby"> # Symbolize all top level keys.</code>
763
- </li>
764
-
765
763
  <li class="never" data-hits="" data-linenumber="6">
766
764
 
767
765
 
768
- <code class="ruby"> #</code>
766
+ <code class="ruby"> # Return information about the currently installed gem</code>
769
767
  </li>
770
768
 
771
769
  <li class="never" data-hits="" data-linenumber="7">
772
770
 
773
771
 
774
- <code class="ruby"> # @param [Hash] hash Input hash</code>
772
+ <code class="ruby"> # version and the latest available version on rubygems.org.</code>
775
773
  </li>
776
774
 
777
775
  <li class="never" data-hits="" data-linenumber="8">
778
776
 
779
777
 
780
- <code class="ruby"> # @return [Hash] Output hash (with symbolized keys)</code>
778
+ <code class="ruby"> #</code>
781
779
  </li>
782
780
 
783
- <li class="covered" data-hits="1" data-linenumber="9">
784
- <span class="hits">1</span>
781
+ <li class="never" data-hits="" data-linenumber="9">
785
782
 
786
- <code class="ruby"> def symbolize_keys(hash)</code>
783
+
784
+ <code class="ruby"> # @param [Hash] opts the options to create a message with.</code>
787
785
  </li>
788
786
 
789
- <li class="covered" data-hits="100" data-linenumber="10">
790
- <span class="hits">100</span>
787
+ <li class="never" data-hits="" data-linenumber="10">
788
+
791
789
 
792
- <code class="ruby"> hash.each_with_object({}){|(k,v), h| h[k.to_sym] = v}</code>
790
+ <code class="ruby"> # @option opts [Fixnum] :check_interval how frequently to query rubygems.org (default: 3600)</code>
793
791
  </li>
794
792
 
795
793
  <li class="never" data-hits="" data-linenumber="11">
796
794
 
797
795
 
798
- <code class="ruby"> end</code>
796
+ <code class="ruby"> # @option opts [String] :disabling_env_var (default: #{GEMNAME}_DISABLE_VERSION_CHECK)</code>
799
797
  </li>
800
798
 
801
799
  <li class="never" data-hits="" data-linenumber="12">
802
800
 
803
801
 
804
- <code class="ruby"></code>
802
+ <code class="ruby"> # @option opts [] :from (&#39;nobody&#39;) From address</code>
805
803
  </li>
806
804
 
807
805
  <li class="never" data-hits="" data-linenumber="13">
808
806
 
809
807
 
810
- <code class="ruby"> # Recursively flatten a hash to property-style format.</code>
808
+ <code class="ruby"> # @return [Hash] result</code>
811
809
  </li>
812
810
 
813
811
  <li class="never" data-hits="" data-linenumber="14">
814
812
 
815
813
 
816
- <code class="ruby"> # This is a lossy conversion and should only be used for display-purposes.</code>
814
+ <code class="ruby"> # * :gem_name =&gt; name of current gem</code>
817
815
  </li>
818
816
 
819
817
  <li class="never" data-hits="" data-linenumber="15">
820
818
 
821
819
 
822
- <code class="ruby"> #</code>
820
+ <code class="ruby"> # * :gem_installed_version =&gt; installed version</code>
823
821
  </li>
824
822
 
825
823
  <li class="never" data-hits="" data-linenumber="16">
826
824
 
827
825
 
828
- <code class="ruby"> # @example</code>
826
+ <code class="ruby"> # * :gem_latest_version =&gt; latest version on rubygems.org</code>
829
827
  </li>
830
828
 
831
829
  <li class="never" data-hits="" data-linenumber="17">
832
830
 
833
831
 
834
- <code class="ruby"> # input = { :a =&gt; { :b =&gt; :c } }</code>
832
+ <code class="ruby"> # * :last_checked_for_update =&gt; timestamp of last query to rubygems.org</code>
835
833
  </li>
836
834
 
837
835
  <li class="never" data-hits="" data-linenumber="18">
838
836
 
839
837
 
840
- <code class="ruby"> # BB::Hash.flatten_prop_style(input)</code>
838
+ <code class="ruby"> # * :next_check_for_update =&gt; timestamp of next query to rubygems.org</code>
841
839
  </li>
842
840
 
843
841
  <li class="never" data-hits="" data-linenumber="19">
844
842
 
845
843
 
846
- <code class="ruby"> # =&gt; {&quot;a.b&quot;=&gt;:c}</code>
844
+ <code class="ruby"> # * :gem_update_available =&gt; update available?</code>
847
845
  </li>
848
846
 
849
847
  <li class="never" data-hits="" data-linenumber="20">
850
848
 
851
849
 
852
- <code class="ruby"> #</code>
850
+ <code class="ruby"> # * :installed_is_latest =&gt; is installed version == latest available version?</code>
853
851
  </li>
854
852
 
855
- <li class="never" data-hits="" data-linenumber="21">
856
-
853
+ <li class="covered" data-hits="1" data-linenumber="21">
854
+ <span class="hits">1</span>
857
855
 
858
- <code class="ruby"> # @example</code>
856
+ <code class="ruby"> def version_info(*_, **opts)</code>
859
857
  </li>
860
858
 
861
- <li class="never" data-hits="" data-linenumber="22">
862
-
859
+ <li class="covered" data-hits="3" data-linenumber="22">
860
+ <span class="hits">3</span>
863
861
 
864
- <code class="ruby"> # input = { :a =&gt; { :b =&gt; [:c, :d, :e] } }</code>
862
+ <code class="ruby"> ret = {</code>
865
863
  </li>
866
864
 
867
865
  <li class="never" data-hits="" data-linenumber="23">
868
866
 
869
867
 
870
- <code class="ruby"> # BB::Hash.flatten_prop_style(input)</code>
868
+ <code class="ruby"> gem_name: :unknown,</code>
871
869
  </li>
872
870
 
873
871
  <li class="never" data-hits="" data-linenumber="24">
874
872
 
875
873
 
876
- <code class="ruby"> # =&gt; {&quot;a.b&quot;=&gt;&quot;c,d,e&quot;}</code>
874
+ <code class="ruby"> gem_installed_version: :unknown,</code>
877
875
  </li>
878
876
 
879
877
  <li class="never" data-hits="" data-linenumber="25">
880
878
 
881
879
 
882
- <code class="ruby"> #</code>
880
+ <code class="ruby"> gem_latest_version: :unknown,</code>
883
881
  </li>
884
882
 
885
883
  <li class="never" data-hits="" data-linenumber="26">
886
884
 
887
885
 
888
- <code class="ruby"> # @param [Hash] input Input hash</code>
886
+ <code class="ruby"> gem_update_available: false,</code>
889
887
  </li>
890
888
 
891
889
  <li class="never" data-hits="" data-linenumber="27">
892
890
 
893
891
 
894
- <code class="ruby"> # @param [Hash] opts Options</code>
892
+ <code class="ruby"> last_checked_for_update: :unknown,</code>
895
893
  </li>
896
894
 
897
895
  <li class="never" data-hits="" data-linenumber="28">
898
896
 
899
897
 
900
- <code class="ruby"> # @option opts [String] :delimiter</code>
898
+ <code class="ruby"> next_check_for_update: :unknown,</code>
901
899
  </li>
902
900
 
903
901
  <li class="never" data-hits="" data-linenumber="29">
904
902
 
905
903
 
906
- <code class="ruby"> # Key delimiter (Default: &#39;.&#39;)</code>
904
+ <code class="ruby"> installed_is_latest: true</code>
907
905
  </li>
908
906
 
909
907
  <li class="never" data-hits="" data-linenumber="30">
910
908
 
911
909
 
912
- <code class="ruby"> # @param [Hash] output (leave this blank)</code>
910
+ <code class="ruby"> }</code>
913
911
  </li>
914
912
 
915
913
  <li class="never" data-hits="" data-linenumber="31">
916
914
 
917
915
 
918
- <code class="ruby"> # @return [Hash] Output hash (flattened)</code>
916
+ <code class="ruby"></code>
919
917
  </li>
920
918
 
921
- <li class="covered" data-hits="1" data-linenumber="32">
922
- <span class="hits">1</span>
919
+ <li class="covered" data-hits="3" data-linenumber="32">
920
+ <span class="hits">3</span>
923
921
 
924
- <code class="ruby"> def flatten_prop_style(input={}, opts={}, output={})</code>
922
+ <code class="ruby"> spec = ::Gem::Specification.find do |s|</code>
925
923
  </li>
926
924
 
927
- <li class="covered" data-hits="10" data-linenumber="33">
928
- <span class="hits">10</span>
925
+ <li class="covered" data-hits="12" data-linenumber="33">
926
+ <span class="hits">12</span>
929
927
 
930
- <code class="ruby"> input.each do |key, value|</code>
928
+ <code class="ruby"> File.fnmatch(File.join(s.full_gem_path, &#39;*&#39;), __FILE__)</code>
931
929
  </li>
932
930
 
933
- <li class="covered" data-hits="22" data-linenumber="34">
934
- <span class="hits">22</span>
931
+ <li class="never" data-hits="" data-linenumber="34">
932
+
935
933
 
936
- <code class="ruby"> key = opts[:prefix].nil? ? &quot;#{key}&quot; : &quot;#{opts[:prefix]}#{opts[:delimiter]||&#39;.&#39;}#{key}&quot;</code>
934
+ <code class="ruby"> end</code>
937
935
  </li>
938
936
 
939
- <li class="covered" data-hits="22" data-linenumber="35">
940
- <span class="hits">22</span>
937
+ <li class="never" data-hits="" data-linenumber="35">
941
938
 
942
- <code class="ruby"> case value</code>
939
+
940
+ <code class="ruby"></code>
943
941
  </li>
944
942
 
945
- <li class="never" data-hits="" data-linenumber="36">
943
+ <li class="covered" data-hits="3" data-linenumber="36">
944
+ <span class="hits">3</span>
946
945
 
947
-
948
- <code class="ruby"> when ::Hash</code>
946
+ <code class="ruby"> ret[:gem_installed_version] = spec&amp;.version.to_s || :unknown</code>
949
947
  </li>
950
948
 
951
- <li class="covered" data-hits="9" data-linenumber="37">
952
- <span class="hits">9</span>
949
+ <li class="covered" data-hits="3" data-linenumber="37">
950
+ <span class="hits">3</span>
953
951
 
954
- <code class="ruby"> flatten_prop_style(value, opts.merge({:prefix =&gt; key}), output)</code>
952
+ <code class="ruby"> ret[:gem_name] = spec&amp;.name || :unknown</code>
955
953
  </li>
956
954
 
957
955
  <li class="never" data-hits="" data-linenumber="38">
958
956
 
959
957
 
960
- <code class="ruby"> when Array</code>
958
+ <code class="ruby"></code>
959
+ </li>
960
+
961
+ <li class="covered" data-hits="3" data-linenumber="39">
962
+ <span class="hits">3</span>
963
+
964
+ <code class="ruby"> opts = { # defaults</code>
965
+ </li>
966
+
967
+ <li class="never" data-hits="" data-linenumber="40">
968
+
969
+
970
+ <code class="ruby"> check_interval: 3600,</code>
971
+ </li>
972
+
973
+ <li class="never" data-hits="" data-linenumber="41">
974
+
975
+
976
+ <code class="ruby"> disabling_env_var: &quot;#{spec.name.upcase}_DISABLE_VERSION_CHECK&quot;</code>
977
+ </li>
978
+
979
+ <li class="never" data-hits="" data-linenumber="42">
980
+
981
+
982
+ <code class="ruby"> }.merge(opts)</code>
983
+ </li>
984
+
985
+ <li class="never" data-hits="" data-linenumber="43">
986
+
987
+
988
+ <code class="ruby"></code>
989
+ </li>
990
+
991
+ <li class="covered" data-hits="3" data-linenumber="44">
992
+ <span class="hits">3</span>
993
+
994
+ <code class="ruby"> return ret if ret[:gem_name] == :unknown</code>
995
+ </li>
996
+
997
+ <li class="covered" data-hits="3" data-linenumber="45">
998
+ <span class="hits">3</span>
999
+
1000
+ <code class="ruby"> return ret if ret[:gem_installed_version] == :unknown</code>
1001
+ </li>
1002
+
1003
+ <li class="covered" data-hits="3" data-linenumber="46">
1004
+ <span class="hits">3</span>
1005
+
1006
+ <code class="ruby"> if opts[:disabling_env_var] &amp;&amp; ENV.include?(opts[:disabling_env_var])</code>
1007
+ </li>
1008
+
1009
+ <li class="covered" data-hits="1" data-linenumber="47">
1010
+ <span class="hits">1</span>
1011
+
1012
+ <code class="ruby"> ret[:next_check_for_update] = :never</code>
1013
+ </li>
1014
+
1015
+ <li class="covered" data-hits="1" data-linenumber="48">
1016
+ <span class="hits">1</span>
1017
+
1018
+ <code class="ruby"> return ret</code>
1019
+ </li>
1020
+
1021
+ <li class="never" data-hits="" data-linenumber="49">
1022
+
1023
+
1024
+ <code class="ruby"> end</code>
1025
+ </li>
1026
+
1027
+ <li class="never" data-hits="" data-linenumber="50">
1028
+
1029
+
1030
+ <code class="ruby"></code>
1031
+ </li>
1032
+
1033
+ <li class="covered" data-hits="2" data-linenumber="51">
1034
+ <span class="hits">2</span>
1035
+
1036
+ <code class="ruby"> require &#39;gem_update_checker&#39;</code>
1037
+ </li>
1038
+
1039
+ <li class="covered" data-hits="2" data-linenumber="52">
1040
+ <span class="hits">2</span>
1041
+
1042
+ <code class="ruby"> require &#39;tmpdir&#39;</code>
1043
+ </li>
1044
+
1045
+ <li class="covered" data-hits="2" data-linenumber="53">
1046
+ <span class="hits">2</span>
1047
+
1048
+ <code class="ruby"> require &#39;fileutils&#39;</code>
1049
+ </li>
1050
+
1051
+ <li class="never" data-hits="" data-linenumber="54">
1052
+
1053
+
1054
+ <code class="ruby"></code>
1055
+ </li>
1056
+
1057
+ <li class="covered" data-hits="2" data-linenumber="55">
1058
+ <span class="hits">2</span>
1059
+
1060
+ <code class="ruby"> statefile_path = File.join(Dir.tmpdir, &quot;#{ret[:gem_name]}-#{ret[:gem_installed_version]}.last_update_check&quot;)</code>
1061
+ </li>
1062
+
1063
+ <li class="never" data-hits="" data-linenumber="56">
1064
+
1065
+
1066
+ <code class="ruby"></code>
1067
+ </li>
1068
+
1069
+ <li class="covered" data-hits="2" data-linenumber="57">
1070
+ <span class="hits">2</span>
1071
+
1072
+ <code class="ruby"> last_check_at = nil</code>
1073
+ </li>
1074
+
1075
+ <li class="covered" data-hits="2" data-linenumber="58">
1076
+ <span class="hits">2</span>
1077
+
1078
+ <code class="ruby"> begin</code>
1079
+ </li>
1080
+
1081
+ <li class="covered" data-hits="2" data-linenumber="59">
1082
+ <span class="hits">2</span>
1083
+
1084
+ <code class="ruby"> last_check_at = File.stat(statefile_path).mtime</code>
1085
+ </li>
1086
+
1087
+ <li class="never" data-hits="" data-linenumber="60">
1088
+
1089
+
1090
+ <code class="ruby"> rescue</code>
1091
+ </li>
1092
+
1093
+ <li class="covered" data-hits="2" data-linenumber="61">
1094
+ <span class="hits">2</span>
1095
+
1096
+ <code class="ruby"> last_check_at = Time.at(0)</code>
1097
+ </li>
1098
+
1099
+ <li class="never" data-hits="" data-linenumber="62">
1100
+
1101
+
1102
+ <code class="ruby"> end</code>
1103
+ </li>
1104
+
1105
+ <li class="covered" data-hits="2" data-linenumber="63">
1106
+ <span class="hits">2</span>
1107
+
1108
+ <code class="ruby"> return ret if last_check_at &gt; Time.now - opts[:check_interval]</code>
1109
+ </li>
1110
+
1111
+ <li class="never" data-hits="" data-linenumber="64">
1112
+
1113
+
1114
+ <code class="ruby"></code>
1115
+ </li>
1116
+
1117
+ <li class="covered" data-hits="2" data-linenumber="65">
1118
+ <span class="hits">2</span>
1119
+
1120
+ <code class="ruby"> checker = GemUpdateChecker::Client.new(ret[:gem_name], ret[:gem_installed_version])</code>
1121
+ </li>
1122
+
1123
+ <li class="covered" data-hits="2" data-linenumber="66">
1124
+ <span class="hits">2</span>
1125
+
1126
+ <code class="ruby"> last_check_at = Time.now</code>
1127
+ </li>
1128
+
1129
+ <li class="never" data-hits="" data-linenumber="67">
1130
+
1131
+
1132
+ <code class="ruby"></code>
1133
+ </li>
1134
+
1135
+ <li class="covered" data-hits="2" data-linenumber="68">
1136
+ <span class="hits">2</span>
1137
+
1138
+ <code class="ruby"> ret.merge!(</code>
1139
+ </li>
1140
+
1141
+ <li class="never" data-hits="" data-linenumber="69">
1142
+
1143
+
1144
+ <code class="ruby"> gem_latest_version: checker.latest_version,</code>
1145
+ </li>
1146
+
1147
+ <li class="never" data-hits="" data-linenumber="70">
1148
+
1149
+
1150
+ <code class="ruby"> last_checked_for_update: last_check_at,</code>
1151
+ </li>
1152
+
1153
+ <li class="never" data-hits="" data-linenumber="71">
1154
+
1155
+
1156
+ <code class="ruby"> next_check_for_update: last_check_at + opts[:check_interval],</code>
1157
+ </li>
1158
+
1159
+ <li class="never" data-hits="" data-linenumber="72">
1160
+
1161
+
1162
+ <code class="ruby"> installed_is_latest: ret[:gem_installed_version] == checker.latest_version,</code>
1163
+ </li>
1164
+
1165
+ <li class="never" data-hits="" data-linenumber="73">
1166
+
1167
+
1168
+ <code class="ruby"> gem_update_available: checker.update_available</code>
1169
+ </li>
1170
+
1171
+ <li class="never" data-hits="" data-linenumber="74">
1172
+
1173
+
1174
+ <code class="ruby"> )</code>
1175
+ </li>
1176
+
1177
+ <li class="never" data-hits="" data-linenumber="75">
1178
+
1179
+
1180
+ <code class="ruby"></code>
1181
+ </li>
1182
+
1183
+ <li class="covered" data-hits="2" data-linenumber="76">
1184
+ <span class="hits">2</span>
1185
+
1186
+ <code class="ruby"> FileUtils.touch(statefile_path) if ret[:installed_is_latest]</code>
1187
+ </li>
1188
+
1189
+ <li class="never" data-hits="" data-linenumber="77">
1190
+
1191
+
1192
+ <code class="ruby"></code>
1193
+ </li>
1194
+
1195
+ <li class="covered" data-hits="2" data-linenumber="78">
1196
+ <span class="hits">2</span>
1197
+
1198
+ <code class="ruby"> ret</code>
1199
+ </li>
1200
+
1201
+ <li class="never" data-hits="" data-linenumber="79">
1202
+
1203
+
1204
+ <code class="ruby"> end</code>
1205
+ </li>
1206
+
1207
+ <li class="never" data-hits="" data-linenumber="80">
1208
+
1209
+
1210
+ <code class="ruby"> end</code>
1211
+ </li>
1212
+
1213
+ <li class="never" data-hits="" data-linenumber="81">
1214
+
1215
+
1216
+ <code class="ruby"> end</code>
1217
+ </li>
1218
+
1219
+ <li class="never" data-hits="" data-linenumber="82">
1220
+
1221
+
1222
+ <code class="ruby">end</code>
1223
+ </li>
1224
+
1225
+ </ol>
1226
+ </pre>
1227
+ </div>
1228
+
1229
+ <div class="source_table" id="636c073a27c86cd147d7b0f717311b3b9eded478">
1230
+ <div class="header">
1231
+ <h3>lib/blackbox/hash.rb</h3>
1232
+ <h4><span class="green">100.0 %</span> covered</h4>
1233
+ <div>
1234
+ <b>13</b> relevant lines.
1235
+ <span class="green"><b>13</b> lines covered</span> and
1236
+ <span class="red"><b>0</b> lines missed.</span>
1237
+ </div>
1238
+ </div>
1239
+
1240
+ <pre>
1241
+ <ol>
1242
+
1243
+ <li class="never" data-hits="" data-linenumber="1">
1244
+
1245
+
1246
+ <code class="ruby"># frozen_string_literal: true</code>
1247
+ </li>
1248
+
1249
+ <li class="covered" data-hits="1" data-linenumber="2">
1250
+ <span class="hits">1</span>
1251
+
1252
+ <code class="ruby">module BB</code>
1253
+ </li>
1254
+
1255
+ <li class="never" data-hits="" data-linenumber="3">
1256
+
1257
+
1258
+ <code class="ruby"> # Hash utilities.</code>
1259
+ </li>
1260
+
1261
+ <li class="covered" data-hits="1" data-linenumber="4">
1262
+ <span class="hits">1</span>
1263
+
1264
+ <code class="ruby"> module Hash</code>
1265
+ </li>
1266
+
1267
+ <li class="covered" data-hits="1" data-linenumber="5">
1268
+ <span class="hits">1</span>
1269
+
1270
+ <code class="ruby"> class &lt;&lt; self</code>
1271
+ </li>
1272
+
1273
+ <li class="never" data-hits="" data-linenumber="6">
1274
+
1275
+
1276
+ <code class="ruby"> # Symbolize all top level keys.</code>
1277
+ </li>
1278
+
1279
+ <li class="never" data-hits="" data-linenumber="7">
1280
+
1281
+
1282
+ <code class="ruby"> #</code>
1283
+ </li>
1284
+
1285
+ <li class="never" data-hits="" data-linenumber="8">
1286
+
1287
+
1288
+ <code class="ruby"> # @param [Hash] hash Input hash</code>
1289
+ </li>
1290
+
1291
+ <li class="never" data-hits="" data-linenumber="9">
1292
+
1293
+
1294
+ <code class="ruby"> # @return [Hash] Output hash (with symbolized keys)</code>
1295
+ </li>
1296
+
1297
+ <li class="covered" data-hits="1" data-linenumber="10">
1298
+ <span class="hits">1</span>
1299
+
1300
+ <code class="ruby"> def symbolize_keys(hash)</code>
1301
+ </li>
1302
+
1303
+ <li class="covered" data-hits="112" data-linenumber="11">
1304
+ <span class="hits">112</span>
1305
+
1306
+ <code class="ruby"> hash.each_with_object({}) { |(k, v), h| h[k.to_sym] = v }</code>
1307
+ </li>
1308
+
1309
+ <li class="never" data-hits="" data-linenumber="12">
1310
+
1311
+
1312
+ <code class="ruby"> end</code>
1313
+ </li>
1314
+
1315
+ <li class="never" data-hits="" data-linenumber="13">
1316
+
1317
+
1318
+ <code class="ruby"></code>
1319
+ </li>
1320
+
1321
+ <li class="never" data-hits="" data-linenumber="14">
1322
+
1323
+
1324
+ <code class="ruby"> # Recursively flatten a hash to property-style format.</code>
1325
+ </li>
1326
+
1327
+ <li class="never" data-hits="" data-linenumber="15">
1328
+
1329
+
1330
+ <code class="ruby"> # This is a lossy conversion and should only be used for display-purposes.</code>
1331
+ </li>
1332
+
1333
+ <li class="never" data-hits="" data-linenumber="16">
1334
+
1335
+
1336
+ <code class="ruby"> #</code>
1337
+ </li>
1338
+
1339
+ <li class="never" data-hits="" data-linenumber="17">
1340
+
1341
+
1342
+ <code class="ruby"> # @example</code>
1343
+ </li>
1344
+
1345
+ <li class="never" data-hits="" data-linenumber="18">
1346
+
1347
+
1348
+ <code class="ruby"> # input = { :a =&gt; { :b =&gt; :c } }</code>
1349
+ </li>
1350
+
1351
+ <li class="never" data-hits="" data-linenumber="19">
1352
+
1353
+
1354
+ <code class="ruby"> # BB::Hash.flatten_prop_style(input)</code>
1355
+ </li>
1356
+
1357
+ <li class="never" data-hits="" data-linenumber="20">
1358
+
1359
+
1360
+ <code class="ruby"> # =&gt; {&quot;a.b&quot;=&gt;:c}</code>
1361
+ </li>
1362
+
1363
+ <li class="never" data-hits="" data-linenumber="21">
1364
+
1365
+
1366
+ <code class="ruby"> #</code>
1367
+ </li>
1368
+
1369
+ <li class="never" data-hits="" data-linenumber="22">
1370
+
1371
+
1372
+ <code class="ruby"> # @example</code>
1373
+ </li>
1374
+
1375
+ <li class="never" data-hits="" data-linenumber="23">
1376
+
1377
+
1378
+ <code class="ruby"> # input = { :a =&gt; { :b =&gt; [:c, :d, :e] } }</code>
1379
+ </li>
1380
+
1381
+ <li class="never" data-hits="" data-linenumber="24">
1382
+
1383
+
1384
+ <code class="ruby"> # BB::Hash.flatten_prop_style(input)</code>
1385
+ </li>
1386
+
1387
+ <li class="never" data-hits="" data-linenumber="25">
1388
+
1389
+
1390
+ <code class="ruby"> # =&gt; {&quot;a.b&quot;=&gt;&quot;c,d,e&quot;}</code>
1391
+ </li>
1392
+
1393
+ <li class="never" data-hits="" data-linenumber="26">
1394
+
1395
+
1396
+ <code class="ruby"> #</code>
1397
+ </li>
1398
+
1399
+ <li class="never" data-hits="" data-linenumber="27">
1400
+
1401
+
1402
+ <code class="ruby"> # @param [Hash] input Input hash</code>
1403
+ </li>
1404
+
1405
+ <li class="never" data-hits="" data-linenumber="28">
1406
+
1407
+
1408
+ <code class="ruby"> # @param [Hash] opts Options</code>
1409
+ </li>
1410
+
1411
+ <li class="never" data-hits="" data-linenumber="29">
1412
+
1413
+
1414
+ <code class="ruby"> # @option opts [String] :delimiter</code>
1415
+ </li>
1416
+
1417
+ <li class="never" data-hits="" data-linenumber="30">
1418
+
1419
+
1420
+ <code class="ruby"> # Key delimiter (Default: &#39;.&#39;)</code>
1421
+ </li>
1422
+
1423
+ <li class="never" data-hits="" data-linenumber="31">
1424
+
1425
+
1426
+ <code class="ruby"> # @param [Hash] output (leave this blank)</code>
1427
+ </li>
1428
+
1429
+ <li class="never" data-hits="" data-linenumber="32">
1430
+
1431
+
1432
+ <code class="ruby"> # @return [Hash] Output hash (flattened)</code>
1433
+ </li>
1434
+
1435
+ <li class="covered" data-hits="1" data-linenumber="33">
1436
+ <span class="hits">1</span>
1437
+
1438
+ <code class="ruby"> def flatten_prop_style(input = {}, opts = {}, output = {})</code>
1439
+ </li>
1440
+
1441
+ <li class="covered" data-hits="10" data-linenumber="34">
1442
+ <span class="hits">10</span>
1443
+
1444
+ <code class="ruby"> input.each do |key, value|</code>
1445
+ </li>
1446
+
1447
+ <li class="covered" data-hits="22" data-linenumber="35">
1448
+ <span class="hits">22</span>
1449
+
1450
+ <code class="ruby"> key = opts[:prefix].nil? ? key.to_s : &quot;#{opts[:prefix]}#{opts[:delimiter] || &#39;.&#39;}#{key}&quot;</code>
1451
+ </li>
1452
+
1453
+ <li class="covered" data-hits="22" data-linenumber="36">
1454
+ <span class="hits">22</span>
1455
+
1456
+ <code class="ruby"> case value</code>
1457
+ </li>
1458
+
1459
+ <li class="never" data-hits="" data-linenumber="37">
1460
+
1461
+
1462
+ <code class="ruby"> when ::Hash</code>
1463
+ </li>
1464
+
1465
+ <li class="covered" data-hits="9" data-linenumber="38">
1466
+ <span class="hits">9</span>
1467
+
1468
+ <code class="ruby"> flatten_prop_style(value, opts.merge(prefix: key), output)</code>
1469
+ </li>
1470
+
1471
+ <li class="never" data-hits="" data-linenumber="39">
1472
+
1473
+
1474
+ <code class="ruby"> when Array</code>
961
1475
  </li>
962
1476
 
963
- <li class="covered" data-hits="4" data-linenumber="39">
1477
+ <li class="covered" data-hits="4" data-linenumber="40">
964
1478
  <span class="hits">4</span>
965
1479
 
966
1480
  <code class="ruby"> output[key] = value.join(&#39;,&#39;)</code>
967
1481
  </li>
968
1482
 
969
- <li class="never" data-hits="" data-linenumber="40">
1483
+ <li class="never" data-hits="" data-linenumber="41">
970
1484
 
971
1485
 
972
1486
  <code class="ruby"> else</code>
973
1487
  </li>
974
1488
 
975
- <li class="covered" data-hits="9" data-linenumber="41">
1489
+ <li class="covered" data-hits="9" data-linenumber="42">
976
1490
  <span class="hits">9</span>
977
1491
 
978
1492
  <code class="ruby"> output[key] = value</code>
979
1493
  </li>
980
1494
 
981
- <li class="never" data-hits="" data-linenumber="42">
1495
+ <li class="never" data-hits="" data-linenumber="43">
982
1496
 
983
1497
 
984
1498
  <code class="ruby"> end</code>
985
1499
  </li>
986
1500
 
987
- <li class="never" data-hits="" data-linenumber="43">
1501
+ <li class="never" data-hits="" data-linenumber="44">
988
1502
 
989
1503
 
990
1504
  <code class="ruby"> end</code>
991
1505
  </li>
992
1506
 
993
- <li class="covered" data-hits="10" data-linenumber="44">
1507
+ <li class="covered" data-hits="10" data-linenumber="45">
994
1508
  <span class="hits">10</span>
995
1509
 
996
1510
  <code class="ruby"> output</code>
997
1511
  </li>
998
1512
 
999
- <li class="never" data-hits="" data-linenumber="45">
1000
-
1001
-
1002
- <code class="ruby"> end</code>
1003
- </li>
1004
-
1005
1513
  <li class="never" data-hits="" data-linenumber="46">
1006
1514
 
1007
1515
 
1008
- <code class="ruby"> end</code>
1516
+ <code class="ruby"> end</code>
1009
1517
  </li>
1010
1518
 
1011
1519
  <li class="never" data-hits="" data-linenumber="47">
1012
1520
 
1013
1521
 
1014
- <code class="ruby"> end</code>
1522
+ <code class="ruby"> end</code>
1015
1523
  </li>
1016
1524
 
1017
1525
  <li class="never" data-hits="" data-linenumber="48">
1018
1526
 
1019
1527
 
1020
- <code class="ruby">end</code>
1528
+ <code class="ruby"> end</code>
1021
1529
  </li>
1022
1530
 
1023
1531
  <li class="never" data-hits="" data-linenumber="49">
1024
1532
 
1025
1533
 
1026
- <code class="ruby"></code>
1534
+ <code class="ruby">end</code>
1027
1535
  </li>
1028
1536
 
1029
1537
  </ol>
1030
1538
  </pre>
1031
1539
  </div>
1032
1540
 
1033
- <div class="source_table" id="7a135b0407697dbb00ab589a4ca6477d724b7276">
1541
+ <div class="source_table" id="09e4da465507022615e91e2292a827cde0e5535c">
1034
1542
  <div class="header">
1035
1543
  <h3>lib/blackbox/number.rb</h3>
1036
- <h4><span class="green">91.11 %</span> covered</h4>
1544
+ <h4><span class="green">100.0 %</span> covered</h4>
1037
1545
  <div>
1038
- <b>45</b> relevant lines.
1039
- <span class="green"><b>41</b> lines covered</span> and
1040
- <span class="red"><b>4</b> lines missed.</span>
1546
+ <b>52</b> relevant lines.
1547
+ <span class="green"><b>52</b> lines covered</span> and
1548
+ <span class="red"><b>0</b> lines missed.</span>
1041
1549
  </div>
1042
1550
  </div>
1043
1551
 
1044
1552
  <pre>
1045
1553
  <ol>
1046
1554
 
1047
- <li class="covered" data-hits="1" data-linenumber="1">
1555
+ <li class="never" data-hits="" data-linenumber="1">
1556
+
1557
+
1558
+ <code class="ruby"># frozen_string_literal: true</code>
1559
+ </li>
1560
+
1561
+ <li class="covered" data-hits="1" data-linenumber="2">
1048
1562
  <span class="hits">1</span>
1049
1563
 
1050
1564
  <code class="ruby">require &#39;blackbox/hash&#39;</code>
1051
1565
  </li>
1052
1566
 
1053
- <li class="never" data-hits="" data-linenumber="2">
1567
+ <li class="never" data-hits="" data-linenumber="3">
1054
1568
 
1055
1569
 
1056
1570
  <code class="ruby"></code>
1057
1571
  </li>
1058
1572
 
1059
- <li class="covered" data-hits="1" data-linenumber="3">
1573
+ <li class="covered" data-hits="1" data-linenumber="4">
1060
1574
  <span class="hits">1</span>
1061
1575
 
1062
1576
  <code class="ruby">module BB</code>
1063
1577
  </li>
1064
1578
 
1065
- <li class="never" data-hits="" data-linenumber="4">
1579
+ <li class="never" data-hits="" data-linenumber="5">
1066
1580
 
1067
1581
 
1068
1582
  <code class="ruby"> # String utilities.</code>
1069
1583
  </li>
1070
1584
 
1071
- <li class="covered" data-hits="1" data-linenumber="5">
1585
+ <li class="covered" data-hits="1" data-linenumber="6">
1072
1586
  <span class="hits">1</span>
1073
1587
 
1074
1588
  <code class="ruby"> module Number</code>
1075
1589
  </li>
1076
1590
 
1077
- <li class="covered" data-hits="1" data-linenumber="6">
1591
+ <li class="covered" data-hits="1" data-linenumber="7">
1078
1592
  <span class="hits">1</span>
1079
1593
 
1080
1594
  <code class="ruby"> class &lt;&lt; self</code>
1081
1595
  </li>
1082
1596
 
1083
- <li class="covered" data-hits="1" data-linenumber="7">
1597
+ <li class="covered" data-hits="1" data-linenumber="8">
1084
1598
  <span class="hits">1</span>
1085
1599
 
1086
- <code class="ruby"> STORAGE_UNITS = [&#39;byte&#39;, &#39;k&#39;, &#39;M&#39;, &#39;G&#39;, &#39;T&#39;, &#39;P&#39;, &#39;E&#39;, &#39;Z&#39;, &#39;Y&#39;].freeze</code>
1600
+ <code class="ruby"> STORAGE_UNITS = %w(byte k M G T P E Z Y).freeze</code>
1087
1601
  </li>
1088
1602
 
1089
- <li class="never" data-hits="" data-linenumber="8">
1603
+ <li class="never" data-hits="" data-linenumber="9">
1090
1604
 
1091
1605
 
1092
1606
  <code class="ruby"></code>
1093
1607
  </li>
1094
1608
 
1095
- <li class="never" data-hits="" data-linenumber="9">
1609
+ <li class="never" data-hits="" data-linenumber="10">
1096
1610
 
1097
1611
 
1098
1612
  <code class="ruby"> ##</code>
1099
1613
  </li>
1100
1614
 
1101
- <li class="never" data-hits="" data-linenumber="10">
1615
+ <li class="never" data-hits="" data-linenumber="11">
1102
1616
 
1103
1617
 
1104
- <code class="ruby"> # Formats the bytes in +size+ into a more understandable representation</code>
1618
+ <code class="ruby"> # Formats the bytes in +number+ into a more understandable representation</code>
1105
1619
  </li>
1106
1620
 
1107
- <li class="never" data-hits="" data-linenumber="11">
1621
+ <li class="never" data-hits="" data-linenumber="12">
1108
1622
 
1109
1623
 
1110
1624
  <code class="ruby"> # (e.g., giving it 1500 yields 1.5k). This method is useful for</code>
1111
1625
  </li>
1112
1626
 
1113
- <li class="never" data-hits="" data-linenumber="12">
1627
+ <li class="never" data-hits="" data-linenumber="13">
1114
1628
 
1115
1629
 
1116
1630
  <code class="ruby"> # reporting file sizes to users. This method returns nil if</code>
1117
1631
  </li>
1118
1632
 
1119
- <li class="never" data-hits="" data-linenumber="13">
1633
+ <li class="never" data-hits="" data-linenumber="14">
1120
1634
 
1121
1635
 
1122
- <code class="ruby"> # +size+ cannot be converted into a number. You can customize the</code>
1636
+ <code class="ruby"> # +number+ cannot be converted into a number. You can customize the</code>
1123
1637
  </li>
1124
1638
 
1125
- <li class="never" data-hits="" data-linenumber="14">
1639
+ <li class="never" data-hits="" data-linenumber="15">
1126
1640
 
1127
1641
 
1128
1642
  <code class="ruby"> # format in the +options+ hash.</code>
1129
1643
  </li>
1130
1644
 
1131
- <li class="never" data-hits="" data-linenumber="15">
1645
+ <li class="never" data-hits="" data-linenumber="16">
1132
1646
 
1133
1647
 
1134
1648
  <code class="ruby"> #</code>
1135
1649
  </li>
1136
1650
 
1137
- <li class="never" data-hits="" data-linenumber="16">
1651
+ <li class="never" data-hits="" data-linenumber="17">
1138
1652
 
1139
1653
 
1140
1654
  <code class="ruby"> # @overload to_human_size(number, options={})</code>
1141
1655
  </li>
1142
1656
 
1143
- <li class="never" data-hits="" data-linenumber="17">
1657
+ <li class="never" data-hits="" data-linenumber="18">
1144
1658
 
1145
1659
 
1146
1660
  <code class="ruby"> # @param [Fixnum] number</code>
1147
1661
  </li>
1148
1662
 
1149
- <li class="never" data-hits="" data-linenumber="18">
1663
+ <li class="never" data-hits="" data-linenumber="19">
1150
1664
 
1151
1665
 
1152
1666
  <code class="ruby"> # Number value to format.</code>
1153
1667
  </li>
1154
1668
 
1155
- <li class="never" data-hits="" data-linenumber="19">
1669
+ <li class="never" data-hits="" data-linenumber="20">
1156
1670
 
1157
1671
 
1158
1672
  <code class="ruby"> # @param [Hash] options</code>
1159
1673
  </li>
1160
1674
 
1161
- <li class="never" data-hits="" data-linenumber="20">
1675
+ <li class="never" data-hits="" data-linenumber="21">
1162
1676
 
1163
1677
 
1164
1678
  <code class="ruby"> # Options for formatter.</code>
1165
1679
  </li>
1166
1680
 
1167
- <li class="never" data-hits="" data-linenumber="21">
1681
+ <li class="never" data-hits="" data-linenumber="22">
1168
1682
 
1169
1683
 
1170
1684
  <code class="ruby"> # @option options [Fixnum] :precision (1)</code>
1171
1685
  </li>
1172
1686
 
1173
- <li class="never" data-hits="" data-linenumber="22">
1687
+ <li class="never" data-hits="" data-linenumber="23">
1174
1688
 
1175
1689
 
1176
1690
  <code class="ruby"> # Sets the level of precision.</code>
1177
1691
  </li>
1178
1692
 
1179
- <li class="never" data-hits="" data-linenumber="23">
1693
+ <li class="never" data-hits="" data-linenumber="24">
1180
1694
 
1181
1695
 
1182
1696
  <code class="ruby"> # @option options [String] :separator (&quot;.&quot;)</code>
1183
1697
  </li>
1184
1698
 
1185
- <li class="never" data-hits="" data-linenumber="24">
1699
+ <li class="never" data-hits="" data-linenumber="25">
1186
1700
 
1187
1701
 
1188
1702
  <code class="ruby"> # Sets the separator between the units.</code>
1189
1703
  </li>
1190
1704
 
1191
- <li class="never" data-hits="" data-linenumber="25">
1705
+ <li class="never" data-hits="" data-linenumber="26">
1192
1706
 
1193
1707
 
1194
1708
  <code class="ruby"> # @option options [String] :delimiter (&quot;&quot;)</code>
1195
1709
  </li>
1196
1710
 
1197
- <li class="never" data-hits="" data-linenumber="26">
1711
+ <li class="never" data-hits="" data-linenumber="27">
1198
1712
 
1199
1713
 
1200
1714
  <code class="ruby"> # Sets the thousands delimiter.</code>
1201
1715
  </li>
1202
1716
 
1203
- <li class="never" data-hits="" data-linenumber="27">
1717
+ <li class="never" data-hits="" data-linenumber="28">
1204
1718
 
1205
1719
 
1206
1720
  <code class="ruby"> # @option options [String] :kilo (1024)</code>
1207
1721
  </li>
1208
1722
 
1209
- <li class="never" data-hits="" data-linenumber="28">
1723
+ <li class="never" data-hits="" data-linenumber="29">
1210
1724
 
1211
1725
 
1212
1726
  <code class="ruby"> # Sets the number of bytes in a kilobyte.</code>
1213
1727
  </li>
1214
1728
 
1215
- <li class="never" data-hits="" data-linenumber="29">
1729
+ <li class="never" data-hits="" data-linenumber="30">
1216
1730
 
1217
1731
 
1218
1732
  <code class="ruby"> # @option options [String] :format (&quot;%n%u&quot;)</code>
1219
1733
  </li>
1220
1734
 
1221
- <li class="never" data-hits="" data-linenumber="30">
1735
+ <li class="never" data-hits="" data-linenumber="31">
1222
1736
 
1223
1737
 
1224
1738
  <code class="ruby"> # Sets the display format.</code>
1225
1739
  </li>
1226
1740
 
1227
- <li class="never" data-hits="" data-linenumber="31">
1741
+ <li class="never" data-hits="" data-linenumber="32">
1228
1742
 
1229
1743
 
1230
1744
  <code class="ruby"> #</code>
1231
1745
  </li>
1232
1746
 
1233
- <li class="never" data-hits="" data-linenumber="32">
1747
+ <li class="never" data-hits="" data-linenumber="33">
1234
1748
 
1235
1749
 
1236
1750
  <code class="ruby"> # @return [String] The formatted representation of bytes</code>
1237
1751
  </li>
1238
1752
 
1239
- <li class="never" data-hits="" data-linenumber="33">
1753
+ <li class="never" data-hits="" data-linenumber="34">
1240
1754
 
1241
1755
 
1242
1756
  <code class="ruby"> #</code>
1243
1757
  </li>
1244
1758
 
1245
- <li class="never" data-hits="" data-linenumber="34">
1759
+ <li class="never" data-hits="" data-linenumber="35">
1246
1760
 
1247
1761
 
1248
1762
  <code class="ruby"> # @example</code>
1249
1763
  </li>
1250
1764
 
1251
- <li class="never" data-hits="" data-linenumber="35">
1765
+ <li class="never" data-hits="" data-linenumber="36">
1252
1766
 
1253
1767
 
1254
1768
  <code class="ruby"> # to_human_size(123) # =&gt; 123</code>
1255
1769
  </li>
1256
1770
 
1257
- <li class="never" data-hits="" data-linenumber="36">
1771
+ <li class="never" data-hits="" data-linenumber="37">
1258
1772
 
1259
1773
 
1260
1774
  <code class="ruby"> # to_human_size(1234) # =&gt; 1.2k</code>
1261
1775
  </li>
1262
1776
 
1263
- <li class="never" data-hits="" data-linenumber="37">
1777
+ <li class="never" data-hits="" data-linenumber="38">
1264
1778
 
1265
1779
 
1266
1780
  <code class="ruby"> # to_human_size(12345) # =&gt; 12.1k</code>
1267
1781
  </li>
1268
1782
 
1269
- <li class="never" data-hits="" data-linenumber="38">
1783
+ <li class="never" data-hits="" data-linenumber="39">
1270
1784
 
1271
1785
 
1272
1786
  <code class="ruby"> # to_human_size(1234567) # =&gt; 1.2M</code>
1273
1787
  </li>
1274
1788
 
1275
- <li class="never" data-hits="" data-linenumber="39">
1789
+ <li class="never" data-hits="" data-linenumber="40">
1276
1790
 
1277
1791
 
1278
1792
  <code class="ruby"> # to_human_size(1234567890) # =&gt; 1.1G</code>
1279
1793
  </li>
1280
1794
 
1281
- <li class="never" data-hits="" data-linenumber="40">
1795
+ <li class="never" data-hits="" data-linenumber="41">
1282
1796
 
1283
1797
 
1284
1798
  <code class="ruby"> # to_human_size(1234567890123) # =&gt; 1.1T</code>
1285
1799
  </li>
1286
1800
 
1287
- <li class="never" data-hits="" data-linenumber="41">
1801
+ <li class="never" data-hits="" data-linenumber="42">
1288
1802
 
1289
1803
 
1290
1804
  <code class="ruby"> # to_human_size(1234567, :precision =&gt; 2) # =&gt; 1.18M</code>
1291
1805
  </li>
1292
1806
 
1293
- <li class="never" data-hits="" data-linenumber="42">
1807
+ <li class="never" data-hits="" data-linenumber="43">
1294
1808
 
1295
1809
 
1296
1810
  <code class="ruby"> # to_human_size(483989, :precision =&gt; 0) # =&gt; 473k</code>
1297
1811
  </li>
1298
1812
 
1299
- <li class="never" data-hits="" data-linenumber="43">
1813
+ <li class="never" data-hits="" data-linenumber="44">
1300
1814
 
1301
1815
 
1302
1816
  <code class="ruby"> # to_human_size(1234567, :precision =&gt; 2, :separator =&gt; &#39;,&#39;) # =&gt; 1,18M</code>
1303
1817
  </li>
1304
1818
 
1305
- <li class="never" data-hits="" data-linenumber="44">
1819
+ <li class="never" data-hits="" data-linenumber="45">
1306
1820
 
1307
1821
 
1308
1822
  <code class="ruby"> #</code>
1309
1823
  </li>
1310
1824
 
1311
- <li class="covered" data-hits="1" data-linenumber="45">
1825
+ <li class="covered" data-hits="1" data-linenumber="46">
1312
1826
  <span class="hits">1</span>
1313
1827
 
1314
- <code class="ruby"> def to_human_size(number, args={})</code>
1315
- </li>
1316
-
1317
- <li class="covered" data-hits="11" data-linenumber="46">
1318
- <span class="hits">11</span>
1319
-
1320
- <code class="ruby"> return nil if number.nil?</code>
1828
+ <code class="ruby"> def to_human_size(number, args = {})</code>
1321
1829
  </li>
1322
1830
 
1323
- <li class="never" data-hits="" data-linenumber="47">
1324
-
1831
+ <li class="covered" data-hits="13" data-linenumber="47">
1832
+ <span class="hits">13</span>
1325
1833
 
1326
- <code class="ruby"></code>
1834
+ <code class="ruby"> begin</code>
1327
1835
  </li>
1328
1836
 
1329
- <li class="covered" data-hits="11" data-linenumber="48">
1330
- <span class="hits">11</span>
1837
+ <li class="covered" data-hits="13" data-linenumber="48">
1838
+ <span class="hits">13</span>
1331
1839
 
1332
- <code class="ruby"> options = BB::Hash.symbolize_keys(args)</code>
1840
+ <code class="ruby"> Float(number)</code>
1333
1841
  </li>
1334
1842
 
1335
1843
  <li class="never" data-hits="" data-linenumber="49">
1336
1844
 
1337
1845
 
1338
- <code class="ruby"></code>
1846
+ <code class="ruby"> rescue</code>
1339
1847
  </li>
1340
1848
 
1341
- <li class="covered" data-hits="11" data-linenumber="50">
1342
- <span class="hits">11</span>
1849
+ <li class="covered" data-hits="1" data-linenumber="50">
1850
+ <span class="hits">1</span>
1343
1851
 
1344
- <code class="ruby"> precision ||= (options[:precision] || 1)</code>
1852
+ <code class="ruby"> return nil</code>
1345
1853
  </li>
1346
1854
 
1347
- <li class="covered" data-hits="11" data-linenumber="51">
1348
- <span class="hits">11</span>
1855
+ <li class="never" data-hits="" data-linenumber="51">
1349
1856
 
1350
- <code class="ruby"> separator ||= (options[:separator] || &#39;.&#39;)</code>
1351
- </li>
1352
-
1353
- <li class="covered" data-hits="11" data-linenumber="52">
1354
- <span class="hits">11</span>
1355
1857
 
1356
- <code class="ruby"> delimiter ||= (options[:delimiter] || &#39;&#39;)</code>
1858
+ <code class="ruby"> end</code>
1357
1859
  </li>
1358
1860
 
1359
- <li class="covered" data-hits="11" data-linenumber="53">
1360
- <span class="hits">11</span>
1861
+ <li class="never" data-hits="" data-linenumber="52">
1862
+
1361
1863
 
1362
- <code class="ruby"> kilo ||= (options[:kilo] || 1024)</code>
1864
+ <code class="ruby"></code>
1363
1865
  </li>
1364
1866
 
1365
- <li class="covered" data-hits="11" data-linenumber="54">
1366
- <span class="hits">11</span>
1867
+ <li class="covered" data-hits="12" data-linenumber="53">
1868
+ <span class="hits">12</span>
1367
1869
 
1368
- <code class="ruby"> storage_units_format ||= (options[:format] || &#39;%n%u&#39;)</code>
1870
+ <code class="ruby"> options = BB::Hash.symbolize_keys(args)</code>
1369
1871
  </li>
1370
1872
 
1371
- <li class="never" data-hits="" data-linenumber="55">
1873
+ <li class="never" data-hits="" data-linenumber="54">
1372
1874
 
1373
1875
 
1374
1876
  <code class="ruby"></code>
1375
1877
  </li>
1376
1878
 
1377
- <li class="covered" data-hits="11" data-linenumber="56">
1378
- <span class="hits">11</span>
1879
+ <li class="covered" data-hits="12" data-linenumber="55">
1880
+ <span class="hits">12</span>
1379
1881
 
1380
- <code class="ruby"> if number.to_i &lt; kilo</code>
1882
+ <code class="ruby"> precision ||= (options[:precision] || 1)</code>
1381
1883
  </li>
1382
1884
 
1383
- <li class="covered" data-hits="1" data-linenumber="57">
1384
- <span class="hits">1</span>
1885
+ <li class="covered" data-hits="12" data-linenumber="56">
1886
+ <span class="hits">12</span>
1385
1887
 
1386
- <code class="ruby"> storage_units_format.gsub(/%n/, number.to_i.to_s).gsub(/%u/, &#39;&#39;)</code>
1888
+ <code class="ruby"> separator ||= (options[:separator] || &#39;.&#39;)</code>
1387
1889
  </li>
1388
1890
 
1389
- <li class="never" data-hits="" data-linenumber="58">
1891
+ <li class="covered" data-hits="12" data-linenumber="57">
1892
+ <span class="hits">12</span>
1390
1893
 
1894
+ <code class="ruby"> delimiter ||= (options[:delimiter] || &#39;&#39;)</code>
1895
+ </li>
1896
+
1897
+ <li class="covered" data-hits="12" data-linenumber="58">
1898
+ <span class="hits">12</span>
1391
1899
 
1392
- <code class="ruby"> else</code>
1900
+ <code class="ruby"> kilo ||= (options[:kilo] || 1024)</code>
1393
1901
  </li>
1394
1902
 
1395
- <li class="covered" data-hits="10" data-linenumber="59">
1396
- <span class="hits">10</span>
1903
+ <li class="covered" data-hits="12" data-linenumber="59">
1904
+ <span class="hits">12</span>
1397
1905
 
1398
- <code class="ruby"> max_exp = STORAGE_UNITS.size - 1</code>
1906
+ <code class="ruby"> storage_units_format ||= (options[:format] || &#39;%n%u&#39;)</code>
1399
1907
  </li>
1400
1908
 
1401
- <li class="covered" data-hits="10" data-linenumber="60">
1402
- <span class="hits">10</span>
1909
+ <li class="never" data-hits="" data-linenumber="60">
1403
1910
 
1404
- <code class="ruby"> number = Float(number)</code>
1911
+
1912
+ <code class="ruby"></code>
1405
1913
  </li>
1406
1914
 
1407
- <li class="covered" data-hits="10" data-linenumber="61">
1408
- <span class="hits">10</span>
1915
+ <li class="covered" data-hits="12" data-linenumber="61">
1916
+ <span class="hits">12</span>
1409
1917
 
1410
- <code class="ruby"> exponent = (Math.log(number) / Math.log(kilo)).to_i # Convert to base</code>
1918
+ <code class="ruby"> begin</code>
1411
1919
  </li>
1412
1920
 
1413
- <li class="covered" data-hits="10" data-linenumber="62">
1414
- <span class="hits">10</span>
1921
+ <li class="covered" data-hits="12" data-linenumber="62">
1922
+ <span class="hits">12</span>
1415
1923
 
1416
- <code class="ruby"> exponent = max_exp if exponent &gt; max_exp # we need this to avoid overflow for the highest unit</code>
1924
+ <code class="ruby"> if number.to_i &lt; kilo</code>
1417
1925
  </li>
1418
1926
 
1419
- <li class="covered" data-hits="10" data-linenumber="63">
1420
- <span class="hits">10</span>
1927
+ <li class="covered" data-hits="1" data-linenumber="63">
1928
+ <span class="hits">1</span>
1421
1929
 
1422
- <code class="ruby"> number /= kilo ** exponent</code>
1930
+ <code class="ruby"> storage_units_format.gsub(/%n/, number.to_i.to_s).gsub(/%u/, &#39;&#39;)</code>
1423
1931
  </li>
1424
1932
 
1425
1933
  <li class="never" data-hits="" data-linenumber="64">
1426
1934
 
1427
1935
 
1428
- <code class="ruby"></code>
1936
+ <code class="ruby"> else</code>
1429
1937
  </li>
1430
1938
 
1431
1939
  <li class="covered" data-hits="10" data-linenumber="65">
1432
1940
  <span class="hits">10</span>
1433
1941
 
1434
- <code class="ruby"> unit = STORAGE_UNITS[exponent]</code>
1942
+ <code class="ruby"> max_exp = STORAGE_UNITS.size - 1</code>
1435
1943
  </li>
1436
1944
 
1437
- <li class="never" data-hits="" data-linenumber="66">
1438
-
1945
+ <li class="covered" data-hits="10" data-linenumber="66">
1946
+ <span class="hits">10</span>
1439
1947
 
1440
- <code class="ruby"></code>
1948
+ <code class="ruby"> number = Float(number)</code>
1441
1949
  </li>
1442
1950
 
1443
1951
  <li class="covered" data-hits="10" data-linenumber="67">
1444
1952
  <span class="hits">10</span>
1445
1953
 
1446
- <code class="ruby"> begin</code>
1954
+ <code class="ruby"> exponent = (Math.log(number) / Math.log(kilo)).to_i # Convert to base</code>
1447
1955
  </li>
1448
1956
 
1449
1957
  <li class="covered" data-hits="10" data-linenumber="68">
1450
1958
  <span class="hits">10</span>
1451
1959
 
1452
- <code class="ruby"> escaped_separator = Regexp.escape(separator)</code>
1960
+ <code class="ruby"> exponent = max_exp if exponent &gt; max_exp # we need this to avoid overflow for the highest unit</code>
1453
1961
  </li>
1454
1962
 
1455
1963
  <li class="covered" data-hits="10" data-linenumber="69">
1456
1964
  <span class="hits">10</span>
1457
1965
 
1458
- <code class="ruby"> formatted_number = with_precision(number,</code>
1966
+ <code class="ruby"> number /= kilo**exponent</code>
1459
1967
  </li>
1460
1968
 
1461
1969
  <li class="never" data-hits="" data-linenumber="70">
1462
1970
 
1463
1971
 
1464
- <code class="ruby"> :precision =&gt; precision,</code>
1972
+ <code class="ruby"></code>
1465
1973
  </li>
1466
1974
 
1467
- <li class="never" data-hits="" data-linenumber="71">
1468
-
1975
+ <li class="covered" data-hits="10" data-linenumber="71">
1976
+ <span class="hits">10</span>
1469
1977
 
1470
- <code class="ruby"> :separator =&gt; separator,</code>
1978
+ <code class="ruby"> unit = STORAGE_UNITS[exponent]</code>
1471
1979
  </li>
1472
1980
 
1473
1981
  <li class="never" data-hits="" data-linenumber="72">
1474
1982
 
1475
1983
 
1476
- <code class="ruby"> :delimiter =&gt; delimiter</code>
1984
+ <code class="ruby"></code>
1477
1985
  </li>
1478
1986
 
1479
- <li class="never" data-hits="" data-linenumber="73">
1480
-
1987
+ <li class="covered" data-hits="10" data-linenumber="73">
1988
+ <span class="hits">10</span>
1481
1989
 
1482
- <code class="ruby"> ).sub(/(#{escaped_separator})(\d*[1-9])?0+\z/, &#39;\1\2&#39;).sub(/#{escaped_separator}\z/, &#39;&#39;)</code>
1990
+ <code class="ruby"> escaped_separator = Regexp.escape(separator)</code>
1483
1991
  </li>
1484
1992
 
1485
1993
  <li class="covered" data-hits="10" data-linenumber="74">
1486
1994
  <span class="hits">10</span>
1487
1995
 
1488
- <code class="ruby"> storage_units_format.gsub(/%n/, formatted_number).gsub(/%u/, unit)</code>
1996
+ <code class="ruby"> formatted_number = with_precision(number,</code>
1489
1997
  </li>
1490
1998
 
1491
- <li class="missed" data-hits="0" data-linenumber="75">
1999
+ <li class="never" data-hits="" data-linenumber="75">
1492
2000
 
1493
2001
 
1494
- <code class="ruby"> rescue =&gt; e</code>
2002
+ <code class="ruby"> precision: precision,</code>
1495
2003
  </li>
1496
2004
 
1497
- <li class="missed" data-hits="0" data-linenumber="76">
2005
+ <li class="never" data-hits="" data-linenumber="76">
1498
2006
 
1499
2007
 
1500
- <code class="ruby"> number</code>
2008
+ <code class="ruby"> separator: separator,</code>
1501
2009
  </li>
1502
2010
 
1503
2011
  <li class="never" data-hits="" data-linenumber="77">
1504
2012
 
1505
2013
 
1506
- <code class="ruby"> end</code>
2014
+ <code class="ruby"> delimiter: delimiter</code>
1507
2015
  </li>
1508
2016
 
1509
2017
  <li class="never" data-hits="" data-linenumber="78">
1510
2018
 
1511
2019
 
1512
- <code class="ruby"> end</code>
2020
+ <code class="ruby"> ).sub(/(#{escaped_separator})(\d*[1-9])?0+\z/, &#39;\1\2&#39;).sub(/#{escaped_separator}\z/, &#39;&#39;)</code>
1513
2021
  </li>
1514
2022
 
1515
- <li class="never" data-hits="" data-linenumber="79">
1516
-
2023
+ <li class="covered" data-hits="10" data-linenumber="79">
2024
+ <span class="hits">10</span>
1517
2025
 
1518
- <code class="ruby"> end</code>
2026
+ <code class="ruby"> storage_units_format.gsub(/%n/, formatted_number).gsub(/%u/, unit)</code>
1519
2027
  </li>
1520
2028
 
1521
2029
  <li class="never" data-hits="" data-linenumber="80">
1522
2030
 
1523
2031
 
1524
- <code class="ruby"></code>
2032
+ <code class="ruby"> end</code>
1525
2033
  </li>
1526
2034
 
1527
2035
  <li class="never" data-hits="" data-linenumber="81">
1528
2036
 
1529
2037
 
1530
- <code class="ruby"> ##</code>
2038
+ <code class="ruby"> rescue</code>
1531
2039
  </li>
1532
2040
 
1533
- <li class="never" data-hits="" data-linenumber="82">
1534
-
2041
+ <li class="covered" data-hits="1" data-linenumber="82">
2042
+ <span class="hits">1</span>
1535
2043
 
1536
- <code class="ruby"> # Formats a +number+ with the specified level of &lt;tt&gt;:precision&lt;/tt&gt; (e.g., 112.32 has a precision of 2).</code>
2044
+ <code class="ruby"> number</code>
1537
2045
  </li>
1538
2046
 
1539
2047
  <li class="never" data-hits="" data-linenumber="83">
1540
2048
 
1541
2049
 
1542
- <code class="ruby"> # You can customize the format in the +options+ hash.</code>
2050
+ <code class="ruby"> end</code>
1543
2051
  </li>
1544
2052
 
1545
2053
  <li class="never" data-hits="" data-linenumber="84">
1546
2054
 
1547
2055
 
1548
- <code class="ruby"> #</code>
2056
+ <code class="ruby"> end</code>
1549
2057
  </li>
1550
2058
 
1551
2059
  <li class="never" data-hits="" data-linenumber="85">
1552
2060
 
1553
2061
 
1554
- <code class="ruby"> # @overload with_precision(number, options={})</code>
2062
+ <code class="ruby"></code>
1555
2063
  </li>
1556
2064
 
1557
2065
  <li class="never" data-hits="" data-linenumber="86">
1558
2066
 
1559
2067
 
1560
- <code class="ruby"> # @param [Fixnum, Float] number</code>
2068
+ <code class="ruby"> ##</code>
1561
2069
  </li>
1562
2070
 
1563
2071
  <li class="never" data-hits="" data-linenumber="87">
1564
2072
 
1565
2073
 
1566
- <code class="ruby"> # Number value to format.</code>
2074
+ <code class="ruby"> # Formats a +number+ with the specified level of &lt;tt&gt;:precision&lt;/tt&gt; (e.g., 112.32 has a precision of 2).</code>
1567
2075
  </li>
1568
2076
 
1569
2077
  <li class="never" data-hits="" data-linenumber="88">
1570
2078
 
1571
2079
 
1572
- <code class="ruby"> # @param [Hash] options</code>
2080
+ <code class="ruby"> # This method returns nil if +number+ cannot be converted into a number.</code>
1573
2081
  </li>
1574
2082
 
1575
2083
  <li class="never" data-hits="" data-linenumber="89">
1576
2084
 
1577
2085
 
1578
- <code class="ruby"> # Options for formatter.</code>
2086
+ <code class="ruby"> # You can customize the format in the +options+ hash.</code>
1579
2087
  </li>
1580
2088
 
1581
2089
  <li class="never" data-hits="" data-linenumber="90">
1582
2090
 
1583
2091
 
1584
- <code class="ruby"> # @option options [Fixnum] :precision (3)</code>
2092
+ <code class="ruby"> #</code>
1585
2093
  </li>
1586
2094
 
1587
2095
  <li class="never" data-hits="" data-linenumber="91">
1588
2096
 
1589
2097
 
1590
- <code class="ruby"> # Sets the level of precision.</code>
2098
+ <code class="ruby"> # @overload with_precision(number, options={})</code>
1591
2099
  </li>
1592
2100
 
1593
2101
  <li class="never" data-hits="" data-linenumber="92">
1594
2102
 
1595
2103
 
1596
- <code class="ruby"> # @option options [String] :separator (&quot;.&quot;)</code>
2104
+ <code class="ruby"> # @param [Fixnum, Float] number</code>
1597
2105
  </li>
1598
2106
 
1599
2107
  <li class="never" data-hits="" data-linenumber="93">
1600
2108
 
1601
2109
 
1602
- <code class="ruby"> # Sets the separator between the units.</code>
2110
+ <code class="ruby"> # Number value to format.</code>
1603
2111
  </li>
1604
2112
 
1605
2113
  <li class="never" data-hits="" data-linenumber="94">
1606
2114
 
1607
2115
 
1608
- <code class="ruby"> # @option options [String] :delimiter (&quot;&quot;)</code>
2116
+ <code class="ruby"> # @param [Hash] options</code>
1609
2117
  </li>
1610
2118
 
1611
2119
  <li class="never" data-hits="" data-linenumber="95">
1612
2120
 
1613
2121
 
1614
- <code class="ruby"> # Sets the thousands delimiter.</code>
2122
+ <code class="ruby"> # Options for formatter.</code>
1615
2123
  </li>
1616
2124
 
1617
2125
  <li class="never" data-hits="" data-linenumber="96">
1618
2126
 
1619
2127
 
1620
- <code class="ruby"> #</code>
2128
+ <code class="ruby"> # @option options [Fixnum] :precision (3)</code>
1621
2129
  </li>
1622
2130
 
1623
2131
  <li class="never" data-hits="" data-linenumber="97">
1624
2132
 
1625
2133
 
1626
- <code class="ruby"> # @return [String] The formatted representation of the number.</code>
2134
+ <code class="ruby"> # Sets the level of precision.</code>
1627
2135
  </li>
1628
2136
 
1629
2137
  <li class="never" data-hits="" data-linenumber="98">
1630
2138
 
1631
2139
 
1632
- <code class="ruby"> #</code>
2140
+ <code class="ruby"> # @option options [String] :separator (&quot;.&quot;)</code>
1633
2141
  </li>
1634
2142
 
1635
2143
  <li class="never" data-hits="" data-linenumber="99">
1636
2144
 
1637
2145
 
1638
- <code class="ruby"> # @example</code>
2146
+ <code class="ruby"> # Sets the separator between the units.</code>
1639
2147
  </li>
1640
2148
 
1641
2149
  <li class="never" data-hits="" data-linenumber="100">
1642
2150
 
1643
2151
 
1644
- <code class="ruby"> # with_precision(111.2345) # =&gt; 111.235</code>
2152
+ <code class="ruby"> # @option options [String] :delimiter (&quot;&quot;)</code>
1645
2153
  </li>
1646
2154
 
1647
2155
  <li class="never" data-hits="" data-linenumber="101">
1648
2156
 
1649
2157
 
1650
- <code class="ruby"> # with_precision(111.2345, :precision =&gt; 2) # =&gt; 111.23</code>
2158
+ <code class="ruby"> # Sets the thousands delimiter.</code>
1651
2159
  </li>
1652
2160
 
1653
2161
  <li class="never" data-hits="" data-linenumber="102">
1654
2162
 
1655
2163
 
1656
- <code class="ruby"> # with_precision(13, :precision =&gt; 5) # =&gt; 13.00000</code>
2164
+ <code class="ruby"> #</code>
1657
2165
  </li>
1658
2166
 
1659
2167
  <li class="never" data-hits="" data-linenumber="103">
1660
2168
 
1661
2169
 
1662
- <code class="ruby"> # with_precision(389.32314, :precision =&gt; 0) # =&gt; 389</code>
2170
+ <code class="ruby"> # @return [String] The formatted representation of the number.</code>
1663
2171
  </li>
1664
2172
 
1665
2173
  <li class="never" data-hits="" data-linenumber="104">
1666
2174
 
1667
2175
 
1668
- <code class="ruby"> # with_precision(1111.2345, :precision =&gt; 2, :separator =&gt; &#39;,&#39;, :delimiter =&gt; &#39;.&#39;)</code>
2176
+ <code class="ruby"> #</code>
1669
2177
  </li>
1670
2178
 
1671
2179
  <li class="never" data-hits="" data-linenumber="105">
1672
2180
 
1673
2181
 
1674
- <code class="ruby"> # # =&gt; 1.111,23</code>
2182
+ <code class="ruby"> # @example</code>
1675
2183
  </li>
1676
2184
 
1677
2185
  <li class="never" data-hits="" data-linenumber="106">
1678
2186
 
1679
2187
 
1680
- <code class="ruby"> #</code>
2188
+ <code class="ruby"> # with_precision(111.2345) # =&gt; 111.235</code>
1681
2189
  </li>
1682
2190
 
1683
- <li class="covered" data-hits="1" data-linenumber="107">
1684
- <span class="hits">1</span>
2191
+ <li class="never" data-hits="" data-linenumber="107">
2192
+
1685
2193
 
1686
- <code class="ruby"> def with_precision(number, args)</code>
2194
+ <code class="ruby"> # with_precision(111.2345, :precision =&gt; 2) # =&gt; 111.23</code>
1687
2195
  </li>
1688
2196
 
1689
- <li class="covered" data-hits="11" data-linenumber="108">
1690
- <span class="hits">11</span>
2197
+ <li class="never" data-hits="" data-linenumber="108">
1691
2198
 
1692
- <code class="ruby"> options = BB::Hash.symbolize_keys(args)</code>
2199
+
2200
+ <code class="ruby"> # with_precision(13, :precision =&gt; 5) # =&gt; 13.00000</code>
1693
2201
  </li>
1694
2202
 
1695
2203
  <li class="never" data-hits="" data-linenumber="109">
1696
2204
 
1697
2205
 
1698
- <code class="ruby"></code>
2206
+ <code class="ruby"> # with_precision(389.32314, :precision =&gt; 0) # =&gt; 389</code>
1699
2207
  </li>
1700
2208
 
1701
- <li class="covered" data-hits="11" data-linenumber="110">
1702
- <span class="hits">11</span>
2209
+ <li class="never" data-hits="" data-linenumber="110">
1703
2210
 
1704
- <code class="ruby"> precision ||= (options[:precision] || 3)</code>
1705
- </li>
1706
-
1707
- <li class="covered" data-hits="11" data-linenumber="111">
1708
- <span class="hits">11</span>
1709
2211
 
1710
- <code class="ruby"> separator ||= (options[:separator] || &#39;.&#39;)</code>
2212
+ <code class="ruby"> # with_precision(1111.2345, :precision =&gt; 2, :separator =&gt; &#39;,&#39;, :delimiter =&gt; &#39;.&#39;)</code>
1711
2213
  </li>
1712
2214
 
1713
- <li class="covered" data-hits="11" data-linenumber="112">
1714
- <span class="hits">11</span>
2215
+ <li class="never" data-hits="" data-linenumber="111">
1715
2216
 
1716
- <code class="ruby"> delimiter ||= (options[:delimiter] || &#39;&#39;)</code>
2217
+
2218
+ <code class="ruby"> # # =&gt; 1.111,23</code>
1717
2219
  </li>
1718
2220
 
1719
- <li class="never" data-hits="" data-linenumber="113">
2221
+ <li class="never" data-hits="" data-linenumber="112">
1720
2222
 
1721
2223
 
1722
- <code class="ruby"></code>
2224
+ <code class="ruby"> #</code>
1723
2225
  </li>
1724
2226
 
1725
- <li class="covered" data-hits="11" data-linenumber="114">
1726
- <span class="hits">11</span>
2227
+ <li class="covered" data-hits="1" data-linenumber="113">
2228
+ <span class="hits">1</span>
1727
2229
 
1728
- <code class="ruby"> begin</code>
2230
+ <code class="ruby"> def with_precision(number, args)</code>
1729
2231
  </li>
1730
2232
 
1731
- <li class="covered" data-hits="11" data-linenumber="115">
1732
- <span class="hits">11</span>
2233
+ <li class="covered" data-hits="14" data-linenumber="114">
2234
+ <span class="hits">14</span>
1733
2235
 
1734
- <code class="ruby"> rounded_number = (Float(number) * (10 ** precision)).round.to_f / 10 ** precision</code>
2236
+ <code class="ruby"> begin</code>
1735
2237
  </li>
1736
2238
 
1737
- <li class="covered" data-hits="11" data-linenumber="116">
1738
- <span class="hits">11</span>
2239
+ <li class="covered" data-hits="14" data-linenumber="115">
2240
+ <span class="hits">14</span>
1739
2241
 
1740
- <code class="ruby"> with_delimiter(&quot;%01.#{precision}f&quot; % rounded_number,</code>
2242
+ <code class="ruby"> Float(number)</code>
1741
2243
  </li>
1742
2244
 
1743
- <li class="never" data-hits="" data-linenumber="117">
2245
+ <li class="never" data-hits="" data-linenumber="116">
1744
2246
 
1745
2247
 
1746
- <code class="ruby"> :separator =&gt; separator,</code>
2248
+ <code class="ruby"> rescue</code>
2249
+ </li>
2250
+
2251
+ <li class="covered" data-hits="1" data-linenumber="117">
2252
+ <span class="hits">1</span>
2253
+
2254
+ <code class="ruby"> return nil</code>
1747
2255
  </li>
1748
2256
 
1749
2257
  <li class="never" data-hits="" data-linenumber="118">
1750
2258
 
1751
2259
 
1752
- <code class="ruby"> :delimiter =&gt; delimiter)</code>
2260
+ <code class="ruby"> end</code>
1753
2261
  </li>
1754
2262
 
1755
2263
  <li class="never" data-hits="" data-linenumber="119">
1756
2264
 
1757
2265
 
1758
- <code class="ruby"> rescue</code>
2266
+ <code class="ruby"></code>
1759
2267
  </li>
1760
2268
 
1761
- <li class="missed" data-hits="0" data-linenumber="120">
2269
+ <li class="covered" data-hits="13" data-linenumber="120">
2270
+ <span class="hits">13</span>
1762
2271
 
1763
-
1764
- <code class="ruby"> number</code>
2272
+ <code class="ruby"> options = BB::Hash.symbolize_keys(args)</code>
1765
2273
  </li>
1766
2274
 
1767
2275
  <li class="never" data-hits="" data-linenumber="121">
1768
2276
 
1769
2277
 
1770
- <code class="ruby"> end</code>
2278
+ <code class="ruby"></code>
1771
2279
  </li>
1772
2280
 
1773
- <li class="never" data-hits="" data-linenumber="122">
1774
-
2281
+ <li class="covered" data-hits="13" data-linenumber="122">
2282
+ <span class="hits">13</span>
1775
2283
 
1776
- <code class="ruby"> end</code>
2284
+ <code class="ruby"> precision ||= (options[:precision] || 3)</code>
1777
2285
  </li>
1778
2286
 
1779
- <li class="never" data-hits="" data-linenumber="123">
2287
+ <li class="covered" data-hits="13" data-linenumber="123">
2288
+ <span class="hits">13</span>
1780
2289
 
1781
-
1782
- <code class="ruby"></code>
2290
+ <code class="ruby"> separator ||= (options[:separator] || &#39;.&#39;)</code>
1783
2291
  </li>
1784
2292
 
1785
- <li class="never" data-hits="" data-linenumber="124">
2293
+ <li class="covered" data-hits="13" data-linenumber="124">
2294
+ <span class="hits">13</span>
1786
2295
 
1787
-
1788
- <code class="ruby"> ##</code>
2296
+ <code class="ruby"> delimiter ||= (options[:delimiter] || &#39;&#39;)</code>
1789
2297
  </li>
1790
2298
 
1791
2299
  <li class="never" data-hits="" data-linenumber="125">
1792
2300
 
1793
2301
 
1794
- <code class="ruby"> # Formats a +number+ with grouped thousands using +delimiter+ (e.g., 12,324). You can</code>
2302
+ <code class="ruby"></code>
1795
2303
  </li>
1796
2304
 
1797
- <li class="never" data-hits="" data-linenumber="126">
2305
+ <li class="covered" data-hits="13" data-linenumber="126">
2306
+ <span class="hits">13</span>
1798
2307
 
1799
-
1800
- <code class="ruby"> # customize the format in the +options+ hash.</code>
2308
+ <code class="ruby"> begin</code>
1801
2309
  </li>
1802
2310
 
1803
- <li class="never" data-hits="" data-linenumber="127">
1804
-
2311
+ <li class="covered" data-hits="13" data-linenumber="127">
2312
+ <span class="hits">13</span>
1805
2313
 
1806
- <code class="ruby"> #</code>
2314
+ <code class="ruby"> rounded_number = (Float(number) * (10**precision)).round.to_f / 10**precision</code>
1807
2315
  </li>
1808
2316
 
1809
- <li class="never" data-hits="" data-linenumber="128">
1810
-
2317
+ <li class="covered" data-hits="12" data-linenumber="128">
2318
+ <span class="hits">12</span>
1811
2319
 
1812
- <code class="ruby"> # @overload with_delimiter(number, options={})</code>
2320
+ <code class="ruby"> with_delimiter(&quot;%01.#{precision}f&quot; % rounded_number,</code>
1813
2321
  </li>
1814
2322
 
1815
2323
  <li class="never" data-hits="" data-linenumber="129">
1816
2324
 
1817
2325
 
1818
- <code class="ruby"> # @param [Fixnum, Float] number</code>
2326
+ <code class="ruby"> separator: separator,</code>
1819
2327
  </li>
1820
2328
 
1821
2329
  <li class="never" data-hits="" data-linenumber="130">
1822
2330
 
1823
2331
 
1824
- <code class="ruby"> # Number value to format.</code>
2332
+ <code class="ruby"> delimiter: delimiter)</code>
1825
2333
  </li>
1826
2334
 
1827
2335
  <li class="never" data-hits="" data-linenumber="131">
1828
2336
 
1829
2337
 
1830
- <code class="ruby"> # @param [Hash] options</code>
2338
+ <code class="ruby"> rescue</code>
1831
2339
  </li>
1832
2340
 
1833
- <li class="never" data-hits="" data-linenumber="132">
1834
-
2341
+ <li class="covered" data-hits="1" data-linenumber="132">
2342
+ <span class="hits">1</span>
1835
2343
 
1836
- <code class="ruby"> # Options for formatter.</code>
2344
+ <code class="ruby"> number</code>
1837
2345
  </li>
1838
2346
 
1839
2347
  <li class="never" data-hits="" data-linenumber="133">
1840
2348
 
1841
2349
 
1842
- <code class="ruby"> # @option options [String] :delimiter (&quot;, &quot;)</code>
2350
+ <code class="ruby"> end</code>
1843
2351
  </li>
1844
2352
 
1845
2353
  <li class="never" data-hits="" data-linenumber="134">
1846
2354
 
1847
2355
 
1848
- <code class="ruby"> # Sets the thousands delimiter.</code>
2356
+ <code class="ruby"> end</code>
1849
2357
  </li>
1850
2358
 
1851
2359
  <li class="never" data-hits="" data-linenumber="135">
1852
2360
 
1853
2361
 
1854
- <code class="ruby"> # @option options [String] :separator (&quot;.&quot;)</code>
2362
+ <code class="ruby"></code>
1855
2363
  </li>
1856
2364
 
1857
2365
  <li class="never" data-hits="" data-linenumber="136">
1858
2366
 
1859
2367
 
1860
- <code class="ruby"> # Sets the separator between the units.</code>
2368
+ <code class="ruby"> ##</code>
1861
2369
  </li>
1862
2370
 
1863
2371
  <li class="never" data-hits="" data-linenumber="137">
1864
2372
 
1865
2373
 
1866
- <code class="ruby"> #</code>
2374
+ <code class="ruby"> # Formats a +number+ with grouped thousands using +delimiter+ (e.g., 12,324).</code>
1867
2375
  </li>
1868
2376
 
1869
2377
  <li class="never" data-hits="" data-linenumber="138">
1870
2378
 
1871
2379
 
1872
- <code class="ruby"> # @return [String] The formatted representation of the number.</code>
2380
+ <code class="ruby"> # This method returns nil if +number+ cannot be converted into a number.</code>
1873
2381
  </li>
1874
2382
 
1875
2383
  <li class="never" data-hits="" data-linenumber="139">
1876
2384
 
1877
2385
 
1878
- <code class="ruby"> #</code>
2386
+ <code class="ruby"> # You can customize the format in the +options+ hash.</code>
1879
2387
  </li>
1880
2388
 
1881
2389
  <li class="never" data-hits="" data-linenumber="140">
1882
2390
 
1883
2391
 
1884
- <code class="ruby"> # @example</code>
2392
+ <code class="ruby"> #</code>
1885
2393
  </li>
1886
2394
 
1887
2395
  <li class="never" data-hits="" data-linenumber="141">
1888
2396
 
1889
2397
 
1890
- <code class="ruby"> # with_delimiter(12345678) # =&gt; 12,345,678</code>
2398
+ <code class="ruby"> # @overload with_delimiter(number, options={})</code>
1891
2399
  </li>
1892
2400
 
1893
2401
  <li class="never" data-hits="" data-linenumber="142">
1894
2402
 
1895
2403
 
1896
- <code class="ruby"> # with_delimiter(12345678.05) # =&gt; 12,345,678.05</code>
2404
+ <code class="ruby"> # @param [Fixnum, Float] number</code>
1897
2405
  </li>
1898
2406
 
1899
2407
  <li class="never" data-hits="" data-linenumber="143">
1900
2408
 
1901
2409
 
1902
- <code class="ruby"> # with_delimiter(12345678, :delimiter =&gt; &quot;.&quot;) # =&gt; 12.345.678</code>
2410
+ <code class="ruby"> # Number value to format.</code>
1903
2411
  </li>
1904
2412
 
1905
2413
  <li class="never" data-hits="" data-linenumber="144">
1906
2414
 
1907
2415
 
1908
- <code class="ruby"> # with_delimiter(12345678, :separator =&gt; &quot;,&quot;) # =&gt; 12,345,678</code>
2416
+ <code class="ruby"> # @param [Hash] options</code>
1909
2417
  </li>
1910
2418
 
1911
2419
  <li class="never" data-hits="" data-linenumber="145">
1912
2420
 
1913
2421
 
1914
- <code class="ruby"> # with_delimiter(98765432.98, :delimiter =&gt; &quot; &quot;, :separator =&gt; &quot;,&quot;)</code>
2422
+ <code class="ruby"> # Options for formatter.</code>
1915
2423
  </li>
1916
2424
 
1917
2425
  <li class="never" data-hits="" data-linenumber="146">
1918
2426
 
1919
2427
 
1920
- <code class="ruby"> # # =&gt; 98 765 432,98</code>
2428
+ <code class="ruby"> # @option options [String] :delimiter (&quot;, &quot;)</code>
1921
2429
  </li>
1922
2430
 
1923
2431
  <li class="never" data-hits="" data-linenumber="147">
1924
2432
 
1925
2433
 
1926
- <code class="ruby"> #</code>
2434
+ <code class="ruby"> # Sets the thousands delimiter.</code>
1927
2435
  </li>
1928
2436
 
1929
- <li class="covered" data-hits="1" data-linenumber="148">
1930
- <span class="hits">1</span>
2437
+ <li class="never" data-hits="" data-linenumber="148">
1931
2438
 
1932
- <code class="ruby"> def with_delimiter(number, args)</code>
2439
+
2440
+ <code class="ruby"> # @option options [String] :separator (&quot;.&quot;)</code>
1933
2441
  </li>
1934
2442
 
1935
- <li class="covered" data-hits="12" data-linenumber="149">
1936
- <span class="hits">12</span>
2443
+ <li class="never" data-hits="" data-linenumber="149">
2444
+
1937
2445
 
1938
- <code class="ruby"> options = BB::Hash.symbolize_keys(args)</code>
2446
+ <code class="ruby"> # Sets the separator between the units.</code>
1939
2447
  </li>
1940
2448
 
1941
2449
  <li class="never" data-hits="" data-linenumber="150">
1942
2450
 
1943
2451
 
1944
- <code class="ruby"></code>
2452
+ <code class="ruby"> #</code>
1945
2453
  </li>
1946
2454
 
1947
- <li class="covered" data-hits="12" data-linenumber="151">
1948
- <span class="hits">12</span>
2455
+ <li class="never" data-hits="" data-linenumber="151">
1949
2456
 
1950
- <code class="ruby"> delimiter ||= (options[:delimiter] || &#39;.&#39;)</code>
2457
+
2458
+ <code class="ruby"> # @return [String] The formatted representation of the number.</code>
1951
2459
  </li>
1952
2460
 
1953
- <li class="covered" data-hits="12" data-linenumber="152">
1954
- <span class="hits">12</span>
2461
+ <li class="never" data-hits="" data-linenumber="152">
1955
2462
 
1956
- <code class="ruby"> separator ||= (options[:separator] || &#39;,&#39;)</code>
2463
+
2464
+ <code class="ruby"> #</code>
1957
2465
  </li>
1958
2466
 
1959
2467
  <li class="never" data-hits="" data-linenumber="153">
1960
2468
 
1961
2469
 
1962
- <code class="ruby"></code>
2470
+ <code class="ruby"> # @example</code>
1963
2471
  </li>
1964
2472
 
1965
- <li class="covered" data-hits="12" data-linenumber="154">
1966
- <span class="hits">12</span>
2473
+ <li class="never" data-hits="" data-linenumber="154">
2474
+
1967
2475
 
1968
- <code class="ruby"> begin</code>
2476
+ <code class="ruby"> # with_delimiter(12345678) # =&gt; 12,345,678</code>
1969
2477
  </li>
1970
2478
 
1971
- <li class="covered" data-hits="12" data-linenumber="155">
1972
- <span class="hits">12</span>
2479
+ <li class="never" data-hits="" data-linenumber="155">
2480
+
1973
2481
 
1974
- <code class="ruby"> parts = number.to_s.split(&#39;.&#39;)</code>
2482
+ <code class="ruby"> # with_delimiter(12345678.05) # =&gt; 12,345,678.05</code>
1975
2483
  </li>
1976
2484
 
1977
- <li class="covered" data-hits="12" data-linenumber="156">
1978
- <span class="hits">12</span>
2485
+ <li class="never" data-hits="" data-linenumber="156">
2486
+
1979
2487
 
1980
- <code class="ruby"> parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, &quot;\\1#{delimiter}&quot;)</code>
2488
+ <code class="ruby"> # with_delimiter(12345678, :delimiter =&gt; &quot;.&quot;) # =&gt; 12.345.678</code>
1981
2489
  </li>
1982
2490
 
1983
- <li class="covered" data-hits="12" data-linenumber="157">
1984
- <span class="hits">12</span>
2491
+ <li class="never" data-hits="" data-linenumber="157">
2492
+
1985
2493
 
1986
- <code class="ruby"> parts.join(separator)</code>
2494
+ <code class="ruby"> # with_delimiter(12345678, :separator =&gt; &quot;,&quot;) # =&gt; 12,345,678</code>
1987
2495
  </li>
1988
2496
 
1989
2497
  <li class="never" data-hits="" data-linenumber="158">
1990
2498
 
1991
2499
 
1992
- <code class="ruby"> rescue</code>
2500
+ <code class="ruby"> # with_delimiter(98765432.98, :delimiter =&gt; &quot; &quot;, :separator =&gt; &quot;,&quot;)</code>
1993
2501
  </li>
1994
2502
 
1995
- <li class="missed" data-hits="0" data-linenumber="159">
2503
+ <li class="never" data-hits="" data-linenumber="159">
1996
2504
 
1997
2505
 
1998
- <code class="ruby"> number</code>
2506
+ <code class="ruby"> # # =&gt; 98 765 432,98</code>
1999
2507
  </li>
2000
2508
 
2001
2509
  <li class="never" data-hits="" data-linenumber="160">
2002
2510
 
2003
2511
 
2004
- <code class="ruby"> end</code>
2512
+ <code class="ruby"> #</code>
2513
+ </li>
2514
+
2515
+ <li class="covered" data-hits="1" data-linenumber="161">
2516
+ <span class="hits">1</span>
2517
+
2518
+ <code class="ruby"> def with_delimiter(number, args = {})</code>
2519
+ </li>
2520
+
2521
+ <li class="covered" data-hits="17" data-linenumber="162">
2522
+ <span class="hits">17</span>
2523
+
2524
+ <code class="ruby"> begin</code>
2005
2525
  </li>
2006
2526
 
2007
- <li class="never" data-hits="" data-linenumber="161">
2527
+ <li class="covered" data-hits="17" data-linenumber="163">
2528
+ <span class="hits">17</span>
2529
+
2530
+ <code class="ruby"> Float(number)</code>
2531
+ </li>
2532
+
2533
+ <li class="never" data-hits="" data-linenumber="164">
2008
2534
 
2009
2535
 
2010
- <code class="ruby"> end</code>
2536
+ <code class="ruby"> rescue</code>
2537
+ </li>
2538
+
2539
+ <li class="covered" data-hits="1" data-linenumber="165">
2540
+ <span class="hits">1</span>
2541
+
2542
+ <code class="ruby"> return nil</code>
2011
2543
  </li>
2012
2544
 
2013
- <li class="never" data-hits="" data-linenumber="162">
2545
+ <li class="never" data-hits="" data-linenumber="166">
2546
+
2014
2547
 
2548
+ <code class="ruby"> end</code>
2549
+ </li>
2550
+
2551
+ <li class="covered" data-hits="16" data-linenumber="167">
2552
+ <span class="hits">16</span>
2015
2553
 
2016
- <code class="ruby"> end</code>
2554
+ <code class="ruby"> options = BB::Hash.symbolize_keys(args)</code>
2017
2555
  </li>
2018
2556
 
2019
- <li class="never" data-hits="" data-linenumber="163">
2557
+ <li class="never" data-hits="" data-linenumber="168">
2020
2558
 
2021
2559
 
2022
- <code class="ruby"> end</code>
2560
+ <code class="ruby"></code>
2023
2561
  </li>
2024
2562
 
2025
- <li class="never" data-hits="" data-linenumber="164">
2563
+ <li class="covered" data-hits="16" data-linenumber="169">
2564
+ <span class="hits">16</span>
2026
2565
 
2566
+ <code class="ruby"> delimiter ||= (options[:delimiter] || &#39;,&#39;)</code>
2567
+ </li>
2568
+
2569
+ <li class="covered" data-hits="16" data-linenumber="170">
2570
+ <span class="hits">16</span>
2027
2571
 
2028
- <code class="ruby">end</code>
2572
+ <code class="ruby"> separator ||= (options[:separator] || &#39;.&#39;)</code>
2029
2573
  </li>
2030
2574
 
2031
- <li class="never" data-hits="" data-linenumber="165">
2575
+ <li class="never" data-hits="" data-linenumber="171">
2032
2576
 
2033
2577
 
2034
2578
  <code class="ruby"></code>
2035
2579
  </li>
2036
2580
 
2581
+ <li class="covered" data-hits="16" data-linenumber="172">
2582
+ <span class="hits">16</span>
2583
+
2584
+ <code class="ruby"> begin</code>
2585
+ </li>
2586
+
2587
+ <li class="covered" data-hits="16" data-linenumber="173">
2588
+ <span class="hits">16</span>
2589
+
2590
+ <code class="ruby"> parts = number.to_s.split(&#39;.&#39;)</code>
2591
+ </li>
2592
+
2593
+ <li class="covered" data-hits="16" data-linenumber="174">
2594
+ <span class="hits">16</span>
2595
+
2596
+ <code class="ruby"> parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, &quot;\\1#{delimiter}&quot;)</code>
2597
+ </li>
2598
+
2599
+ <li class="covered" data-hits="16" data-linenumber="175">
2600
+ <span class="hits">16</span>
2601
+
2602
+ <code class="ruby"> parts.join(separator)</code>
2603
+ </li>
2604
+
2605
+ <li class="never" data-hits="" data-linenumber="176">
2606
+
2607
+
2608
+ <code class="ruby"> rescue</code>
2609
+ </li>
2610
+
2611
+ <li class="covered" data-hits="1" data-linenumber="177">
2612
+ <span class="hits">1</span>
2613
+
2614
+ <code class="ruby"> number</code>
2615
+ </li>
2616
+
2617
+ <li class="never" data-hits="" data-linenumber="178">
2618
+
2619
+
2620
+ <code class="ruby"> end</code>
2621
+ </li>
2622
+
2623
+ <li class="never" data-hits="" data-linenumber="179">
2624
+
2625
+
2626
+ <code class="ruby"> end</code>
2627
+ </li>
2628
+
2629
+ <li class="never" data-hits="" data-linenumber="180">
2630
+
2631
+
2632
+ <code class="ruby"> end</code>
2633
+ </li>
2634
+
2635
+ <li class="never" data-hits="" data-linenumber="181">
2636
+
2637
+
2638
+ <code class="ruby"> end</code>
2639
+ </li>
2640
+
2641
+ <li class="never" data-hits="" data-linenumber="182">
2642
+
2643
+
2644
+ <code class="ruby">end</code>
2645
+ </li>
2646
+
2037
2647
  </ol>
2038
2648
  </pre>
2039
2649
  </div>
2040
2650
 
2041
- <div class="source_table" id="b75f047c409859a12a41002ece7dbd0d81dd859d">
2651
+ <div class="source_table" id="1503164dbfa2b2b494fd2100a9b38b04be306a6e">
2042
2652
  <div class="header">
2043
2653
  <h3>lib/blackbox/string.rb</h3>
2044
2654
  <h4><span class="green">100.0 %</span> covered</h4>
@@ -2052,106 +2662,106 @@
2052
2662
  <pre>
2053
2663
  <ol>
2054
2664
 
2055
- <li class="covered" data-hits="1" data-linenumber="1">
2665
+ <li class="never" data-hits="" data-linenumber="1">
2666
+
2667
+
2668
+ <code class="ruby"># frozen_string_literal: true</code>
2669
+ </li>
2670
+
2671
+ <li class="covered" data-hits="1" data-linenumber="2">
2056
2672
  <span class="hits">1</span>
2057
2673
 
2058
2674
  <code class="ruby">module BB</code>
2059
2675
  </li>
2060
2676
 
2061
- <li class="never" data-hits="" data-linenumber="2">
2677
+ <li class="never" data-hits="" data-linenumber="3">
2062
2678
 
2063
2679
 
2064
2680
  <code class="ruby"> # String utilities.</code>
2065
2681
  </li>
2066
2682
 
2067
- <li class="covered" data-hits="1" data-linenumber="3">
2683
+ <li class="covered" data-hits="1" data-linenumber="4">
2068
2684
  <span class="hits">1</span>
2069
2685
 
2070
2686
  <code class="ruby"> module String</code>
2071
2687
  </li>
2072
2688
 
2073
- <li class="covered" data-hits="1" data-linenumber="4">
2689
+ <li class="covered" data-hits="1" data-linenumber="5">
2074
2690
  <span class="hits">1</span>
2075
2691
 
2076
- <code class="ruby"> class &lt;&lt; self </code>
2692
+ <code class="ruby"> class &lt;&lt; self</code>
2077
2693
  </li>
2078
2694
 
2079
- <li class="never" data-hits="" data-linenumber="5">
2695
+ <li class="never" data-hits="" data-linenumber="6">
2080
2696
 
2081
2697
 
2082
2698
  <code class="ruby"> # Strip ANSI escape sequences from String.</code>
2083
2699
  </li>
2084
2700
 
2085
- <li class="never" data-hits="" data-linenumber="6">
2701
+ <li class="never" data-hits="" data-linenumber="7">
2086
2702
 
2087
2703
 
2088
2704
  <code class="ruby"> #</code>
2089
2705
  </li>
2090
2706
 
2091
- <li class="never" data-hits="" data-linenumber="7">
2707
+ <li class="never" data-hits="" data-linenumber="8">
2092
2708
 
2093
2709
 
2094
2710
  <code class="ruby"> # @param [String] text Input string (dirty)</code>
2095
2711
  </li>
2096
2712
 
2097
- <li class="never" data-hits="" data-linenumber="8">
2713
+ <li class="never" data-hits="" data-linenumber="9">
2098
2714
 
2099
2715
 
2100
2716
  <code class="ruby"> # @return [String] Output string (cleaned)</code>
2101
2717
  </li>
2102
2718
 
2103
- <li class="covered" data-hits="1" data-linenumber="9">
2719
+ <li class="covered" data-hits="1" data-linenumber="10">
2104
2720
  <span class="hits">1</span>
2105
2721
 
2106
2722
  <code class="ruby"> def strip_ansi(text)</code>
2107
2723
  </li>
2108
2724
 
2109
- <li class="never" data-hits="" data-linenumber="10">
2725
+ <li class="never" data-hits="" data-linenumber="11">
2110
2726
 
2111
2727
 
2112
- <code class="ruby"> text.gsub(/\x1b(\[|\(|\))[;?0-9]*[0-9A-Za-z]/, &#39;&#39;).</code>
2728
+ <code class="ruby"> text.gsub(/\x1b(\[|\(|\))[;?0-9]*[0-9A-Za-z]/, &#39;&#39;)</code>
2113
2729
  </li>
2114
2730
 
2115
- <li class="never" data-hits="" data-linenumber="11">
2731
+ <li class="never" data-hits="" data-linenumber="12">
2116
2732
 
2117
2733
 
2118
- <code class="ruby"> gsub(/\x1b(\[|\(|\))[;?0-9]*[0-9A-Za-z]/, &#39;&#39;).</code>
2734
+ <code class="ruby"> .gsub(/\x1b(\[|\(|\))[;?0-9]*[0-9A-Za-z]/, &#39;&#39;)</code>
2119
2735
  </li>
2120
2736
 
2121
- <li class="covered" data-hits="1" data-linenumber="12">
2737
+ <li class="covered" data-hits="1" data-linenumber="13">
2122
2738
  <span class="hits">1</span>
2123
2739
 
2124
- <code class="ruby"> gsub(/(\x03|\x1a)/, &#39;&#39;)</code>
2125
- </li>
2126
-
2127
- <li class="never" data-hits="" data-linenumber="13">
2128
-
2129
-
2130
- <code class="ruby"> end</code>
2740
+ <code class="ruby"> .gsub(/(\x03|\x1a)/, &#39;&#39;)</code>
2131
2741
  </li>
2132
2742
 
2133
2743
  <li class="never" data-hits="" data-linenumber="14">
2134
2744
 
2135
2745
 
2136
- <code class="ruby"> end</code>
2746
+ <code class="ruby"> end</code>
2137
2747
  </li>
2138
2748
 
2139
2749
  <li class="never" data-hits="" data-linenumber="15">
2140
2750
 
2141
2751
 
2142
- <code class="ruby"> end</code>
2752
+ <code class="ruby"> end</code>
2143
2753
  </li>
2144
2754
 
2145
2755
  <li class="never" data-hits="" data-linenumber="16">
2146
2756
 
2147
2757
 
2148
- <code class="ruby">end</code>
2758
+ <code class="ruby"> end</code>
2149
2759
  </li>
2150
2760
 
2151
2761
  <li class="never" data-hits="" data-linenumber="17">
2152
2762
 
2153
2763
 
2154
- <code class="ruby"></code>
2764
+ <code class="ruby">end</code>
2155
2765
  </li>
2156
2766
 
2157
2767
  </ol>