wire 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -26,7 +26,7 @@ Time to run: ~ *1.2 seconds*.
26
26
 
27
27
  This is how it works.
28
28
 
29
- - 11 threads is created, done at time 0
29
+ - 11 threads is created, done at time 0.
30
30
  - Running 10 threads, done at time 0.1
31
31
  - Wait 1 second, done at time 1.1
32
32
  - Start the 11th thread, done at time 1.2
@@ -88,7 +88,9 @@ Ingoing arguments to `new`.
88
88
  - **max** (Integer) The maximum amount of threads to run a the same time. The value 10 will be used if `max` is nil or zero.
89
89
  - **wait** (Integer) The time to wait before starting a new thread.
90
90
  - **vars** (Array) A list of arguments to the block.
91
-
91
+ - **silent** (Boolean) The given block will not raise error if set to true. Default is false.
92
+ - **timeout** (Integer) The maximum time to run *one* thread, default is *no limit*.
93
+
92
94
  ## How do install
93
95
 
94
96
  [sudo] gem install wire
data/lib/wire.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require "thread"
2
2
  require "monitor"
3
+ require "timeout"
3
4
 
4
5
  class Wire < Thread
5
6
  def self.counter
@@ -31,9 +32,9 @@ class Wire < Thread
31
32
  end
32
33
 
33
34
  def runner
34
- @block.call(*@vars)
35
+ @timeout ? Timeout::timeout(@timeout) { @block.call(*@vars) } : @block.call(*@vars)
35
36
  rescue => error
36
- raise error
37
+ report(error, "An error occurred: #{error.inspect}")
37
38
  ensure
38
39
  @counter.synchronize do
39
40
  if @max == @counter.i or @counter.last
@@ -43,6 +44,10 @@ class Wire < Thread
43
44
  @counter.cond.signal
44
45
  end
45
46
  end
47
+
48
+ def report(error, message)
49
+ @silent ? warn(message) : (raise error)
50
+ end
46
51
  end
47
52
 
48
53
  class Counter
data/spec/wire_spec.rb CHANGED
@@ -99,5 +99,37 @@ describe Wire do
99
99
  end.join
100
100
  end.should raise_error(StandardError)
101
101
  end
102
+
103
+ it "should be silent" do
104
+ lambda do
105
+ Wire.new(wait: 5, max: 1, silent: true) do
106
+ raise StandardError.new
107
+ end.join
108
+ end.should_not raise_error(StandardError)
109
+ end
110
+
111
+ it "should raise timeout error" do
112
+ lambda do
113
+ Wire.new(wait: 5, max: 1, timeout: 1) do
114
+ sleep 5
115
+ end.join
116
+ end.should raise_error(Timeout::Error)
117
+ end
118
+
119
+ it "should not raise timeout error" do
120
+ lambda do
121
+ Wire.new(wait: 5, silent: true, max: 1, timeout: 1) do
122
+ sleep 5
123
+ end.join
124
+ end.should_not raise_error(Timeout::Error)
125
+ end
126
+
127
+ it "should not raise timeout error" do
128
+ lambda do
129
+ Wire.new(wait: 5, silent: true, max: 1, timeout: 2) do
130
+ sleep 1
131
+ end.join
132
+ end.should_not raise_error(Timeout::Error)
133
+ end
102
134
  end
103
135
  end
data/wire.gemspec CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "wire"
6
- s.version = "0.1.0"
6
+ s.version = "0.1.1"
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ["Linus Oleander"]
9
9
  s.email = ["linus@oleander.nu"]
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: wire
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.0
5
+ version: 0.1.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Linus Oleander
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-26 23:00:00 +01:00
13
+ date: 2011-03-29 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -67,7 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
67
67
  requirements: []
68
68
 
69
69
  rubyforge_project: wire
70
- rubygems_version: 1.5.0
70
+ rubygems_version: 1.6.2
71
71
  signing_key:
72
72
  specification_version: 3
73
73
  summary: Run a strict amount of threads during a time interval