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
data/.loadpath ADDED
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <loadpath>
3
+ <pathentry path="" type="src"/>
4
+ <pathentry path="org.rubypeople.rdt.launching.RUBY_CONTAINER" type="con"/>
5
+ </loadpath>
data/.project ADDED
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <projectDescription>
3
+ <name>ruby_redis_lock</name>
4
+ <comment></comment>
5
+ <projects>
6
+ </projects>
7
+ <buildSpec>
8
+ <buildCommand>
9
+ <name>org.rubypeople.rdt.core.rubybuilder</name>
10
+ <arguments>
11
+ </arguments>
12
+ </buildCommand>
13
+ </buildSpec>
14
+ <natures>
15
+ <nature>org.rubypeople.rdt.core.rubynature</nature>
16
+ </natures>
17
+ </projectDescription>
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'rspec'
4
+ gem 'redis', :git=> 'git://github.com/ezmobius/redis-rb.git'
5
+ gem 'simplecov'
data/Gemfile.lock ADDED
@@ -0,0 +1,31 @@
1
+ GIT
2
+ remote: git://github.com/ezmobius/redis-rb.git
3
+ revision: fffaa14ba473a0e2a1303f82f22e83b6abe01c64
4
+ specs:
5
+ redis (2.2.2)
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ diff-lcs (1.1.3)
11
+ multi_json (1.0.3)
12
+ rspec (2.6.0)
13
+ rspec-core (~> 2.6.0)
14
+ rspec-expectations (~> 2.6.0)
15
+ rspec-mocks (~> 2.6.0)
16
+ rspec-core (2.6.4)
17
+ rspec-expectations (2.6.0)
18
+ diff-lcs (~> 1.1.2)
19
+ rspec-mocks (2.6.0)
20
+ simplecov (0.5.3)
21
+ multi_json (~> 1.0.3)
22
+ simplecov-html (~> 0.5.3)
23
+ simplecov-html (0.5.3)
24
+
25
+ PLATFORMS
26
+ x86-mingw32
27
+
28
+ DEPENDENCIES
29
+ redis!
30
+ rspec
31
+ simplecov
data/Readme.md ADDED
@@ -0,0 +1,85 @@
1
+ Ruby-Redis-Lock - Distributed lock for Ruby (using Redis)
2
+ =======================================================
3
+
4
+ A distributed lock that utilizes Redis.
5
+ It also handles failures.
6
+ If a process acquires a lock for more than some period of time (default is 60 seconds),
7
+ the lock is automatically released.
8
+
9
+ Basically, it follows the algorithm explained here: http://redis.io/commands/setnx
10
+
11
+ Nevertheless, the algorithm on releasing a lock is improved. Please the comments in http://redis.io/commands/setnx
12
+
13
+ The example of using it:
14
+
15
+ ```ruby
16
+
17
+ $redis = Redis.new
18
+
19
+ $redis.lock('some_name', 60, 10) do
20
+
21
+ #
22
+ # Do some tasks here
23
+ #
24
+
25
+ end
26
+
27
+ ```
28
+
29
+ The API is below:
30
+
31
+ ```ruby
32
+ lock(lock_name, processing_timeout=60, acquiring_timout=10)
33
+ ```
34
+
35
+ You can change processing_timeout and acquiring_timeout.
36
+
37
+ The lock will be expired after it has been acquired for a period of time longer than processing_timeout (in seconds).
38
+
39
+ An error will be raised if the lock cannot be acquired within acquiring_timeout (in seconds).
40
+
41
+ Installation
42
+ ------------------
43
+
44
+ You can install it directly by:
45
+
46
+ ```sh
47
+ gem install ruby_redis_lock
48
+ ```
49
+
50
+ or put it in your Gemfile:
51
+
52
+ ```sh
53
+ gen 'ruby_redis_lock'
54
+ ```
55
+
56
+ Help me
57
+ --------------
58
+
59
+ 1. Clone the project
60
+ 2. Install all dependencies with
61
+
62
+ ```
63
+ bundle install
64
+ ```
65
+
66
+ 3. Start Redis and running all test cases
67
+
68
+ ```
69
+ bundle exec rspec spec/*
70
+ ```
71
+
72
+ 4. Add a feature, if everything is ok
73
+ 5. Write tests for the feature
74
+ 6. Send me a pull request
75
+
76
+
77
+ Author
78
+ ------------
79
+ Tanin Na Nakorn
80
+
81
+
82
+ Boring legal stuff
83
+ -------------------
84
+
85
+ You can do whatever you want with it
@@ -0,0 +1,240 @@
1
+ {
2
+ "RSpec": {
3
+ "coverage": {
4
+ "C:/Users/Tanin/Documents/Ruby/ruby_redis_lock/lib/ruby_redis_lock.rb": [
5
+ 1,
6
+ null,
7
+ 1,
8
+ null,
9
+ null,
10
+ 1,
11
+ 1,
12
+ null,
13
+ null
14
+ ],
15
+ "C:/Users/Tanin/Documents/Ruby/ruby_redis_lock/lib/ruby_redis_lock/ruby_redis_lock.rb": [
16
+ 1,
17
+ null,
18
+ null,
19
+ 1,
20
+ 7,
21
+ 6,
22
+ null,
23
+ 7,
24
+ null,
25
+ null,
26
+ null,
27
+ 1,
28
+ 1,
29
+ null,
30
+ 17,
31
+ null,
32
+ 17,
33
+ null,
34
+ 43,
35
+ null,
36
+ 43,
37
+ 2,
38
+ null,
39
+ null,
40
+ null,
41
+ null,
42
+ 15,
43
+ null,
44
+ null,
45
+ null,
46
+ 1,
47
+ null,
48
+ 63,
49
+ 63,
50
+ null,
51
+ 47,
52
+ 47,
53
+ null,
54
+ 3,
55
+ 3,
56
+ null,
57
+ 0,
58
+ null,
59
+ null,
60
+ null,
61
+ 1,
62
+ null,
63
+ 10,
64
+ 10,
65
+ null,
66
+ 8,
67
+ null,
68
+ 8,
69
+ 8,
70
+ 8,
71
+ null,
72
+ null,
73
+ 0,
74
+ null,
75
+ null,
76
+ 1,
77
+ 140,
78
+ null,
79
+ null,
80
+ null,
81
+ null
82
+ ],
83
+ "C:/Users/Tanin/Documents/Ruby/ruby_redis_lock/spec/lock_spec.rb": [
84
+ 1,
85
+ null,
86
+ 1,
87
+ null,
88
+ 1,
89
+ null,
90
+ 1,
91
+ null,
92
+ null,
93
+ null,
94
+ 1,
95
+ null,
96
+ 1,
97
+ null,
98
+ 1,
99
+ 1,
100
+ 1,
101
+ 1,
102
+ null,
103
+ null,
104
+ null,
105
+ 1,
106
+ null,
107
+ 1,
108
+ null,
109
+ 1,
110
+ null,
111
+ null,
112
+ null,
113
+ 1,
114
+ null,
115
+ 1,
116
+ null,
117
+ 1,
118
+ 1,
119
+ null,
120
+ null,
121
+ 1,
122
+ null,
123
+ 1,
124
+ null,
125
+ 1,
126
+ null,
127
+ null,
128
+ null,
129
+ 1,
130
+ null,
131
+ 1,
132
+ 1,
133
+ 1,
134
+ 1,
135
+ null,
136
+ null,
137
+ null,
138
+ 1,
139
+ 2,
140
+ null,
141
+ null,
142
+ null,
143
+ 1,
144
+ null,
145
+ 1,
146
+ 1,
147
+ 1,
148
+ null,
149
+ null,
150
+ null,
151
+ null,
152
+ 1,
153
+ null,
154
+ null,
155
+ null,
156
+ null
157
+ ],
158
+ "C:/Users/Tanin/Documents/Ruby/ruby_redis_lock/spec/release_lock_spec.rb": [
159
+ 1,
160
+ null,
161
+ 1,
162
+ null,
163
+ 1,
164
+ null,
165
+ 1,
166
+ null,
167
+ 1,
168
+ null,
169
+ null,
170
+ null,
171
+ 1,
172
+ null,
173
+ 1,
174
+ null,
175
+ 1,
176
+ 1,
177
+ null,
178
+ null,
179
+ null,
180
+ null
181
+ ],
182
+ "C:/Users/Tanin/Documents/Ruby/ruby_redis_lock/spec/spec_helper.rb": [
183
+ null,
184
+ 1,
185
+ 1,
186
+ 1,
187
+ null,
188
+ null,
189
+ 1,
190
+ null,
191
+ 1,
192
+ null,
193
+ 1,
194
+ null,
195
+ 1,
196
+ null,
197
+ 1,
198
+ 15,
199
+ 15,
200
+ null,
201
+ null,
202
+ null
203
+ ],
204
+ "C:/Users/Tanin/Documents/Ruby/ruby_redis_lock/spec/try_acquire_lock_spec.rb": [
205
+ 1,
206
+ null,
207
+ 1,
208
+ null,
209
+ 1,
210
+ null,
211
+ 1,
212
+ null,
213
+ null,
214
+ null,
215
+ 1,
216
+ null,
217
+ 1,
218
+ 1,
219
+ null,
220
+ null,
221
+ null,
222
+ 1,
223
+ null,
224
+ 1,
225
+ null,
226
+ 1,
227
+ 1,
228
+ null,
229
+ null,
230
+ null,
231
+ 1,
232
+ null,
233
+ null,
234
+ null,
235
+ null
236
+ ]
237
+ },
238
+ "timestamp": 1317324230
239
+ }
240
+ }
@@ -0,0 +1,88 @@
1
+ $(document).ready(function() {
2
+ // Configuration for fancy sortable tables for source file groups
3
+ $('.file_list').dataTable({
4
+ "aaSorting": [[ 1, "asc" ]],
5
+ "bPaginate": false,
6
+ "bJQueryUI": true,
7
+ "aoColumns": [
8
+ null,
9
+ { "sType": "percent" },
10
+ null,
11
+ null,
12
+ null,
13
+ null,
14
+ null
15
+ ]
16
+ });
17
+
18
+ // Syntax highlight all files up front - deactivated
19
+ // $('.source_table pre code').each(function(i, e) {hljs.highlightBlock(e, ' ')});
20
+
21
+ // Syntax highlight source files on first toggle of the file view popup
22
+ $("a.src_link").click(function() {
23
+ // Get the source file element that corresponds to the clicked element
24
+ var source_table = $($(this).attr('href'));
25
+
26
+ // If not highlighted yet, do it!
27
+ if (!source_table.hasClass('highlighted')) {
28
+ source_table.find('pre code').each(function(i, e) {hljs.highlightBlock(e, ' ')});
29
+ source_table.addClass('highlighted');
30
+ };
31
+ });
32
+
33
+ // Set-up of popup for source file views
34
+ $("a.src_link").fancybox({
35
+ 'hideOnContentClick': true,
36
+ 'centerOnScroll': true,
37
+ 'width': '90%',
38
+ 'padding': 0,
39
+ 'transitionIn': 'elastic'
40
+ });
41
+
42
+ // Hide src files and file list container after load
43
+ $('.source_files').hide();
44
+ $('.file_list_container').hide();
45
+
46
+ // Add tabs based upon existing file_list_containers
47
+ $('.file_list_container h2').each(function(){
48
+ var container_id = $(this).parent().attr('id');
49
+ var group_name = $(this).find('.group_name').first().html();
50
+ var covered_percent = $(this).find('.covered_percent').first().html();
51
+
52
+ $('.group_tabs').append('<li><a href="#' + container_id + '">' + group_name + ' ('+ covered_percent +')</a></li>');
53
+ });
54
+
55
+ $('.group_tabs a').each( function() {
56
+ $(this).addClass($(this).attr('href').replace('#', ''));
57
+ });
58
+
59
+ // Make sure tabs don't get ugly focus borders when active
60
+ $('.group_tabs a').live('focus', function() { $(this).blur(); });
61
+
62
+ var favicon_path = $('link[rel="shortcut icon"]').attr('href');
63
+ $('.group_tabs a').live('click', function(){
64
+ if (!$(this).parent().hasClass('active')) {
65
+ $('.group_tabs a').parent().removeClass('active');
66
+ $(this).parent().addClass('active');
67
+ $('.file_list_container').hide();
68
+ $(".file_list_container" + $(this).attr('href')).show();
69
+ window.location.href = window.location.href.split('#')[0] + $(this).attr('href').replace('#', '#_');
70
+
71
+ // Force favicon reload - otherwise the location change containing anchor would drop the favicon...
72
+ // Works only on firefox, but still... - Anyone know a better solution to force favicon on local file?
73
+ $('link[rel="shortcut icon"]').remove();
74
+ $('head').append('<link rel="shortcut icon" type="image/png" href="'+ favicon_path +'" />');
75
+ };
76
+ return false;
77
+ });
78
+
79
+ if (jQuery.url.attr('anchor')) {
80
+ $('.group_tabs a.'+jQuery.url.attr('anchor').replace('_', '')).click();
81
+ } else {
82
+ $('.group_tabs a:first').click();
83
+ };
84
+
85
+ $("abbr.timeago").timeago();
86
+ $('#loading').fadeOut();
87
+ $('#wrapper').show();
88
+ });