mlanett-redis-lock 0.1.1 → 0.2.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.
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ gemfile:
5
+ - Gemfile-redis2
6
+ - Gemfile-redis3
7
+ before_script: "sudo apt-get install -qq redis-server"
data/Gemfile-redis2 ADDED
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in redis-lock.gemspec
4
+ gemspec
5
+
6
+ gem 'redis', '~>2.0'
7
+ gem "simplecov", require: false
8
+ gem 'rspec'
9
+ gem 'rake'
@@ -0,0 +1,35 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ mlanett-redis-lock (0.1.1)
5
+ redis
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ diff-lcs (1.1.3)
11
+ multi_json (1.3.6)
12
+ rake (0.9.2.2)
13
+ redis (2.2.2)
14
+ rspec (2.11.0)
15
+ rspec-core (~> 2.11.0)
16
+ rspec-expectations (~> 2.11.0)
17
+ rspec-mocks (~> 2.11.0)
18
+ rspec-core (2.11.1)
19
+ rspec-expectations (2.11.2)
20
+ diff-lcs (~> 1.1.3)
21
+ rspec-mocks (2.11.2)
22
+ simplecov (0.6.4)
23
+ multi_json (~> 1.0)
24
+ simplecov-html (~> 0.5.3)
25
+ simplecov-html (0.5.3)
26
+
27
+ PLATFORMS
28
+ ruby
29
+
30
+ DEPENDENCIES
31
+ mlanett-redis-lock!
32
+ rake
33
+ redis (~> 2.0)
34
+ rspec
35
+ simplecov
data/Gemfile-redis3 ADDED
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in redis-lock.gemspec
4
+ gemspec
5
+
6
+ gem 'redis', '~>3.0'
7
+ gem 'rake'
8
+ gem "simplecov", require: false
9
+ gem 'rspec'
@@ -0,0 +1,35 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ mlanett-redis-lock (0.1.1)
5
+ redis
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ diff-lcs (1.1.3)
11
+ multi_json (1.3.6)
12
+ rake (0.9.2.2)
13
+ redis (3.0.1)
14
+ rspec (2.11.0)
15
+ rspec-core (~> 2.11.0)
16
+ rspec-expectations (~> 2.11.0)
17
+ rspec-mocks (~> 2.11.0)
18
+ rspec-core (2.11.1)
19
+ rspec-expectations (2.11.2)
20
+ diff-lcs (~> 1.1.3)
21
+ rspec-mocks (2.11.2)
22
+ simplecov (0.6.4)
23
+ multi_json (~> 1.0)
24
+ simplecov-html (~> 0.5.3)
25
+ simplecov-html (0.5.3)
26
+
27
+ PLATFORMS
28
+ ruby
29
+
30
+ DEPENDENCIES
31
+ mlanett-redis-lock!
32
+ rake
33
+ redis (~> 3.0)
34
+ rspec
35
+ simplecov
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Redis::Lock
2
2
 
3
+ [![Build Status](https://secure.travis-ci.org/langalex/redis-lock.png?branch=master)](http://travis-ci.org/langalex/redis-lock)
4
+
5
+
3
6
  This gem implements a pessimistic lock using Redis.
4
7
  It correctly handles timeouts and vanishing lock owners (such as machine failures)
5
8
 
@@ -9,7 +12,7 @@ This uses setnx, but not the setnx algorithm described in the redis cookbook, wh
9
12
 
10
13
  Add this line to your application's Gemfile:
11
14
 
12
- gem 'redis-lock'
15
+ gem 'mlanett-redis-lock', require: 'redis-lock'
13
16
 
14
17
  And then execute:
15
18
 
@@ -17,7 +20,7 @@ And then execute:
17
20
 
18
21
  Or install it yourself as:
19
22
 
20
- $ gem install redis-lock
23
+ $ gem install mlanett-redis-lock
21
24
 
22
25
  ## Background
23
26
 
data/lib/redis-lock.rb CHANGED
@@ -35,12 +35,12 @@ class Redis
35
35
  do_lock_with_timeout(timeout) or raise LockNotAcquired.new(key)
36
36
  if block then
37
37
  begin
38
- block.call
38
+ result = block.call
39
39
  ensure
40
40
  release_lock
41
41
  end
42
42
  end
43
- self
43
+ result
44
44
  end
45
45
 
46
46
  def extend_life( new_life )
@@ -85,7 +85,7 @@ class Redis
85
85
  new_xval = Time.now.to_i + life
86
86
  result = redis.mapped_msetnx okey => oval, xkey => new_xval
87
87
 
88
- if result == 1 then
88
+ if [1, true].include?(result) then
89
89
  log :debug, "do_lock() success"
90
90
  @xval = new_xval
91
91
  return true
@@ -1,5 +1,5 @@
1
1
  class Redis
2
2
  class Lock
3
- VERSION = "0.1.1"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -20,16 +20,22 @@ describe Redis::Lock, redis: true do
20
20
  hers.should_not be_locked
21
21
  end
22
22
 
23
+ it 'returns the return value of the block' do
24
+ hers.lock do
25
+ 1
26
+ end.should eql(1)
27
+ end
28
+
23
29
  it "can prevent other use of a lock" do
24
30
  hers.lock do
25
- expect { his.lock.unlock }.to raise_exception
31
+ expect { his.lock; his.unlock }.to raise_exception
26
32
  end
27
- expect { his.lock.unlock }.to_not raise_exception
33
+ expect { his.lock; his.unlock }.to_not raise_exception
28
34
  end
29
35
 
30
36
  it "can lock two different items at the same time" do
31
37
  his.lock do
32
- expect { his_other.lock.unlock }.to_not raise_exception
38
+ expect { his_other.lock; his_other.unlock }.to_not raise_exception
33
39
  his.should be_locked
34
40
  end
35
41
  end
@@ -45,7 +51,7 @@ describe Redis::Lock, redis: true do
45
51
  end
46
52
 
47
53
  it "can release a lock" do
48
- hers.lock.release_lock
54
+ hers.lock; hers.release_lock
49
55
  end
50
56
 
51
57
  it "can use a timeout" do
@@ -70,14 +76,14 @@ describe Redis::Lock, redis: true do
70
76
  hers.life = 1
71
77
  hers.lock
72
78
  # don't unlock it, let hers time out
73
- expect { his.lock(10).unlock }.to_not raise_exception
79
+ expect { his.lock(10); his.unlock }.to_not raise_exception
74
80
  end
75
81
 
76
82
  it "can extend the life of a lock" do
77
83
  hers.life = 1
78
84
  hers.lock
79
85
  hers.extend_life(100)
80
- expect { his.lock(10).unlock }.to raise_exception
86
+ expect { his.lock(10); his.unlock }.to raise_exception
81
87
  hers.unlock
82
88
  end
83
89
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mlanett-redis-lock
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-14 00:00:00.000000000Z
12
+ date: 2013-02-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: redis
16
- requirement: &70189385787000 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,12 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70189385787000
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  description: Pessimistic locking using Redis
26
31
  email:
27
32
  - mark.lanett@gmail.com
@@ -31,7 +36,12 @@ extra_rdoc_files: []
31
36
  files:
32
37
  - .gitignore
33
38
  - .rspec
39
+ - .travis.yml
34
40
  - Gemfile
41
+ - Gemfile-redis2
42
+ - Gemfile-redis2.lock
43
+ - Gemfile-redis3
44
+ - Gemfile-redis3.lock
35
45
  - Guardfile
36
46
  - LICENSE
37
47
  - README.md
@@ -56,15 +66,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
56
66
  - - ! '>='
57
67
  - !ruby/object:Gem::Version
58
68
  version: '0'
69
+ segments:
70
+ - 0
71
+ hash: -3504077138606239435
59
72
  required_rubygems_version: !ruby/object:Gem::Requirement
60
73
  none: false
61
74
  requirements:
62
75
  - - ! '>='
63
76
  - !ruby/object:Gem::Version
64
77
  version: '0'
78
+ segments:
79
+ - 0
80
+ hash: -3504077138606239435
65
81
  requirements: []
66
82
  rubyforge_project:
67
- rubygems_version: 1.8.16
83
+ rubygems_version: 1.8.23
68
84
  signing_key:
69
85
  specification_version: 3
70
86
  summary: Pessimistic locking using Redis