hq-tools 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,79 @@
1
+ module HQ
2
+ module Tools
3
+
4
+ class Future
5
+
6
+ def initialize thread_pool, *args, &block
7
+
8
+ @mutex =
9
+ Mutex.new
10
+
11
+ @resource =
12
+ ConditionVariable.new
13
+
14
+ @result =
15
+ nil
16
+
17
+ thread_pool.schedule do
18
+
19
+ begin
20
+
21
+ @result =
22
+ block.call *args
23
+
24
+ @result_type =
25
+ :return
26
+
27
+ rescue => exception
28
+
29
+ @result =
30
+ exception
31
+
32
+ @result_type =
33
+ :exception
34
+
35
+ ensure
36
+
37
+ @mutex.synchronize do
38
+ @resource.broadcast
39
+ end
40
+
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+
47
+ def get
48
+
49
+ @mutex.synchronize do
50
+
51
+ loop do
52
+
53
+ case @result_type
54
+
55
+ when :return
56
+
57
+ return @result
58
+
59
+ when :exception
60
+
61
+ raise @result
62
+
63
+ else
64
+
65
+ @resource.wait \
66
+ @mutex
67
+
68
+ end
69
+
70
+ end
71
+
72
+ end
73
+
74
+ end
75
+
76
+ end
77
+
78
+ end
79
+ end
@@ -0,0 +1,77 @@
1
+ module HQ
2
+ module Tools
3
+
4
+ class ThreadPool
5
+
6
+ def initialize
7
+ require "thread"
8
+ @tasks = Queue.new
9
+ end
10
+
11
+ def worker_init
12
+ return unless @init_hook
13
+ @init_hook.call
14
+ end
15
+
16
+ def worker_run
17
+
18
+ catch :exit do
19
+
20
+ loop do
21
+ task, args = @tasks.pop
22
+ task.call *args
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+
29
+ def worker_deinit
30
+ return unless @deinit_hook
31
+ @deinit_hook.call
32
+ end
33
+
34
+ def schedule *args, &block
35
+ @tasks << [ block, args ]
36
+ end
37
+
38
+ def init_hook &block
39
+ @init_hook = block
40
+ end
41
+
42
+ def deinit_hook &block
43
+ @deinit_hook = block
44
+ end
45
+
46
+ def start threads
47
+
48
+ @threads =
49
+ Array.new threads do
50
+
51
+ Thread.new do
52
+ worker_init
53
+ worker_run
54
+ worker_deinit
55
+ end
56
+
57
+ end
58
+
59
+ end
60
+
61
+ def stop
62
+
63
+ @threads.size.times do
64
+ schedule { throw :exit }
65
+ end
66
+
67
+ @threads.each do
68
+ |thread|
69
+ thread.join
70
+ end
71
+
72
+ end
73
+
74
+ end
75
+
76
+ end
77
+ end
metadata CHANGED
@@ -1,97 +1,110 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hq-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - James Pharaoh
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-05-01 00:00:00.000000000 Z
12
+ date: 2013-05-07 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: cucumber
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - '>='
19
+ - - ! '>='
18
20
  - !ruby/object:Gem::Version
19
21
  version: 1.2.1
20
22
  type: :development
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
- - - '>='
27
+ - - ! '>='
25
28
  - !ruby/object:Gem::Version
26
29
  version: 1.2.1
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: libxml-ruby
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
- - - '>='
35
+ - - ! '>='
32
36
  - !ruby/object:Gem::Version
33
37
  version: 2.6.0
34
38
  type: :development
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
- - - '>='
43
+ - - ! '>='
39
44
  - !ruby/object:Gem::Version
40
45
  version: 2.6.0
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: rake
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
- - - '>='
51
+ - - ! '>='
46
52
  - !ruby/object:Gem::Version
47
53
  version: 10.0.3
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
- - - '>='
59
+ - - ! '>='
53
60
  - !ruby/object:Gem::Version
54
61
  version: 10.0.3
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: rspec
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
- - - '>='
67
+ - - ! '>='
60
68
  - !ruby/object:Gem::Version
61
69
  version: 2.12.0
62
70
  type: :development
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
- - - '>='
75
+ - - ! '>='
67
76
  - !ruby/object:Gem::Version
68
77
  version: 2.12.0
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: rspec_junit_formatter
71
80
  requirement: !ruby/object:Gem::Requirement
81
+ none: false
72
82
  requirements:
73
- - - '>='
83
+ - - ! '>='
74
84
  - !ruby/object:Gem::Version
75
85
  version: '0'
76
86
  type: :development
77
87
  prerelease: false
78
88
  version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
79
90
  requirements:
80
- - - '>='
91
+ - - ! '>='
81
92
  - !ruby/object:Gem::Version
82
93
  version: '0'
83
94
  - !ruby/object:Gem::Dependency
84
95
  name: simplecov
85
96
  requirement: !ruby/object:Gem::Requirement
97
+ none: false
86
98
  requirements:
87
- - - '>='
99
+ - - ! '>='
88
100
  - !ruby/object:Gem::Version
89
101
  version: '0'
90
102
  type: :development
91
103
  prerelease: false
92
104
  version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
93
106
  requirements:
94
- - - '>='
107
+ - - ! '>='
95
108
  - !ruby/object:Gem::Version
96
109
  version: '0'
97
110
  description: HQ common library
@@ -105,8 +118,10 @@ files:
105
118
  - lib/hq/tools/cron.rb
106
119
  - lib/hq/tools/lock.rb
107
120
  - lib/hq/tools/escape.rb
121
+ - lib/hq/tools/thread-pool.rb
108
122
  - lib/hq/tools/check-script.rb
109
123
  - lib/hq/tools/libxml-ruby.rb
124
+ - lib/hq/tools/future.rb
110
125
  - spec/hq/tools/libxml-ruby-spec.rb
111
126
  - spec/hq/tools/lock-spec.rb
112
127
  - spec/hq/tools/getopt-spec.rb
@@ -114,26 +129,27 @@ files:
114
129
  - spec/hq/tools/check-script-spec.rb
115
130
  homepage: https://github.com/jamespharaoh/hq-tools
116
131
  licenses: []
117
- metadata: {}
118
132
  post_install_message:
119
133
  rdoc_options: []
120
134
  require_paths:
121
135
  - lib
122
136
  required_ruby_version: !ruby/object:Gem::Requirement
137
+ none: false
123
138
  requirements:
124
- - - '>='
139
+ - - ! '>='
125
140
  - !ruby/object:Gem::Version
126
141
  version: '0'
127
142
  required_rubygems_version: !ruby/object:Gem::Requirement
143
+ none: false
128
144
  requirements:
129
- - - '>='
145
+ - - ! '>='
130
146
  - !ruby/object:Gem::Version
131
147
  version: 1.3.6
132
148
  requirements: []
133
149
  rubyforge_project: hq-tools
134
- rubygems_version: 2.0.3
150
+ rubygems_version: 1.8.23
135
151
  signing_key:
136
- specification_version: 4
152
+ specification_version: 3
137
153
  summary: HQ tools
138
154
  test_files:
139
155
  - spec/hq/tools/libxml-ruby-spec.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 535a0e8a9328942e9dd4610baa66baf2842627d5
4
- data.tar.gz: 0634470c166d2ac7ce77b9177999e8d862eda827
5
- SHA512:
6
- metadata.gz: eeb856df02859e81279f1e64e14672e5db793b0921ec977dda05c31785b2492d152f33c46486db40951fa8ea6e0933f8519722986ee0daa03bbc26fd425469ac
7
- data.tar.gz: 8e6ff89cff18247a61fab54af608890641f9784afca4fe7a61ae29966f73b2d3bbbc9e88305758263b74d69f903f2f785b0d8c6e2c2f603bff72199d723ad051