hq-tools 0.7.0 → 0.8.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.
@@ -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