process_lock 0.0.1 → 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.
data/.gitignore CHANGED
@@ -37,7 +37,7 @@ tmtags
37
37
  *~
38
38
 
39
39
  ## PROJECT::SPECIFIC
40
- tmp/example*
40
+ tmp/pids/example*
41
41
  ,*
42
42
 
43
43
  # Local ruby version config
data/README.md CHANGED
@@ -33,6 +33,7 @@ Methods:
33
33
 
34
34
  Note:
35
35
  * locks don't stack - if we have already acquired the lock subsequent calls will reacquire the lock. releasing an already released lock will fail.
36
+ * If Rails.root is defined then lock files will be put in tmp/pids, and have .pid appended if no extension is specified
36
37
 
37
38
  To acquire a lock, do some work and then release it:
38
39
 
@@ -1,3 +1,3 @@
1
1
  class ProcessLock
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/process_lock.rb CHANGED
@@ -13,6 +13,12 @@ class ProcessLock
13
13
 
14
14
  def initialize(filename)
15
15
  @filename = filename
16
+ if defined?(Rails) and Rails.root and (File.basename(filename) == @filename)
17
+ @filename = File.join(Rails.root, 'tmp', 'pids', filename)
18
+ unless filename =~ /\./
19
+ @filename << '.pid'
20
+ end
21
+ end
16
22
  FileUtils.touch(@filename)
17
23
  end
18
24
 
@@ -5,14 +5,14 @@ require 'fileutils'
5
5
  describe 'ProcessLock' do
6
6
 
7
7
  before(:all) do
8
- FileUtils.mkdir_p('tmp')
9
- FileUtils.rm_f Dir.glob('tmp/example*.tmp')
8
+ FileUtils.mkdir_p('tmp/pids')
9
+ FileUtils.rm_f Dir.glob('tmp/pids/example*.tmp')
10
10
  end
11
11
 
12
12
  describe '#acquire' do
13
13
 
14
14
  it 'should acquire a lock when called without a block' do
15
- p = ProcessLock.new('tmp/example1.txt')
15
+ p = ProcessLock.new('tmp/pids/example1.txt')
16
16
  p.should_not be_owner
17
17
  p.acquire.should be_true
18
18
  p.should be_owner
@@ -23,7 +23,7 @@ describe 'ProcessLock' do
23
23
  end
24
24
 
25
25
  it 'should acquire a lock when called with a block and then release it' do
26
- p = ProcessLock.new('tmp/example2.txt')
26
+ p = ProcessLock.new('tmp/pids/example2.txt')
27
27
  p.should_not be_owner
28
28
  did_something = false
29
29
  p.acquire do
@@ -47,7 +47,7 @@ describe 'ProcessLock' do
47
47
  end
48
48
 
49
49
  it 'should acquire a lock when called with a block containing a return and then release it' do
50
- p = ProcessLock.new('tmp/example3.txt')
50
+ p = ProcessLock.new('tmp/pids/example3.txt')
51
51
  p.should_not be_owner
52
52
  acquire_and_then_return_block_value(p) do
53
53
  'value returned by block'
@@ -57,7 +57,7 @@ describe 'ProcessLock' do
57
57
  end
58
58
 
59
59
  it 'should not acquire a lock if some other process has the lock' do
60
- fn = 'tmp/example4.txt'
60
+ fn = 'tmp/pids/example4.txt'
61
61
  system('bash spec/other_process.sh "%s" 100' % fn)
62
62
  p = ProcessLock.new(fn)
63
63
  200.times do |i|
@@ -87,7 +87,7 @@ describe 'ProcessLock' do
87
87
  end
88
88
 
89
89
  it 'should acquire a lock if an completed process has the lock' do
90
- fn = 'tmp/example5.txt'
90
+ fn = 'tmp/pids/example5.txt'
91
91
  system('bash spec/other_process.sh "%s" 0' % fn)
92
92
  p = ProcessLock.new(fn)
93
93
  200.times do |i|
@@ -107,7 +107,7 @@ describe 'ProcessLock' do
107
107
 
108
108
  it 'should allow multiple sequential locked sections' do
109
109
  3.times do
110
- p = ProcessLock.new('tmp/example6.txt')
110
+ p = ProcessLock.new('tmp/pids/example6.txt')
111
111
  p.should_not be_owner
112
112
  did_something = false
113
113
  p.acquire do
@@ -122,7 +122,7 @@ describe 'ProcessLock' do
122
122
  end
123
123
 
124
124
  it 'should allow multiple parallel but differently named locked sections' do
125
- ps = 3.times.collect { |i| ProcessLock.new('tmp/example7-%d.txt' % i) }
125
+ ps = 3.times.collect { |i| ProcessLock.new('tmp/pids/example7-%d.txt' % i) }
126
126
  did_something = 0
127
127
  ps.each do |p|
128
128
  p.should_not be_owner
@@ -144,19 +144,19 @@ describe 'ProcessLock' do
144
144
  describe '#acquire!' do
145
145
 
146
146
  it 'should call acquire and expect true' do
147
- p = ProcessLock.new('tmp/example8.txt')
147
+ p = ProcessLock.new('tmp/pids/example8.txt')
148
148
  p.stub(:acquire_without_block).and_return(true)
149
149
  p.acquire!.should be_true
150
150
  end
151
151
 
152
152
  it 'throw an error if acquire returns false' do
153
- p = ProcessLock.new('tmp/example9.txt')
153
+ p = ProcessLock.new('tmp/pids/example9.txt')
154
154
  p.stub(:acquire_without_block).and_return(false)
155
155
  expect { p.acquire! }.to raise_error(ProcessLock::AlreadyLocked)
156
156
  end
157
157
 
158
158
  it 'should acquire a lock when called with a block and then release it' do
159
- p = ProcessLock.new('tmp/example2.txt')
159
+ p = ProcessLock.new('tmp/pids/example2.txt')
160
160
  p.should_not be_owner
161
161
  did_something = false
162
162
  p.acquire! do
@@ -175,13 +175,13 @@ describe 'ProcessLock' do
175
175
  describe '#release!' do
176
176
 
177
177
  it 'should call release and expect true' do
178
- p = ProcessLock.new('tmp/example10.txt')
178
+ p = ProcessLock.new('tmp/pids/example10.txt')
179
179
  p.stub(:release).and_return(true)
180
180
  p.release!.should be_true
181
181
  end
182
182
 
183
183
  it 'throw an error if release returns false' do
184
- p = ProcessLock.new('tmp/example11.txt')
184
+ p = ProcessLock.new('tmp/pids/example11.txt')
185
185
  p.stub(:release).and_return(false)
186
186
  expect { p.release! }.to raise_error(ProcessLock::NotLocked)
187
187
  end
@@ -191,7 +191,7 @@ describe 'ProcessLock' do
191
191
  describe '#read' do
192
192
 
193
193
  it 'should return the current PID if the lock was acquired' do
194
- p = ProcessLock.new('tmp/example12.txt')
194
+ p = ProcessLock.new('tmp/pids/example12.txt')
195
195
  p.acquire do
196
196
  p.read.should == Process.pid
197
197
  p.should be_alive
@@ -200,7 +200,7 @@ describe 'ProcessLock' do
200
200
  end
201
201
 
202
202
  it 'should return whatever number is in the file' do
203
- p = ProcessLock.new('tmp/example13.txt')
203
+ p = ProcessLock.new('tmp/pids/example13.txt')
204
204
  File.open(p.filename, 'w') do |f|
205
205
  f.puts('314152653')
206
206
  end
@@ -211,15 +211,35 @@ describe 'ProcessLock' do
211
211
 
212
212
  describe '#filename' do
213
213
 
214
- it 'should return the filename' do
215
- fn = 'tmp/example14.txt'
214
+ class Rails
215
+ def self.root
216
+ '.'
217
+ end
218
+ end
219
+
220
+ it 'should return the path' do
221
+ fn = 'tmp/pids/example14'
216
222
  p = ProcessLock.new(fn)
217
223
  p.filename.should == fn
218
224
  end
225
+
226
+ it 'should return tmp/pids/exampleN.pid for a simple name if Rails.root is set' do
227
+ fn = 'example14b'
228
+ Rails.root.should == '.'
229
+ p = ProcessLock.new(fn)
230
+ p.filename.should == "./tmp/pids/%s.pid" % fn
231
+ end
232
+
233
+ it 'should return tmp/pids/NAME.ext for NAME.ext if Rails.root is set' do
234
+ fn = 'example14c.ext'
235
+ p = ProcessLock.new(fn)
236
+ p.filename.should == "./tmp/pids/%s" % fn
237
+ end
238
+
219
239
  end
220
240
 
221
241
  it 'should use a string for the current PID in filename' do
222
- p = ProcessLock.new('tmp/example15.txt')
242
+ p = ProcessLock.new('tmp/pids/example15.txt')
223
243
  p.acquire do
224
244
  File.open(p.filename, 'r') do |f|
225
245
  contents = f.read
metadata CHANGED
@@ -1,78 +1,81 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: process_lock
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.1
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Simon Engledew
9
14
  - Ian Heggie
10
15
  autorequire:
11
16
  bindir: bin
12
17
  cert_chain: []
13
- date: 2014-02-14 00:00:00.000000000 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
18
+
19
+ date: 2014-02-14 00:00:00 Z
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
16
22
  name: bundler
17
- requirement: !ruby/object:Gem::Requirement
18
- none: false
19
- requirements:
20
- - - ~>
21
- - !ruby/object:Gem::Version
22
- version: '1.3'
23
- type: :development
24
23
  prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
24
+ requirement: &id001 !ruby/object:Gem::Requirement
26
25
  none: false
27
- requirements:
26
+ requirements:
28
27
  - - ~>
29
- - !ruby/object:Gem::Version
30
- version: '1.3'
31
- - !ruby/object:Gem::Dependency
32
- name: rake
33
- requirement: !ruby/object:Gem::Requirement
34
- none: false
35
- requirements:
36
- - - ! '>='
37
- - !ruby/object:Gem::Version
38
- version: '0'
28
+ - !ruby/object:Gem::Version
29
+ hash: 9
30
+ segments:
31
+ - 1
32
+ - 3
33
+ version: "1.3"
39
34
  type: :development
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: rake
40
38
  prerelease: false
41
- version_requirements: !ruby/object:Gem::Requirement
39
+ requirement: &id002 !ruby/object:Gem::Requirement
42
40
  none: false
43
- requirements:
44
- - - ! '>='
45
- - !ruby/object:Gem::Version
46
- version: '0'
47
- - !ruby/object:Gem::Dependency
48
- name: rspec
49
- requirement: !ruby/object:Gem::Requirement
50
- none: false
51
- requirements:
52
- - - ~>
53
- - !ruby/object:Gem::Version
54
- version: '2.0'
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 3
45
+ segments:
46
+ - 0
47
+ version: "0"
55
48
  type: :development
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: rspec
56
52
  prerelease: false
57
- version_requirements: !ruby/object:Gem::Requirement
53
+ requirement: &id003 !ruby/object:Gem::Requirement
58
54
  none: false
59
- requirements:
55
+ requirements:
60
56
  - - ~>
61
- - !ruby/object:Gem::Version
62
- version: '2.0'
63
- description: A simple class to aquire and check process-id file based locks on a unix
64
- filesystem.
65
- email:
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 2
61
+ - 0
62
+ version: "2.0"
63
+ type: :development
64
+ version_requirements: *id003
65
+ description: A simple class to aquire and check process-id file based locks on a unix filesystem.
66
+ email:
66
67
  - ian@heggie.biz
67
68
  executables: []
69
+
68
70
  extensions: []
71
+
69
72
  extra_rdoc_files: []
70
- files:
73
+
74
+ files:
71
75
  - .gitignore
72
76
  - .rspec
73
77
  - .travis.yml
74
78
  - Gemfile
75
- - Gemfile.lock
76
79
  - README.md
77
80
  - Rakefile
78
81
  - lib/process_lock.rb
@@ -83,32 +86,39 @@ files:
83
86
  - spec/run_example.sh
84
87
  - spec/spec_helper.rb
85
88
  homepage: https://github.com/ianheggie/ruby-process-lock
86
- licenses:
89
+ licenses:
87
90
  - MIT
88
91
  post_install_message:
89
92
  rdoc_options: []
90
- require_paths:
93
+
94
+ require_paths:
91
95
  - lib
92
- required_ruby_version: !ruby/object:Gem::Requirement
96
+ required_ruby_version: !ruby/object:Gem::Requirement
93
97
  none: false
94
- requirements:
95
- - - ! '>='
96
- - !ruby/object:Gem::Version
97
- version: '0'
98
- required_rubygems_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ hash: 3
102
+ segments:
103
+ - 0
104
+ version: "0"
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
99
106
  none: false
100
- requirements:
101
- - - ! '>='
102
- - !ruby/object:Gem::Version
103
- version: '0'
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ hash: 3
111
+ segments:
112
+ - 0
113
+ version: "0"
104
114
  requirements: []
115
+
105
116
  rubyforge_project:
106
- rubygems_version: 1.8.23
117
+ rubygems_version: 1.8.6
107
118
  signing_key:
108
119
  specification_version: 3
109
- summary: Use process lock to see if a process is already running or designate a master
110
- process when running concurrent applications.
111
- test_files:
120
+ summary: Use process lock to see if a process is already running or designate a master process when running concurrent applications.
121
+ test_files:
112
122
  - spec/other_process.sh
113
123
  - spec/process_lock_spec.rb
114
124
  - spec/run_example.sh
data/Gemfile.lock DELETED
@@ -1,27 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- process_lock (0.0.1)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- diff-lcs (1.2.5)
10
- rake (10.1.1)
11
- rspec (2.14.1)
12
- rspec-core (~> 2.14.0)
13
- rspec-expectations (~> 2.14.0)
14
- rspec-mocks (~> 2.14.0)
15
- rspec-core (2.14.7)
16
- rspec-expectations (2.14.4)
17
- diff-lcs (>= 1.1.3, < 2.0)
18
- rspec-mocks (2.14.4)
19
-
20
- PLATFORMS
21
- ruby
22
-
23
- DEPENDENCIES
24
- bundler (~> 1.3)
25
- process_lock!
26
- rake
27
- rspec (~> 2.0)