ruby_redis_lock 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. data/.loadpath +5 -0
  2. data/.project +17 -0
  3. data/Gemfile +5 -0
  4. data/Gemfile.lock +31 -0
  5. data/Readme.md +85 -0
  6. data/coverage/.resultset.json +240 -0
  7. data/coverage/assets/0.5.3/app.js +88 -0
  8. data/coverage/assets/0.5.3/fancybox/blank.gif +0 -0
  9. data/coverage/assets/0.5.3/fancybox/fancy_close.png +0 -0
  10. data/coverage/assets/0.5.3/fancybox/fancy_loading.png +0 -0
  11. data/coverage/assets/0.5.3/fancybox/fancy_nav_left.png +0 -0
  12. data/coverage/assets/0.5.3/fancybox/fancy_nav_right.png +0 -0
  13. data/coverage/assets/0.5.3/fancybox/fancy_shadow_e.png +0 -0
  14. data/coverage/assets/0.5.3/fancybox/fancy_shadow_n.png +0 -0
  15. data/coverage/assets/0.5.3/fancybox/fancy_shadow_ne.png +0 -0
  16. data/coverage/assets/0.5.3/fancybox/fancy_shadow_nw.png +0 -0
  17. data/coverage/assets/0.5.3/fancybox/fancy_shadow_s.png +0 -0
  18. data/coverage/assets/0.5.3/fancybox/fancy_shadow_se.png +0 -0
  19. data/coverage/assets/0.5.3/fancybox/fancy_shadow_sw.png +0 -0
  20. data/coverage/assets/0.5.3/fancybox/fancy_shadow_w.png +0 -0
  21. data/coverage/assets/0.5.3/fancybox/fancy_title_left.png +0 -0
  22. data/coverage/assets/0.5.3/fancybox/fancy_title_main.png +0 -0
  23. data/coverage/assets/0.5.3/fancybox/fancy_title_over.png +0 -0
  24. data/coverage/assets/0.5.3/fancybox/fancy_title_right.png +0 -0
  25. data/coverage/assets/0.5.3/fancybox/fancybox-x.png +0 -0
  26. data/coverage/assets/0.5.3/fancybox/fancybox-y.png +0 -0
  27. data/coverage/assets/0.5.3/fancybox/fancybox.png +0 -0
  28. data/coverage/assets/0.5.3/fancybox/jquery.fancybox-1.3.1.css +363 -0
  29. data/coverage/assets/0.5.3/fancybox/jquery.fancybox-1.3.1.pack.js +44 -0
  30. data/coverage/assets/0.5.3/favicon_green.png +0 -0
  31. data/coverage/assets/0.5.3/favicon_red.png +0 -0
  32. data/coverage/assets/0.5.3/favicon_yellow.png +0 -0
  33. data/coverage/assets/0.5.3/highlight.css +129 -0
  34. data/coverage/assets/0.5.3/highlight.pack.js +1 -0
  35. data/coverage/assets/0.5.3/jquery-1.6.2.min.js +18 -0
  36. data/coverage/assets/0.5.3/jquery.dataTables.min.js +152 -0
  37. data/coverage/assets/0.5.3/jquery.timeago.js +141 -0
  38. data/coverage/assets/0.5.3/jquery.url.js +174 -0
  39. data/coverage/assets/0.5.3/loading.gif +0 -0
  40. data/coverage/assets/0.5.3/magnify.png +0 -0
  41. data/coverage/assets/0.5.3/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  42. data/coverage/assets/0.5.3/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  43. data/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  44. data/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  45. data/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  46. data/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  47. data/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  48. data/coverage/assets/0.5.3/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  49. data/coverage/assets/0.5.3/smoothness/images/ui-icons_222222_256x240.png +0 -0
  50. data/coverage/assets/0.5.3/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  51. data/coverage/assets/0.5.3/smoothness/images/ui-icons_454545_256x240.png +0 -0
  52. data/coverage/assets/0.5.3/smoothness/images/ui-icons_888888_256x240.png +0 -0
  53. data/coverage/assets/0.5.3/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  54. data/coverage/assets/0.5.3/smoothness/jquery-ui-1.8.4.custom.css +295 -0
  55. data/coverage/assets/0.5.3/stylesheet.css +383 -0
  56. data/coverage/index.html +1575 -0
  57. data/lib/ruby_redis_lock.rb +9 -0
  58. data/lib/ruby_redis_lock/ruby_redis_lock.rb +66 -0
  59. data/redis_test.bat +2 -0
  60. data/ruby_redis_lock.gemspec +21 -0
  61. data/ruby_redis_lock.rdb +1 -0
  62. data/spec/acquire_lock_spec.rb +44 -0
  63. data/spec/lock_spec.rb +73 -0
  64. data/spec/release_lock_spec.rb +22 -0
  65. data/spec/spec_helper.rb +20 -0
  66. data/spec/try_acquire_lock_spec.rb +31 -0
  67. data/test.conf +1 -0
  68. metadata +112 -0
@@ -0,0 +1,383 @@
1
+ /* -----------------------------------------------------------------------
2
+
3
+
4
+ Blueprint CSS Framework 0.9
5
+ http://blueprintcss.org
6
+
7
+ * Copyright (c) 2007-Present. See LICENSE for more info.
8
+ * See README for instructions on how to use Blueprint.
9
+ * For credits and origins, see AUTHORS.
10
+ * This is a compressed file. See the sources in the 'src' directory.
11
+
12
+ ----------------------------------------------------------------------- */
13
+
14
+ /* reset.css */
15
+ html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section {margin:0;padding:0;border:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline;}
16
+ article, aside, dialog, figure, footer, header, hgroup, nav, section {display:block;}
17
+ body {line-height:1.5;}
18
+ table {border-collapse:separate;border-spacing:0;}
19
+ caption, th, td {text-align:left;font-weight:normal;}
20
+ table, td, th {vertical-align:middle;}
21
+ blockquote:before, blockquote:after, q:before, q:after {content:"";}
22
+ blockquote, q {quotes:"" "";}
23
+ a img {border:none;}
24
+
25
+ /* typography.css */
26
+ html {font-size:100.01%;}
27
+ body {font-size:82%;color:#222;background:#fff;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;}
28
+ h1, h2, h3, h4, h5, h6 {font-weight:normal;color:#111;}
29
+ h1 {font-size:3em;line-height:1;margin-bottom:0.5em;}
30
+ h2 {font-size:2em;margin-bottom:0.75em;}
31
+ h3 {font-size:1.5em;line-height:1;margin-bottom:1em;}
32
+ h4 {font-size:1.2em;line-height:1.25;margin-bottom:1.25em;}
33
+ h5 {font-size:1em;font-weight:bold;margin-bottom:1.5em;}
34
+ h6 {font-size:1em;font-weight:bold;}
35
+ h1 img, h2 img, h3 img, h4 img, h5 img, h6 img {margin:0;}
36
+ p {margin:0 0 1.5em;}
37
+ p img.left {float:left;margin:1.5em 1.5em 1.5em 0;padding:0;}
38
+ p img.right {float:right;margin:1.5em 0 1.5em 1.5em;}
39
+ a:focus, a:hover {color:#000;}
40
+ a {color:#009;text-decoration:underline;}
41
+ blockquote {margin:1.5em;color:#666;font-style:italic;}
42
+ strong {font-weight:bold;}
43
+ em, dfn {font-style:italic;}
44
+ dfn {font-weight:bold;}
45
+ sup, sub {line-height:0;}
46
+ abbr, acronym {border-bottom:1px dotted #666;}
47
+ address {margin:0 0 1.5em;font-style:italic;}
48
+ del {color:#666;}
49
+ pre {margin:1.5em 0;white-space:pre;}
50
+ pre, code, tt {font:1em 'andale mono', 'lucida console', monospace;line-height:1.5;}
51
+ li ul, li ol {margin:0;}
52
+ ul, ol {margin:0 1.5em 1.5em 0;padding-left:3.333em;}
53
+ ul {list-style-type:disc;}
54
+ ol {list-style-type:decimal;}
55
+ dl {margin:0 0 1.5em 0;}
56
+ dl dt {font-weight:bold;}
57
+ dd {margin-left:1.5em;}
58
+ table {margin-bottom:1.4em;width:100%;}
59
+ th {font-weight:bold;}
60
+ thead th {background:#c3d9ff;}
61
+ th, td, caption {padding:4px 10px 4px 5px;}
62
+ tr.even td {background:#efefef;}
63
+ tfoot {font-style:italic;}
64
+ caption {background:#eee;}
65
+ .small {font-size:.8em;margin-bottom:1.875em;line-height:1.875em;}
66
+ .large {font-size:1.2em;line-height:2.5em;margin-bottom:1.25em;}
67
+ .hide {display:none;}
68
+ .quiet {color:#666;}
69
+ .loud {color:#000;}
70
+ .highlight {background:#ff0;}
71
+ .added {background:#060;color:#fff;}
72
+ .removed {background:#900;color:#fff;}
73
+ .first {margin-left:0;padding-left:0;}
74
+ .last {margin-right:0;padding-right:0;}
75
+ .top {margin-top:0;padding-top:0;}
76
+ .bottom {margin-bottom:0;padding-bottom:0;}
77
+
78
+ /* forms.css */
79
+ label {font-weight:bold;}
80
+ fieldset {padding:1.4em;margin:0 0 1.5em 0;border:1px solid #ccc;}
81
+ legend {font-weight:bold;font-size:1.2em;}
82
+ input[type=text], input[type=password], input.text, input.title, textarea, select {background-color:#fff;border:1px solid #bbb;}
83
+ input[type=text]:focus, input[type=password]:focus, input.text:focus, input.title:focus, textarea:focus, select:focus {border-color:#666;}
84
+ input[type=text], input[type=password], input.text, input.title, textarea, select {margin:0.5em 0;}
85
+ input.text, input.title {width:300px;padding:5px;}
86
+ input.title {font-size:1.5em;}
87
+ textarea {width:390px;height:250px;padding:5px;}
88
+ input[type=checkbox], input[type=radio], input.checkbox, input.radio {position:relative;top:.25em;}
89
+ form.inline {line-height:3;}
90
+ form.inline p {margin-bottom:0;}
91
+ .error, .notice, .success {padding:.8em;margin-bottom:1em;border:2px solid #ddd;}
92
+ .error {background:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;}
93
+ .notice {background:#FFF6BF;color:#514721;border-color:#FFD324;}
94
+ .success {background:#E6EFC2;color:#264409;border-color:#C6D880;}
95
+ .error a {color:#8a1f11;}
96
+ .notice a {color:#514721;}
97
+ .success a {color:#264409;}
98
+ .box {padding:1.5em;margin-bottom:1.5em;background:#E5ECF9;}
99
+ hr {background:#ddd;color:#ddd;clear:both;float:none;width:100%;height:.1em;margin:0 0 1.45em;border:none;}
100
+ hr.space {background:#fff;color:#fff;visibility:hidden;}
101
+ .clearfix:after, .container:after {content:"\0020";display:block;height:0;clear:both;visibility:hidden;overflow:hidden;}
102
+ .clearfix, .container {display:block;}
103
+ .clear {clear:both;}
104
+
105
+ #loading {
106
+ position: fixed;
107
+ left: 40%;
108
+ top: 50%;
109
+ }
110
+
111
+ a {
112
+ color: #333;
113
+ text-decoration: none;
114
+ }
115
+
116
+ a:hover {
117
+ color: #000;
118
+ text-decoration: underline;
119
+ }
120
+
121
+ body {
122
+ font-family: "Lucida Grande", Helvetica, "Helvetica Neue", Arial, sans-serif;
123
+ padding: 12px;
124
+ background-color: #333;
125
+ }
126
+
127
+ h1, h2, h3, h4 {
128
+ color: #1C2324;
129
+ margin: 0;
130
+ padding: 0;
131
+ margin-bottom: 12px;
132
+ }
133
+
134
+ table {
135
+ width: 100%;
136
+ }
137
+
138
+ #content {
139
+ clear: left;
140
+ background-color: white;
141
+ border: 2px solid #ddd;
142
+ border-top: 8px solid #ddd;
143
+ padding: 18px;
144
+ -webkit-border-bottom-left-radius: 5px;
145
+ -webkit-border-bottom-right-radius: 5px;
146
+ -webkit-border-top-right-radius: 5px;
147
+ -moz-border-radius-bottomleft: 5px;
148
+ -moz-border-radius-bottomright: 5px;
149
+ -moz-border-radius-topright: 5px;
150
+ border-bottom-left-radius: 5px;
151
+ border-bottom-right-radius: 5px;
152
+ border-top-right-radius: 5px;
153
+ }
154
+
155
+ .dataTables_filter, .dataTables_info {
156
+ padding: 2px 6px;
157
+ }
158
+
159
+ abbr.timeago {
160
+ text-decoration: none;
161
+ border: none;
162
+ font-weight: bold;
163
+ }
164
+
165
+ .timestamp {
166
+ float: right;
167
+ color: #ddd;
168
+ }
169
+
170
+ .group_tabs {
171
+ list-style: none;
172
+ float: left;
173
+ margin: 0;
174
+ padding: 0;
175
+ }
176
+ .group_tabs li {
177
+ display: inline;
178
+ float: left;
179
+ }
180
+
181
+ .group_tabs li a {
182
+ font-family: Helvetica, Arial, sans-serif;
183
+ display: block;
184
+ float: left;
185
+ text-decoration: none;
186
+ padding: 4px 8px;
187
+ background-color: #aaa;
188
+ background: -webkit-gradient(linear, 0 0, 0 bottom, from(#DDD), to(#aaa));
189
+ background: -moz-linear-gradient(#DDD, #aaa);
190
+ background: linear-gradient(#DDD, #aaa);
191
+ text-shadow: #e5e5e5 1px 1px 0px;
192
+ border-bottom: none;
193
+ color: #333;
194
+ font-weight: bold;
195
+ margin-right: 8px;
196
+ border-top: 1px solid #efefef;
197
+ -webkit-border-top-left-radius: 2px;
198
+ -webkit-border-top-right-radius: 2px;
199
+ -moz-border-radius-topleft: 2px;
200
+ -moz-border-radius-topright: 2px;
201
+ border-top-left-radius: 2px;
202
+ border-top-right-radius: 2px;
203
+ }
204
+
205
+ .group_tabs li a:hover {
206
+ background-color: #ccc;
207
+ background: -webkit-gradient(linear, 0 0, 0 bottom, from(#eee), to(#aaa));
208
+ background: -moz-linear-gradient(#eee, #aaa);
209
+ background: linear-gradient(#eee, #aaa);
210
+ }
211
+
212
+ .group_tabs li a:active {
213
+ padding-top: 5px;
214
+ padding-bottom: 3px;
215
+ }
216
+
217
+ .group_tabs li.active a {
218
+ color: black;
219
+ text-shadow: #fff 1px 1px 0px;
220
+ background-color: #ddd;
221
+ background: -webkit-gradient(linear, 0 0, 0 bottom, from(#fff), to(#ddd));
222
+ background: -moz-linear-gradient(#fff, #ddd);
223
+ background: linear-gradient(#fff, #ddd);
224
+ }
225
+
226
+ .file_list {
227
+ margin-bottom: 18px;
228
+ }
229
+
230
+ a.src_link {
231
+ background: url('./magnify.png') no-repeat left 50%;
232
+ padding-left: 18px;
233
+ }
234
+
235
+ tr, td {
236
+ margin: 0;
237
+ padding: 0;
238
+ }
239
+
240
+ th {
241
+ white-space: nowrap;
242
+ }
243
+
244
+ th.ui-state-default {
245
+ cursor: pointer;
246
+ }
247
+
248
+ th span.ui-icon {
249
+ float: left;
250
+ }
251
+
252
+ td {
253
+ padding: 4px 8px;
254
+ }
255
+
256
+ td.strong {
257
+ font-weight: bold;
258
+ }
259
+
260
+ .source_table h3, .source_table h4 {
261
+ padding: 0;
262
+ margin: 0;
263
+ margin-bottom: 4px;
264
+ }
265
+
266
+ .source_table .header {
267
+ padding: 10px;
268
+ }
269
+
270
+ .source_table pre {
271
+ margin: 0;
272
+ padding: 0;
273
+ white-space: normal;
274
+ }
275
+
276
+ .source_table pre, .source_table code {
277
+ color: #000;
278
+ font-family: "Monaco", "Inconsolata", "Consolas", monospace;
279
+ }
280
+
281
+ .source_table pre {
282
+ background-color: #333;
283
+ }
284
+
285
+ .source_table pre ol {
286
+ margin: 0px;
287
+ padding: 0px;
288
+ margin-left: 45px;
289
+ font-size: 12px;
290
+ color: white;
291
+ }
292
+
293
+ .source_table pre li {
294
+ margin: 0px;
295
+ padding: 2px 6px;
296
+ border-left: 5px solid white;
297
+ }
298
+
299
+ .source_table pre li code {
300
+ white-space: pre;
301
+ white-space: pre-wrap;
302
+ }
303
+
304
+ .source_table pre .hits {
305
+ float: right;
306
+ margin-left: 10px;
307
+ padding: 2px 4px;
308
+
309
+ background-color: #444;
310
+ background: -webkit-gradient(linear, 0 0, 0 bottom, from(#222), to(#666));
311
+ background: -moz-linear-gradient(#222, #666);
312
+ background: linear-gradient(#222, #666);
313
+
314
+ color: white;
315
+ font-family: Helvetica, "Helvetica Neue", Arial, sans-serif;
316
+ font-size: 10px;
317
+ font-weight: bold;
318
+ text-align: center;
319
+ border-radius: 6px;
320
+ }
321
+
322
+ #footer {
323
+ color: #ddd;
324
+ font-size: 12px;
325
+ font-weight: bold;
326
+ margin-top: 12px;
327
+ text-align: right;
328
+ }
329
+ #footer a {
330
+ color: #eee;
331
+ text-decoration: underline;
332
+ }
333
+ #footer a:hover {
334
+ color: #fff;
335
+ text-decoration: none;
336
+ }
337
+
338
+ .green {
339
+ color: #090;
340
+ }
341
+ .red {
342
+ color: #900;
343
+ }
344
+ .yellow {
345
+ color: #da0;
346
+ }
347
+ .source_table .covered {
348
+ border-color: #090;
349
+ }
350
+ .source_table .missed {
351
+ border-color: #900;
352
+ }
353
+ .source_table .never {
354
+ border-color: black;
355
+ }
356
+ .source_table .skipped {
357
+ border-color: #fc0;
358
+ }
359
+
360
+ .source_table .covered:nth-child(odd) {
361
+ background-color: #CDF2CD;
362
+ }
363
+ .source_table .covered:nth-child(even) {
364
+ background-color: #DBF2DB;
365
+ }
366
+ .source_table .missed:nth-child(odd) {
367
+ background-color: #F7C0C0;
368
+ }
369
+ .source_table .missed:nth-child(even) {
370
+ background-color: #F7CFCF;
371
+ }
372
+ .source_table .never:nth-child(odd) {
373
+ background-color: #efefef;
374
+ }
375
+ .source_table .never:nth-child(even) {
376
+ background-color: #f4f4f4;
377
+ }
378
+ .source_table .skipped:nth-child(odd) {
379
+ background-color: #FBF0C0;
380
+ }
381
+ .source_table .skipped:nth-child(even) {
382
+ background-color: #FBFfCf;
383
+ }
@@ -0,0 +1,1575 @@
1
+ <!DOCTYPE html>
2
+ <html xmlns='http://www.w3.org/1999/xhtml'>
3
+ <head>
4
+ <title>Code coverage for Ruby redis lock</title>
5
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
6
+ <script src='./assets/0.5.3/jquery-1.6.2.min.js' type='text/javascript'></script>
7
+ <script src='./assets/0.5.3/jquery.dataTables.min.js' type='text/javascript'></script>
8
+ <script src='./assets/0.5.3/fancybox/jquery.fancybox-1.3.1.pack.js' type='text/javascript'></script>
9
+ <script src='./assets/0.5.3/jquery.timeago.js' type='text/javascript'></script>
10
+ <script src='./assets/0.5.3/jquery.url.js' type='text/javascript'></script>
11
+ <script src='./assets/0.5.3/highlight.pack.js' type='text/javascript'></script>
12
+ <script src='./assets/0.5.3/app.js' type='text/javascript'></script>
13
+ <link href='./assets/0.5.3/stylesheet.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
14
+ <link href='./assets/0.5.3/highlight.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
15
+ <link href='./assets/0.5.3/fancybox/jquery.fancybox-1.3.1.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
16
+ <link href='./assets/0.5.3/smoothness/jquery-ui-1.8.4.custom.css' media='screen, projection, print' rel='stylesheet' type='text/css'>
17
+ <link rel="shortcut icon" type="image/png" href="./assets/0.5.3/favicon_green.png" />
18
+ <link rel="icon" type="image/png" href="./assets/0.5.3/favicon.png" />
19
+ </head>
20
+
21
+ <body>
22
+ <div id="loading">
23
+ <img src="./assets/0.5.3/loading.gif" alt="loading"/>
24
+ </div>
25
+ <div id="wrapper" style="display:none;">
26
+ <div class="timestamp">Generated <abbr class="timeago" title="2011-09-30T02:23:50+07:00">2011-09-30T02:23:50+07:00</abbr></div>
27
+ <ul class="group_tabs"></ul>
28
+
29
+ <div id="content">
30
+ <div class="file_list_container" id="AllFiles">
31
+ <h2>
32
+ <span class="group_name">All Files</span>
33
+ (<span class="covered_percent"><span class="green">97.96%</span></span>
34
+ covered at
35
+ <span class="covered_strength">
36
+ <span class="green">
37
+ 4.43
38
+ </span>
39
+ </span> hits/line)
40
+ </h2>
41
+ <a name="AllFiles"></a>
42
+ <div>
43
+ <b>6</b> files in total.
44
+ <b>98</b> relevant lines.
45
+ <span class="green"><b>96</b> lines covered</span> and
46
+ <span class="red"><b>2</b> lines missed </span>
47
+ </div>
48
+ <table class="file_list">
49
+ <thead>
50
+ <tr>
51
+ <th>File</th>
52
+ <th>% covered</th>
53
+ <th>Lines</th>
54
+ <th>Relevant Lines</th>
55
+ <th>Lines covered</th>
56
+ <th>Lines missed</th>
57
+ <th>Avg. Hits / Line</th>
58
+ </tr>
59
+ </thead>
60
+ <tbody>
61
+
62
+ <tr>
63
+ <td class="strong"><a href="#420c3fa027ea17c7e78e2a1b5d7be44d83bd765b" class="src_link" title="lib/ruby_redis_lock.rb">lib/ruby_redis_lock.rb</a></td>
64
+ <td class="green strong">100.0 %</td>
65
+ <td>9</td>
66
+ <td>4</td>
67
+ <td>4</td>
68
+ <td>0</td>
69
+ <td>1.0</td>
70
+ </tr>
71
+
72
+ <tr>
73
+ <td class="strong"><a href="#79b9b809d8ed194bbd91e1cf23cb93107280df41" class="src_link" title="lib/ruby_redis_lock/ruby_redis_lock.rb">lib/ruby_redis_lock/ruby_redis_lock.rb</a></td>
74
+ <td class="green strong">93.55 %</td>
75
+ <td>66</td>
76
+ <td>31</td>
77
+ <td>29</td>
78
+ <td>2</td>
79
+ <td>18.8</td>
80
+ </tr>
81
+
82
+ <tr>
83
+ <td class="strong"><a href="#545f28e2395c33a4665b5588418d9186b1bf849e" class="src_link" title="spec/lock_spec.rb">spec/lock_spec.rb</a></td>
84
+ <td class="green strong">100.0 %</td>
85
+ <td>73</td>
86
+ <td>32</td>
87
+ <td>32</td>
88
+ <td>0</td>
89
+ <td>1.0</td>
90
+ </tr>
91
+
92
+ <tr>
93
+ <td class="strong"><a href="#6fd79c5de64e5c880425dbb4668e8de8bdb655fb" class="src_link" title="spec/release_lock_spec.rb">spec/release_lock_spec.rb</a></td>
94
+ <td class="green strong">100.0 %</td>
95
+ <td>22</td>
96
+ <td>9</td>
97
+ <td>9</td>
98
+ <td>0</td>
99
+ <td>1.0</td>
100
+ </tr>
101
+
102
+ <tr>
103
+ <td class="strong"><a href="#a2b71c3de290f655a4fd2b1a82e13ca922365681" class="src_link" title="spec/spec_helper.rb">spec/spec_helper.rb</a></td>
104
+ <td class="green strong">100.0 %</td>
105
+ <td>20</td>
106
+ <td>10</td>
107
+ <td>10</td>
108
+ <td>0</td>
109
+ <td>3.8</td>
110
+ </tr>
111
+
112
+ <tr>
113
+ <td class="strong"><a href="#13c0511db80f553f86679faef9c740541d8ed885" class="src_link" title="spec/try_acquire_lock_spec.rb">spec/try_acquire_lock_spec.rb</a></td>
114
+ <td class="green strong">100.0 %</td>
115
+ <td>31</td>
116
+ <td>12</td>
117
+ <td>12</td>
118
+ <td>0</td>
119
+ <td>1.0</td>
120
+ </tr>
121
+
122
+ </tbody>
123
+ </table>
124
+ </div>
125
+
126
+
127
+
128
+ </div>
129
+
130
+ <div id="footer">
131
+ Generated by <a href="http://github.com/colszowka/simplecov">simplecov</a> v0.5.3
132
+ and simplecov-html v0.5.3<br/>
133
+ using RSpec
134
+ </div>
135
+
136
+ <div class="source_files">
137
+
138
+ <div class="source_table" id="420c3fa027ea17c7e78e2a1b5d7be44d83bd765b">
139
+ <div class="header">
140
+ <h3>lib/ruby_redis_lock.rb</h3>
141
+ <h4><span class="green">100.0 %</span> covered</h4>
142
+ <div>
143
+ <b>4</b> relevant lines.
144
+ <span class="green"><b>4</b> lines covered</span> and
145
+ <span class="red"><b>0</b> lines missed.</span>
146
+ </div>
147
+ </div>
148
+
149
+ <pre>
150
+ <ol>
151
+
152
+ <li class="covered" data-hits="1" data-linenumber="1">
153
+ <span class="hits">1</span>
154
+
155
+ <code class="ruby">require 'redis'</code>
156
+ </li>
157
+
158
+ <li class="never" data-hits="" data-linenumber="2">
159
+
160
+
161
+ <code class="ruby"></code>
162
+ </li>
163
+
164
+ <li class="covered" data-hits="1" data-linenumber="3">
165
+ <span class="hits">1</span>
166
+
167
+ <code class="ruby">require File.expand_path('../ruby_redis_lock/ruby_redis_lock', __FILE__)</code>
168
+ </li>
169
+
170
+ <li class="never" data-hits="" data-linenumber="4">
171
+
172
+
173
+ <code class="ruby"></code>
174
+ </li>
175
+
176
+ <li class="never" data-hits="" data-linenumber="5">
177
+
178
+
179
+ <code class="ruby"></code>
180
+ </li>
181
+
182
+ <li class="covered" data-hits="1" data-linenumber="6">
183
+ <span class="hits">1</span>
184
+
185
+ <code class="ruby">class Redis</code>
186
+ </li>
187
+
188
+ <li class="covered" data-hits="1" data-linenumber="7">
189
+ <span class="hits">1</span>
190
+
191
+ <code class="ruby"> include RubyRedisLock</code>
192
+ </li>
193
+
194
+ <li class="never" data-hits="" data-linenumber="8">
195
+
196
+
197
+ <code class="ruby"> </code>
198
+ </li>
199
+
200
+ <li class="never" data-hits="" data-linenumber="9">
201
+
202
+
203
+ <code class="ruby">end</code>
204
+ </li>
205
+
206
+ </ol>
207
+ </pre>
208
+ </div>
209
+
210
+ <div class="source_table" id="79b9b809d8ed194bbd91e1cf23cb93107280df41">
211
+ <div class="header">
212
+ <h3>lib/ruby_redis_lock/ruby_redis_lock.rb</h3>
213
+ <h4><span class="green">93.55 %</span> covered</h4>
214
+ <div>
215
+ <b>31</b> relevant lines.
216
+ <span class="green"><b>29</b> lines covered</span> and
217
+ <span class="red"><b>2</b> lines missed.</span>
218
+ </div>
219
+ </div>
220
+
221
+ <pre>
222
+ <ol>
223
+
224
+ <li class="covered" data-hits="1" data-linenumber="1">
225
+ <span class="hits">1</span>
226
+
227
+ <code class="ruby">module RubyRedisLock</code>
228
+ </li>
229
+
230
+ <li class="never" data-hits="" data-linenumber="2">
231
+
232
+
233
+ <code class="ruby"> </code>
234
+ </li>
235
+
236
+ <li class="never" data-hits="" data-linenumber="3">
237
+
238
+
239
+ <code class="ruby"></code>
240
+ </li>
241
+
242
+ <li class="covered" data-hits="1" data-linenumber="4">
243
+ <span class="hits">1</span>
244
+
245
+ <code class="ruby"> def lock(lock_name, processing_timeout=60, acquiring_timout=10)</code>
246
+ </li>
247
+
248
+ <li class="covered" data-hits="7" data-linenumber="5">
249
+ <span class="hits">7</span>
250
+
251
+ <code class="ruby"> acquire_lock(lock_name, processing_timeout, acquiring_timout)</code>
252
+ </li>
253
+
254
+ <li class="covered" data-hits="6" data-linenumber="6">
255
+ <span class="hits">6</span>
256
+
257
+ <code class="ruby"> yield</code>
258
+ </li>
259
+
260
+ <li class="never" data-hits="" data-linenumber="7">
261
+
262
+
263
+ <code class="ruby"> ensure</code>
264
+ </li>
265
+
266
+ <li class="covered" data-hits="7" data-linenumber="8">
267
+ <span class="hits">7</span>
268
+
269
+ <code class="ruby"> release_lock(lock_name, processing_timeout)</code>
270
+ </li>
271
+
272
+ <li class="never" data-hits="" data-linenumber="9">
273
+
274
+
275
+ <code class="ruby"> end</code>
276
+ </li>
277
+
278
+ <li class="never" data-hits="" data-linenumber="10">
279
+
280
+
281
+ <code class="ruby"> </code>
282
+ </li>
283
+
284
+ <li class="never" data-hits="" data-linenumber="11">
285
+
286
+
287
+ <code class="ruby"> </code>
288
+ </li>
289
+
290
+ <li class="covered" data-hits="1" data-linenumber="12">
291
+ <span class="hits">1</span>
292
+
293
+ <code class="ruby"> private</code>
294
+ </li>
295
+
296
+ <li class="covered" data-hits="1" data-linenumber="13">
297
+ <span class="hits">1</span>
298
+
299
+ <code class="ruby"> def acquire_lock(lock_name, processing_timeout=60, acquiring_timeout=10)</code>
300
+ </li>
301
+
302
+ <li class="never" data-hits="" data-linenumber="14">
303
+
304
+
305
+ <code class="ruby"> </code>
306
+ </li>
307
+
308
+ <li class="covered" data-hits="17" data-linenumber="15">
309
+ <span class="hits">17</span>
310
+
311
+ <code class="ruby"> start_time = Time.now.to_i</code>
312
+ </li>
313
+
314
+ <li class="never" data-hits="" data-linenumber="16">
315
+
316
+
317
+ <code class="ruby"> </code>
318
+ </li>
319
+
320
+ <li class="covered" data-hits="17" data-linenumber="17">
321
+ <span class="hits">17</span>
322
+
323
+ <code class="ruby"> while !try_acquire_lock(lock_name, processing_timeout)</code>
324
+ </li>
325
+
326
+ <li class="never" data-hits="" data-linenumber="18">
327
+
328
+
329
+ <code class="ruby"> </code>
330
+ </li>
331
+
332
+ <li class="covered" data-hits="43" data-linenumber="19">
333
+ <span class="hits">43</span>
334
+
335
+ <code class="ruby"> sleep(rand(100).to_f/100.0)</code>
336
+ </li>
337
+
338
+ <li class="never" data-hits="" data-linenumber="20">
339
+
340
+
341
+ <code class="ruby"> </code>
342
+ </li>
343
+
344
+ <li class="covered" data-hits="43" data-linenumber="21">
345
+ <span class="hits">43</span>
346
+
347
+ <code class="ruby"> if (Time.now.to_i - start_time) &gt; acquiring_timeout</code>
348
+ </li>
349
+
350
+ <li class="covered" data-hits="2" data-linenumber="22">
351
+ <span class="hits">2</span>
352
+
353
+ <code class="ruby"> raise Exception, &quot;Acquiring lock timeout &gt; #{acquiring_timeout} seconds&quot;</code>
354
+ </li>
355
+
356
+ <li class="never" data-hits="" data-linenumber="23">
357
+
358
+
359
+ <code class="ruby"> end</code>
360
+ </li>
361
+
362
+ <li class="never" data-hits="" data-linenumber="24">
363
+
364
+
365
+ <code class="ruby"> </code>
366
+ </li>
367
+
368
+ <li class="never" data-hits="" data-linenumber="25">
369
+
370
+
371
+ <code class="ruby"> end</code>
372
+ </li>
373
+
374
+ <li class="never" data-hits="" data-linenumber="26">
375
+
376
+
377
+ <code class="ruby"> </code>
378
+ </li>
379
+
380
+ <li class="covered" data-hits="15" data-linenumber="27">
381
+ <span class="hits">15</span>
382
+
383
+ <code class="ruby"> return true</code>
384
+ </li>
385
+
386
+ <li class="never" data-hits="" data-linenumber="28">
387
+
388
+
389
+ <code class="ruby"> </code>
390
+ </li>
391
+
392
+ <li class="never" data-hits="" data-linenumber="29">
393
+
394
+
395
+ <code class="ruby"> end</code>
396
+ </li>
397
+
398
+ <li class="never" data-hits="" data-linenumber="30">
399
+
400
+
401
+ <code class="ruby"> </code>
402
+ </li>
403
+
404
+ <li class="covered" data-hits="1" data-linenumber="31">
405
+ <span class="hits">1</span>
406
+
407
+ <code class="ruby"> def try_acquire_lock(lock_name, processing_timeout=60)</code>
408
+ </li>
409
+
410
+ <li class="never" data-hits="" data-linenumber="32">
411
+
412
+
413
+ <code class="ruby"> </code>
414
+ </li>
415
+
416
+ <li class="covered" data-hits="63" data-linenumber="33">
417
+ <span class="hits">63</span>
418
+
419
+ <code class="ruby"> ret = self.setnx(ruby_redis_lock_key(lock_name), &quot;#{Time.now.to_i + processing_timeout}&quot;)</code>
420
+ </li>
421
+
422
+ <li class="covered" data-hits="63" data-linenumber="34">
423
+ <span class="hits">63</span>
424
+
425
+ <code class="ruby"> return true if ret == true</code>
426
+ </li>
427
+
428
+ <li class="never" data-hits="" data-linenumber="35">
429
+
430
+
431
+ <code class="ruby"> </code>
432
+ </li>
433
+
434
+ <li class="covered" data-hits="47" data-linenumber="36">
435
+ <span class="hits">47</span>
436
+
437
+ <code class="ruby"> expiration = self.get(ruby_redis_lock_key(lock_name)).to_i</code>
438
+ </li>
439
+
440
+ <li class="covered" data-hits="47" data-linenumber="37">
441
+ <span class="hits">47</span>
442
+
443
+ <code class="ruby"> return false if Time.now.to_i &lt; expiration</code>
444
+ </li>
445
+
446
+ <li class="never" data-hits="" data-linenumber="38">
447
+
448
+
449
+ <code class="ruby"></code>
450
+ </li>
451
+
452
+ <li class="covered" data-hits="3" data-linenumber="39">
453
+ <span class="hits">3</span>
454
+
455
+ <code class="ruby"> previous_expiration = self.getset(ruby_redis_lock_key(lock_name), &quot;#{Time.now.to_i + processing_timeout}&quot;).to_i</code>
456
+ </li>
457
+
458
+ <li class="covered" data-hits="3" data-linenumber="40">
459
+ <span class="hits">3</span>
460
+
461
+ <code class="ruby"> return true if expiration == previous_expiration</code>
462
+ </li>
463
+
464
+ <li class="never" data-hits="" data-linenumber="41">
465
+
466
+
467
+ <code class="ruby"> </code>
468
+ </li>
469
+
470
+ <li class="missed" data-hits="0" data-linenumber="42">
471
+
472
+
473
+ <code class="ruby"> return false</code>
474
+ </li>
475
+
476
+ <li class="never" data-hits="" data-linenumber="43">
477
+
478
+
479
+ <code class="ruby"> </code>
480
+ </li>
481
+
482
+ <li class="never" data-hits="" data-linenumber="44">
483
+
484
+
485
+ <code class="ruby"> end</code>
486
+ </li>
487
+
488
+ <li class="never" data-hits="" data-linenumber="45">
489
+
490
+
491
+ <code class="ruby"> </code>
492
+ </li>
493
+
494
+ <li class="covered" data-hits="1" data-linenumber="46">
495
+ <span class="hits">1</span>
496
+
497
+ <code class="ruby"> def release_lock(lock_name, processing_timeout=60)</code>
498
+ </li>
499
+
500
+ <li class="never" data-hits="" data-linenumber="47">
501
+
502
+
503
+ <code class="ruby"> </code>
504
+ </li>
505
+
506
+ <li class="covered" data-hits="10" data-linenumber="48">
507
+ <span class="hits">10</span>
508
+
509
+ <code class="ruby"> expiration = self.get(ruby_redis_lock_key(lock_name)).to_i</code>
510
+ </li>
511
+
512
+ <li class="covered" data-hits="10" data-linenumber="49">
513
+ <span class="hits">10</span>
514
+
515
+ <code class="ruby"> return false if Time.now.to_i &gt; expiration</code>
516
+ </li>
517
+
518
+ <li class="never" data-hits="" data-linenumber="50">
519
+
520
+
521
+ <code class="ruby"> </code>
522
+ </li>
523
+
524
+ <li class="covered" data-hits="8" data-linenumber="51">
525
+ <span class="hits">8</span>
526
+
527
+ <code class="ruby"> previous_expiration = self.getset(ruby_redis_lock_key(lock_name), &quot;#{Time.now.to_i + processing_timeout}&quot;).to_i</code>
528
+ </li>
529
+
530
+ <li class="never" data-hits="" data-linenumber="52">
531
+
532
+
533
+ <code class="ruby"> </code>
534
+ </li>
535
+
536
+ <li class="covered" data-hits="8" data-linenumber="53">
537
+ <span class="hits">8</span>
538
+
539
+ <code class="ruby"> if expiration == previous_expiration # it still got the lock</code>
540
+ </li>
541
+
542
+ <li class="covered" data-hits="8" data-linenumber="54">
543
+ <span class="hits">8</span>
544
+
545
+ <code class="ruby"> self.del(ruby_redis_lock_key(lock_name))</code>
546
+ </li>
547
+
548
+ <li class="covered" data-hits="8" data-linenumber="55">
549
+ <span class="hits">8</span>
550
+
551
+ <code class="ruby"> return true</code>
552
+ </li>
553
+
554
+ <li class="never" data-hits="" data-linenumber="56">
555
+
556
+
557
+ <code class="ruby"> end</code>
558
+ </li>
559
+
560
+ <li class="never" data-hits="" data-linenumber="57">
561
+
562
+
563
+ <code class="ruby"> </code>
564
+ </li>
565
+
566
+ <li class="missed" data-hits="0" data-linenumber="58">
567
+
568
+
569
+ <code class="ruby"> return false</code>
570
+ </li>
571
+
572
+ <li class="never" data-hits="" data-linenumber="59">
573
+
574
+
575
+ <code class="ruby"> end</code>
576
+ </li>
577
+
578
+ <li class="never" data-hits="" data-linenumber="60">
579
+
580
+
581
+ <code class="ruby"> </code>
582
+ </li>
583
+
584
+ <li class="covered" data-hits="1" data-linenumber="61">
585
+ <span class="hits">1</span>
586
+
587
+ <code class="ruby"> def ruby_redis_lock_key(lock_name)</code>
588
+ </li>
589
+
590
+ <li class="covered" data-hits="140" data-linenumber="62">
591
+ <span class="hits">140</span>
592
+
593
+ <code class="ruby"> &quot;RubyRedisLock:#{lock_name}&quot;</code>
594
+ </li>
595
+
596
+ <li class="never" data-hits="" data-linenumber="63">
597
+
598
+
599
+ <code class="ruby"> end</code>
600
+ </li>
601
+
602
+ <li class="never" data-hits="" data-linenumber="64">
603
+
604
+
605
+ <code class="ruby"> </code>
606
+ </li>
607
+
608
+ <li class="never" data-hits="" data-linenumber="65">
609
+
610
+
611
+ <code class="ruby"></code>
612
+ </li>
613
+
614
+ <li class="never" data-hits="" data-linenumber="66">
615
+
616
+
617
+ <code class="ruby">end</code>
618
+ </li>
619
+
620
+ </ol>
621
+ </pre>
622
+ </div>
623
+
624
+ <div class="source_table" id="545f28e2395c33a4665b5588418d9186b1bf849e">
625
+ <div class="header">
626
+ <h3>spec/lock_spec.rb</h3>
627
+ <h4><span class="green">100.0 %</span> covered</h4>
628
+ <div>
629
+ <b>32</b> relevant lines.
630
+ <span class="green"><b>32</b> lines covered</span> and
631
+ <span class="red"><b>0</b> lines missed.</span>
632
+ </div>
633
+ </div>
634
+
635
+ <pre>
636
+ <ol>
637
+
638
+ <li class="covered" data-hits="1" data-linenumber="1">
639
+ <span class="hits">1</span>
640
+
641
+ <code class="ruby">require 'spec_helper'</code>
642
+ </li>
643
+
644
+ <li class="never" data-hits="" data-linenumber="2">
645
+
646
+
647
+ <code class="ruby"></code>
648
+ </li>
649
+
650
+ <li class="covered" data-hits="1" data-linenumber="3">
651
+ <span class="hits">1</span>
652
+
653
+ <code class="ruby">describe 'lock' do</code>
654
+ </li>
655
+
656
+ <li class="never" data-hits="" data-linenumber="4">
657
+
658
+
659
+ <code class="ruby"> </code>
660
+ </li>
661
+
662
+ <li class="covered" data-hits="1" data-linenumber="5">
663
+ <span class="hits">1</span>
664
+
665
+ <code class="ruby"> it &quot;acquires the lock if it does not exist&quot; do</code>
666
+ </li>
667
+
668
+ <li class="never" data-hits="" data-linenumber="6">
669
+
670
+
671
+ <code class="ruby"> </code>
672
+ </li>
673
+
674
+ <li class="covered" data-hits="1" data-linenumber="7">
675
+ <span class="hits">1</span>
676
+
677
+ <code class="ruby"> @redis.lock(&quot;test&quot;) { }</code>
678
+ </li>
679
+
680
+ <li class="never" data-hits="" data-linenumber="8">
681
+
682
+
683
+ <code class="ruby"> </code>
684
+ </li>
685
+
686
+ <li class="never" data-hits="" data-linenumber="9">
687
+
688
+
689
+ <code class="ruby"> end</code>
690
+ </li>
691
+
692
+ <li class="never" data-hits="" data-linenumber="10">
693
+
694
+
695
+ <code class="ruby"> </code>
696
+ </li>
697
+
698
+ <li class="covered" data-hits="1" data-linenumber="11">
699
+ <span class="hits">1</span>
700
+
701
+ <code class="ruby"> it &quot;waits and acquire lock&quot; do</code>
702
+ </li>
703
+
704
+ <li class="never" data-hits="" data-linenumber="12">
705
+
706
+
707
+ <code class="ruby"> </code>
708
+ </li>
709
+
710
+ <li class="covered" data-hits="1" data-linenumber="13">
711
+ <span class="hits">1</span>
712
+
713
+ <code class="ruby"> start_time = Time.now.to_i</code>
714
+ </li>
715
+
716
+ <li class="never" data-hits="" data-linenumber="14">
717
+
718
+
719
+ <code class="ruby"> </code>
720
+ </li>
721
+
722
+ <li class="covered" data-hits="1" data-linenumber="15">
723
+ <span class="hits">1</span>
724
+
725
+ <code class="ruby"> Thread.new {</code>
726
+ </li>
727
+
728
+ <li class="covered" data-hits="1" data-linenumber="16">
729
+ <span class="hits">1</span>
730
+
731
+ <code class="ruby"> @redis.lock(&quot;test&quot;) { </code>
732
+ </li>
733
+
734
+ <li class="covered" data-hits="1" data-linenumber="17">
735
+ <span class="hits">1</span>
736
+
737
+ <code class="ruby"> Thread.current.join(1)</code>
738
+ </li>
739
+
740
+ <li class="covered" data-hits="1" data-linenumber="18">
741
+ <span class="hits">1</span>
742
+
743
+ <code class="ruby"> sleep(5) </code>
744
+ </li>
745
+
746
+ <li class="never" data-hits="" data-linenumber="19">
747
+
748
+
749
+ <code class="ruby"> }</code>
750
+ </li>
751
+
752
+ <li class="never" data-hits="" data-linenumber="20">
753
+
754
+
755
+ <code class="ruby"> }</code>
756
+ </li>
757
+
758
+ <li class="never" data-hits="" data-linenumber="21">
759
+
760
+
761
+ <code class="ruby"> </code>
762
+ </li>
763
+
764
+ <li class="covered" data-hits="1" data-linenumber="22">
765
+ <span class="hits">1</span>
766
+
767
+ <code class="ruby"> Thread.current.join(1)</code>
768
+ </li>
769
+
770
+ <li class="never" data-hits="" data-linenumber="23">
771
+
772
+
773
+ <code class="ruby"> </code>
774
+ </li>
775
+
776
+ <li class="covered" data-hits="1" data-linenumber="24">
777
+ <span class="hits">1</span>
778
+
779
+ <code class="ruby"> @redis.lock(&quot;test&quot;) { }</code>
780
+ </li>
781
+
782
+ <li class="never" data-hits="" data-linenumber="25">
783
+
784
+
785
+ <code class="ruby"> </code>
786
+ </li>
787
+
788
+ <li class="covered" data-hits="1" data-linenumber="26">
789
+ <span class="hits">1</span>
790
+
791
+ <code class="ruby"> (Time.now.to_i - start_time).should be &gt; 4</code>
792
+ </li>
793
+
794
+ <li class="never" data-hits="" data-linenumber="27">
795
+
796
+
797
+ <code class="ruby"> </code>
798
+ </li>
799
+
800
+ <li class="never" data-hits="" data-linenumber="28">
801
+
802
+
803
+ <code class="ruby"> end</code>
804
+ </li>
805
+
806
+ <li class="never" data-hits="" data-linenumber="29">
807
+
808
+
809
+ <code class="ruby"> </code>
810
+ </li>
811
+
812
+ <li class="covered" data-hits="1" data-linenumber="30">
813
+ <span class="hits">1</span>
814
+
815
+ <code class="ruby"> it &quot;waits and acquire expired lock&quot; do</code>
816
+ </li>
817
+
818
+ <li class="never" data-hits="" data-linenumber="31">
819
+
820
+
821
+ <code class="ruby"> </code>
822
+ </li>
823
+
824
+ <li class="covered" data-hits="1" data-linenumber="32">
825
+ <span class="hits">1</span>
826
+
827
+ <code class="ruby"> start_time = Time.now.to_i</code>
828
+ </li>
829
+
830
+ <li class="never" data-hits="" data-linenumber="33">
831
+
832
+
833
+ <code class="ruby"> </code>
834
+ </li>
835
+
836
+ <li class="covered" data-hits="1" data-linenumber="34">
837
+ <span class="hits">1</span>
838
+
839
+ <code class="ruby"> Thread.new {</code>
840
+ </li>
841
+
842
+ <li class="covered" data-hits="1" data-linenumber="35">
843
+ <span class="hits">1</span>
844
+
845
+ <code class="ruby"> @redis.send(:acquire_lock, &quot;test&quot;, 5, 10).should == true</code>
846
+ </li>
847
+
848
+ <li class="never" data-hits="" data-linenumber="36">
849
+
850
+
851
+ <code class="ruby"> }</code>
852
+ </li>
853
+
854
+ <li class="never" data-hits="" data-linenumber="37">
855
+
856
+
857
+ <code class="ruby"> </code>
858
+ </li>
859
+
860
+ <li class="covered" data-hits="1" data-linenumber="38">
861
+ <span class="hits">1</span>
862
+
863
+ <code class="ruby"> Thread.current.join(0.1)</code>
864
+ </li>
865
+
866
+ <li class="never" data-hits="" data-linenumber="39">
867
+
868
+
869
+ <code class="ruby"> </code>
870
+ </li>
871
+
872
+ <li class="covered" data-hits="1" data-linenumber="40">
873
+ <span class="hits">1</span>
874
+
875
+ <code class="ruby"> @redis.lock(&quot;test&quot;) { }</code>
876
+ </li>
877
+
878
+ <li class="never" data-hits="" data-linenumber="41">
879
+
880
+
881
+ <code class="ruby"> </code>
882
+ </li>
883
+
884
+ <li class="covered" data-hits="1" data-linenumber="42">
885
+ <span class="hits">1</span>
886
+
887
+ <code class="ruby"> (Time.now.to_i - start_time).should be &gt; 4</code>
888
+ </li>
889
+
890
+ <li class="never" data-hits="" data-linenumber="43">
891
+
892
+
893
+ <code class="ruby"> </code>
894
+ </li>
895
+
896
+ <li class="never" data-hits="" data-linenumber="44">
897
+
898
+
899
+ <code class="ruby"> end</code>
900
+ </li>
901
+
902
+ <li class="never" data-hits="" data-linenumber="45">
903
+
904
+
905
+ <code class="ruby"> </code>
906
+ </li>
907
+
908
+ <li class="covered" data-hits="1" data-linenumber="46">
909
+ <span class="hits">1</span>
910
+
911
+ <code class="ruby"> it &quot;fails to acquire lock&quot; do</code>
912
+ </li>
913
+
914
+ <li class="never" data-hits="" data-linenumber="47">
915
+
916
+
917
+ <code class="ruby"> </code>
918
+ </li>
919
+
920
+ <li class="covered" data-hits="1" data-linenumber="48">
921
+ <span class="hits">1</span>
922
+
923
+ <code class="ruby"> Thread.new {</code>
924
+ </li>
925
+
926
+ <li class="covered" data-hits="1" data-linenumber="49">
927
+ <span class="hits">1</span>
928
+
929
+ <code class="ruby"> @redis.lock(&quot;test&quot;) { </code>
930
+ </li>
931
+
932
+ <li class="covered" data-hits="1" data-linenumber="50">
933
+ <span class="hits">1</span>
934
+
935
+ <code class="ruby"> Thread.current.join(1)</code>
936
+ </li>
937
+
938
+ <li class="covered" data-hits="1" data-linenumber="51">
939
+ <span class="hits">1</span>
940
+
941
+ <code class="ruby"> sleep(5) </code>
942
+ </li>
943
+
944
+ <li class="never" data-hits="" data-linenumber="52">
945
+
946
+
947
+ <code class="ruby"> }</code>
948
+ </li>
949
+
950
+ <li class="never" data-hits="" data-linenumber="53">
951
+
952
+
953
+ <code class="ruby"> }</code>
954
+ </li>
955
+
956
+ <li class="never" data-hits="" data-linenumber="54">
957
+
958
+
959
+ <code class="ruby"> </code>
960
+ </li>
961
+
962
+ <li class="covered" data-hits="1" data-linenumber="55">
963
+ <span class="hits">1</span>
964
+
965
+ <code class="ruby"> Thread.current.join(1)</code>
966
+ </li>
967
+
968
+ <li class="covered" data-hits="2" data-linenumber="56">
969
+ <span class="hits">2</span>
970
+
971
+ <code class="ruby"> lambda { @redis.lock(&quot;test&quot;, 10, 2) { } }.should raise_error</code>
972
+ </li>
973
+
974
+ <li class="never" data-hits="" data-linenumber="57">
975
+
976
+
977
+ <code class="ruby"> </code>
978
+ </li>
979
+
980
+ <li class="never" data-hits="" data-linenumber="58">
981
+
982
+
983
+ <code class="ruby"> end</code>
984
+ </li>
985
+
986
+ <li class="never" data-hits="" data-linenumber="59">
987
+
988
+
989
+ <code class="ruby"> </code>
990
+ </li>
991
+
992
+ <li class="covered" data-hits="1" data-linenumber="60">
993
+ <span class="hits">1</span>
994
+
995
+ <code class="ruby"> it &quot;correctly release the lock when error is raised&quot; do</code>
996
+ </li>
997
+
998
+ <li class="never" data-hits="" data-linenumber="61">
999
+
1000
+
1001
+ <code class="ruby"> </code>
1002
+ </li>
1003
+
1004
+ <li class="covered" data-hits="1" data-linenumber="62">
1005
+ <span class="hits">1</span>
1006
+
1007
+ <code class="ruby"> begin</code>
1008
+ </li>
1009
+
1010
+ <li class="covered" data-hits="1" data-linenumber="63">
1011
+ <span class="hits">1</span>
1012
+
1013
+ <code class="ruby"> @redis.lock(&quot;test&quot;) { </code>
1014
+ </li>
1015
+
1016
+ <li class="covered" data-hits="1" data-linenumber="64">
1017
+ <span class="hits">1</span>
1018
+
1019
+ <code class="ruby"> raise 'some error'</code>
1020
+ </li>
1021
+
1022
+ <li class="never" data-hits="" data-linenumber="65">
1023
+
1024
+
1025
+ <code class="ruby"> }</code>
1026
+ </li>
1027
+
1028
+ <li class="never" data-hits="" data-linenumber="66">
1029
+
1030
+
1031
+ <code class="ruby"> rescue</code>
1032
+ </li>
1033
+
1034
+ <li class="never" data-hits="" data-linenumber="67">
1035
+
1036
+
1037
+ <code class="ruby"> end</code>
1038
+ </li>
1039
+
1040
+ <li class="never" data-hits="" data-linenumber="68">
1041
+
1042
+
1043
+ <code class="ruby"> </code>
1044
+ </li>
1045
+
1046
+ <li class="covered" data-hits="1" data-linenumber="69">
1047
+ <span class="hits">1</span>
1048
+
1049
+ <code class="ruby"> @redis.get(@redis.send(:ruby_redis_lock_key, &quot;test&quot;)).should == nil</code>
1050
+ </li>
1051
+
1052
+ <li class="never" data-hits="" data-linenumber="70">
1053
+
1054
+
1055
+ <code class="ruby"> </code>
1056
+ </li>
1057
+
1058
+ <li class="never" data-hits="" data-linenumber="71">
1059
+
1060
+
1061
+ <code class="ruby"> end</code>
1062
+ </li>
1063
+
1064
+ <li class="never" data-hits="" data-linenumber="72">
1065
+
1066
+
1067
+ <code class="ruby"> </code>
1068
+ </li>
1069
+
1070
+ <li class="never" data-hits="" data-linenumber="73">
1071
+
1072
+
1073
+ <code class="ruby">end</code>
1074
+ </li>
1075
+
1076
+ </ol>
1077
+ </pre>
1078
+ </div>
1079
+
1080
+ <div class="source_table" id="6fd79c5de64e5c880425dbb4668e8de8bdb655fb">
1081
+ <div class="header">
1082
+ <h3>spec/release_lock_spec.rb</h3>
1083
+ <h4><span class="green">100.0 %</span> covered</h4>
1084
+ <div>
1085
+ <b>9</b> relevant lines.
1086
+ <span class="green"><b>9</b> lines covered</span> and
1087
+ <span class="red"><b>0</b> lines missed.</span>
1088
+ </div>
1089
+ </div>
1090
+
1091
+ <pre>
1092
+ <ol>
1093
+
1094
+ <li class="covered" data-hits="1" data-linenumber="1">
1095
+ <span class="hits">1</span>
1096
+
1097
+ <code class="ruby">require 'spec_helper'</code>
1098
+ </li>
1099
+
1100
+ <li class="never" data-hits="" data-linenumber="2">
1101
+
1102
+
1103
+ <code class="ruby"></code>
1104
+ </li>
1105
+
1106
+ <li class="covered" data-hits="1" data-linenumber="3">
1107
+ <span class="hits">1</span>
1108
+
1109
+ <code class="ruby">describe 'release_lock' do</code>
1110
+ </li>
1111
+
1112
+ <li class="never" data-hits="" data-linenumber="4">
1113
+
1114
+
1115
+ <code class="ruby"> </code>
1116
+ </li>
1117
+
1118
+ <li class="covered" data-hits="1" data-linenumber="5">
1119
+ <span class="hits">1</span>
1120
+
1121
+ <code class="ruby"> it &quot;release lock when the lock is not expired&quot; do</code>
1122
+ </li>
1123
+
1124
+ <li class="never" data-hits="" data-linenumber="6">
1125
+
1126
+
1127
+ <code class="ruby"> </code>
1128
+ </li>
1129
+
1130
+ <li class="covered" data-hits="1" data-linenumber="7">
1131
+ <span class="hits">1</span>
1132
+
1133
+ <code class="ruby"> @redis.send(:acquire_lock, &quot;test&quot;, 69).should == true</code>
1134
+ </li>
1135
+
1136
+ <li class="never" data-hits="" data-linenumber="8">
1137
+
1138
+
1139
+ <code class="ruby"> </code>
1140
+ </li>
1141
+
1142
+ <li class="covered" data-hits="1" data-linenumber="9">
1143
+ <span class="hits">1</span>
1144
+
1145
+ <code class="ruby"> @redis.send(:release_lock, &quot;test&quot;).should == true</code>
1146
+ </li>
1147
+
1148
+ <li class="never" data-hits="" data-linenumber="10">
1149
+
1150
+
1151
+ <code class="ruby"> </code>
1152
+ </li>
1153
+
1154
+ <li class="never" data-hits="" data-linenumber="11">
1155
+
1156
+
1157
+ <code class="ruby"> end</code>
1158
+ </li>
1159
+
1160
+ <li class="never" data-hits="" data-linenumber="12">
1161
+
1162
+
1163
+ <code class="ruby"> </code>
1164
+ </li>
1165
+
1166
+ <li class="covered" data-hits="1" data-linenumber="13">
1167
+ <span class="hits">1</span>
1168
+
1169
+ <code class="ruby"> it &quot;does not release lock if the lock is already expired&quot; do</code>
1170
+ </li>
1171
+
1172
+ <li class="never" data-hits="" data-linenumber="14">
1173
+
1174
+
1175
+ <code class="ruby"> </code>
1176
+ </li>
1177
+
1178
+ <li class="covered" data-hits="1" data-linenumber="15">
1179
+ <span class="hits">1</span>
1180
+
1181
+ <code class="ruby"> @redis.send(:acquire_lock, &quot;test&quot;, 0.1).should == true</code>
1182
+ </li>
1183
+
1184
+ <li class="never" data-hits="" data-linenumber="16">
1185
+
1186
+
1187
+ <code class="ruby"> </code>
1188
+ </li>
1189
+
1190
+ <li class="covered" data-hits="1" data-linenumber="17">
1191
+ <span class="hits">1</span>
1192
+
1193
+ <code class="ruby"> sleep(1)</code>
1194
+ </li>
1195
+
1196
+ <li class="covered" data-hits="1" data-linenumber="18">
1197
+ <span class="hits">1</span>
1198
+
1199
+ <code class="ruby"> @redis.send(:release_lock, &quot;test&quot;).should == false</code>
1200
+ </li>
1201
+
1202
+ <li class="never" data-hits="" data-linenumber="19">
1203
+
1204
+
1205
+ <code class="ruby"> </code>
1206
+ </li>
1207
+
1208
+ <li class="never" data-hits="" data-linenumber="20">
1209
+
1210
+
1211
+ <code class="ruby"> end</code>
1212
+ </li>
1213
+
1214
+ <li class="never" data-hits="" data-linenumber="21">
1215
+
1216
+
1217
+ <code class="ruby"> </code>
1218
+ </li>
1219
+
1220
+ <li class="never" data-hits="" data-linenumber="22">
1221
+
1222
+
1223
+ <code class="ruby">end</code>
1224
+ </li>
1225
+
1226
+ </ol>
1227
+ </pre>
1228
+ </div>
1229
+
1230
+ <div class="source_table" id="a2b71c3de290f655a4fd2b1a82e13ca922365681">
1231
+ <div class="header">
1232
+ <h3>spec/spec_helper.rb</h3>
1233
+ <h4><span class="green">100.0 %</span> covered</h4>
1234
+ <div>
1235
+ <b>10</b> relevant lines.
1236
+ <span class="green"><b>10</b> lines covered</span> and
1237
+ <span class="red"><b>0</b> lines missed.</span>
1238
+ </div>
1239
+ </div>
1240
+
1241
+ <pre>
1242
+ <ol>
1243
+
1244
+ <li class="never" data-hits="" data-linenumber="1">
1245
+
1246
+
1247
+ <code class="ruby"># encoding: utf-8</code>
1248
+ </li>
1249
+
1250
+ <li class="covered" data-hits="1" data-linenumber="2">
1251
+ <span class="hits">1</span>
1252
+
1253
+ <code class="ruby">require 'simplecov'</code>
1254
+ </li>
1255
+
1256
+ <li class="covered" data-hits="1" data-linenumber="3">
1257
+ <span class="hits">1</span>
1258
+
1259
+ <code class="ruby">SimpleCov.start do</code>
1260
+ </li>
1261
+
1262
+ <li class="covered" data-hits="1" data-linenumber="4">
1263
+ <span class="hits">1</span>
1264
+
1265
+ <code class="ruby"> coverage_dir(&quot;coverage&quot;) </code>
1266
+ </li>
1267
+
1268
+ <li class="never" data-hits="" data-linenumber="5">
1269
+
1270
+
1271
+ <code class="ruby">end</code>
1272
+ </li>
1273
+
1274
+ <li class="never" data-hits="" data-linenumber="6">
1275
+
1276
+
1277
+ <code class="ruby"></code>
1278
+ </li>
1279
+
1280
+ <li class="covered" data-hits="1" data-linenumber="7">
1281
+ <span class="hits">1</span>
1282
+
1283
+ <code class="ruby">require 'rspec'</code>
1284
+ </li>
1285
+
1286
+ <li class="never" data-hits="" data-linenumber="8">
1287
+
1288
+
1289
+ <code class="ruby"></code>
1290
+ </li>
1291
+
1292
+ <li class="covered" data-hits="1" data-linenumber="9">
1293
+ <span class="hits">1</span>
1294
+
1295
+ <code class="ruby">require File.expand_path(&quot;../../lib/ruby_redis_lock&quot;,__FILE__)</code>
1296
+ </li>
1297
+
1298
+ <li class="never" data-hits="" data-linenumber="10">
1299
+
1300
+
1301
+ <code class="ruby"></code>
1302
+ </li>
1303
+
1304
+ <li class="covered" data-hits="1" data-linenumber="11">
1305
+ <span class="hits">1</span>
1306
+
1307
+ <code class="ruby">RSpec.configure do |config|</code>
1308
+ </li>
1309
+
1310
+ <li class="never" data-hits="" data-linenumber="12">
1311
+
1312
+
1313
+ <code class="ruby"> </code>
1314
+ </li>
1315
+
1316
+ <li class="covered" data-hits="1" data-linenumber="13">
1317
+ <span class="hits">1</span>
1318
+
1319
+ <code class="ruby"> config.mock_with :rspec</code>
1320
+ </li>
1321
+
1322
+ <li class="never" data-hits="" data-linenumber="14">
1323
+
1324
+
1325
+ <code class="ruby"> </code>
1326
+ </li>
1327
+
1328
+ <li class="covered" data-hits="1" data-linenumber="15">
1329
+ <span class="hits">1</span>
1330
+
1331
+ <code class="ruby"> config.before(:each) do</code>
1332
+ </li>
1333
+
1334
+ <li class="covered" data-hits="15" data-linenumber="16">
1335
+ <span class="hits">15</span>
1336
+
1337
+ <code class="ruby"> @redis = Redis.new</code>
1338
+ </li>
1339
+
1340
+ <li class="covered" data-hits="15" data-linenumber="17">
1341
+ <span class="hits">15</span>
1342
+
1343
+ <code class="ruby"> @redis.flushall</code>
1344
+ </li>
1345
+
1346
+ <li class="never" data-hits="" data-linenumber="18">
1347
+
1348
+
1349
+ <code class="ruby"> end</code>
1350
+ </li>
1351
+
1352
+ <li class="never" data-hits="" data-linenumber="19">
1353
+
1354
+
1355
+ <code class="ruby"> </code>
1356
+ </li>
1357
+
1358
+ <li class="never" data-hits="" data-linenumber="20">
1359
+
1360
+
1361
+ <code class="ruby">end</code>
1362
+ </li>
1363
+
1364
+ </ol>
1365
+ </pre>
1366
+ </div>
1367
+
1368
+ <div class="source_table" id="13c0511db80f553f86679faef9c740541d8ed885">
1369
+ <div class="header">
1370
+ <h3>spec/try_acquire_lock_spec.rb</h3>
1371
+ <h4><span class="green">100.0 %</span> covered</h4>
1372
+ <div>
1373
+ <b>12</b> relevant lines.
1374
+ <span class="green"><b>12</b> lines covered</span> and
1375
+ <span class="red"><b>0</b> lines missed.</span>
1376
+ </div>
1377
+ </div>
1378
+
1379
+ <pre>
1380
+ <ol>
1381
+
1382
+ <li class="covered" data-hits="1" data-linenumber="1">
1383
+ <span class="hits">1</span>
1384
+
1385
+ <code class="ruby">require 'spec_helper'</code>
1386
+ </li>
1387
+
1388
+ <li class="never" data-hits="" data-linenumber="2">
1389
+
1390
+
1391
+ <code class="ruby"></code>
1392
+ </li>
1393
+
1394
+ <li class="covered" data-hits="1" data-linenumber="3">
1395
+ <span class="hits">1</span>
1396
+
1397
+ <code class="ruby">describe 'try_acquire_lock' do</code>
1398
+ </li>
1399
+
1400
+ <li class="never" data-hits="" data-linenumber="4">
1401
+
1402
+
1403
+ <code class="ruby"> </code>
1404
+ </li>
1405
+
1406
+ <li class="covered" data-hits="1" data-linenumber="5">
1407
+ <span class="hits">1</span>
1408
+
1409
+ <code class="ruby"> it &quot;acquires lock when the lock does not exist&quot; do</code>
1410
+ </li>
1411
+
1412
+ <li class="never" data-hits="" data-linenumber="6">
1413
+
1414
+
1415
+ <code class="ruby"> </code>
1416
+ </li>
1417
+
1418
+ <li class="covered" data-hits="1" data-linenumber="7">
1419
+ <span class="hits">1</span>
1420
+
1421
+ <code class="ruby"> @redis.send(:try_acquire_lock, &quot;test&quot;).should == true</code>
1422
+ </li>
1423
+
1424
+ <li class="never" data-hits="" data-linenumber="8">
1425
+
1426
+
1427
+ <code class="ruby"> </code>
1428
+ </li>
1429
+
1430
+ <li class="never" data-hits="" data-linenumber="9">
1431
+
1432
+
1433
+ <code class="ruby"> end</code>
1434
+ </li>
1435
+
1436
+ <li class="never" data-hits="" data-linenumber="10">
1437
+
1438
+
1439
+ <code class="ruby"> </code>
1440
+ </li>
1441
+
1442
+ <li class="covered" data-hits="1" data-linenumber="11">
1443
+ <span class="hits">1</span>
1444
+
1445
+ <code class="ruby"> it &quot;does not acquire lock when the lock is alive&quot; do</code>
1446
+ </li>
1447
+
1448
+ <li class="never" data-hits="" data-linenumber="12">
1449
+
1450
+
1451
+ <code class="ruby"> </code>
1452
+ </li>
1453
+
1454
+ <li class="covered" data-hits="1" data-linenumber="13">
1455
+ <span class="hits">1</span>
1456
+
1457
+ <code class="ruby"> @redis.send(:try_acquire_lock, &quot;test&quot;).should == true</code>
1458
+ </li>
1459
+
1460
+ <li class="covered" data-hits="1" data-linenumber="14">
1461
+ <span class="hits">1</span>
1462
+
1463
+ <code class="ruby"> @redis.send(:try_acquire_lock, &quot;test&quot;).should == false</code>
1464
+ </li>
1465
+
1466
+ <li class="never" data-hits="" data-linenumber="15">
1467
+
1468
+
1469
+ <code class="ruby"> </code>
1470
+ </li>
1471
+
1472
+ <li class="never" data-hits="" data-linenumber="16">
1473
+
1474
+
1475
+ <code class="ruby"> end</code>
1476
+ </li>
1477
+
1478
+ <li class="never" data-hits="" data-linenumber="17">
1479
+
1480
+
1481
+ <code class="ruby"> </code>
1482
+ </li>
1483
+
1484
+ <li class="covered" data-hits="1" data-linenumber="18">
1485
+ <span class="hits">1</span>
1486
+
1487
+ <code class="ruby"> it &quot;acquires lock when the lock is expired&quot; do</code>
1488
+ </li>
1489
+
1490
+ <li class="never" data-hits="" data-linenumber="19">
1491
+
1492
+
1493
+ <code class="ruby"> </code>
1494
+ </li>
1495
+
1496
+ <li class="covered" data-hits="1" data-linenumber="20">
1497
+ <span class="hits">1</span>
1498
+
1499
+ <code class="ruby"> @redis.send(:try_acquire_lock, &quot;test&quot;, 0.1).should == true</code>
1500
+ </li>
1501
+
1502
+ <li class="never" data-hits="" data-linenumber="21">
1503
+
1504
+
1505
+ <code class="ruby"> </code>
1506
+ </li>
1507
+
1508
+ <li class="covered" data-hits="1" data-linenumber="22">
1509
+ <span class="hits">1</span>
1510
+
1511
+ <code class="ruby"> sleep(1)</code>
1512
+ </li>
1513
+
1514
+ <li class="covered" data-hits="1" data-linenumber="23">
1515
+ <span class="hits">1</span>
1516
+
1517
+ <code class="ruby"> @redis.send(:try_acquire_lock, &quot;test&quot;).should == true</code>
1518
+ </li>
1519
+
1520
+ <li class="never" data-hits="" data-linenumber="24">
1521
+
1522
+
1523
+ <code class="ruby"> </code>
1524
+ </li>
1525
+
1526
+ <li class="never" data-hits="" data-linenumber="25">
1527
+
1528
+
1529
+ <code class="ruby"> end</code>
1530
+ </li>
1531
+
1532
+ <li class="never" data-hits="" data-linenumber="26">
1533
+
1534
+
1535
+ <code class="ruby"> </code>
1536
+ </li>
1537
+
1538
+ <li class="covered" data-hits="1" data-linenumber="27">
1539
+ <span class="hits">1</span>
1540
+
1541
+ <code class="ruby"> it &quot;does not acquire lock when the lock is expired but somebody else already successfully acquire the same lock&quot; do</code>
1542
+ </li>
1543
+
1544
+ <li class="never" data-hits="" data-linenumber="28">
1545
+
1546
+
1547
+ <code class="ruby"> </code>
1548
+ </li>
1549
+
1550
+ <li class="never" data-hits="" data-linenumber="29">
1551
+
1552
+
1553
+ <code class="ruby"> end</code>
1554
+ </li>
1555
+
1556
+ <li class="never" data-hits="" data-linenumber="30">
1557
+
1558
+
1559
+ <code class="ruby"> </code>
1560
+ </li>
1561
+
1562
+ <li class="never" data-hits="" data-linenumber="31">
1563
+
1564
+
1565
+ <code class="ruby">end</code>
1566
+ </li>
1567
+
1568
+ </ol>
1569
+ </pre>
1570
+ </div>
1571
+
1572
+ </div>
1573
+ </div>
1574
+ </body>
1575
+ </html>