simplews 1.1.2 → 1.1.4
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/History.txt +1 -7
- data/lib/simplews/asynchronous.rb +116 -52
- data/lib/simplews/version.rb +1 -1
- data/lib/simplews.rb +5 -0
- data/test/simplews/test_asynchronous.rb +23 -8
- data/test/test_simplews.rb +0 -1
- metadata +1 -1
data/History.txt
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
require 'simplews'
|
1
|
+
require File.join(File.dirname(File.dirname(__FILE__)) + '/simplews')
|
2
2
|
class SimpleWS::Asynchronous < SimpleWS
|
3
3
|
|
4
4
|
class JobNotFound < Exception; end
|
5
5
|
class JobAborted < Exception; end
|
6
6
|
|
7
7
|
|
8
|
-
class Job
|
8
|
+
class Job < Thread
|
9
9
|
|
10
10
|
@@jobs = {}
|
11
|
-
attr_reader :status, :messages, :name
|
11
|
+
attr_reader :status, :messages, :name, :results
|
12
12
|
|
13
13
|
def self.random_name(s="", num=20)
|
14
14
|
num.times{
|
@@ -42,65 +42,81 @@ class SimpleWS::Asynchronous < SimpleWS
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
def self.
|
45
|
+
def self.job(name)
|
46
46
|
raise JobNotFound, "Job with name '#{ name }' was not found" if @@jobs[name].nil?
|
47
|
-
@@jobs[name]
|
48
|
-
end
|
49
|
-
def self.messages(name)
|
50
|
-
raise JobNotFound, "Job with name '#{ name }' was not found" if @@jobs[name].nil?
|
51
|
-
@@jobs[name].messages
|
47
|
+
@@jobs[name]
|
52
48
|
end
|
53
49
|
|
54
|
-
def self.
|
55
|
-
|
56
|
-
@@jobs[name]
|
57
|
-
|
58
|
-
|
59
|
-
def self.error?(name)
|
60
|
-
raise JobNotFound, "Job with name '#{ name }' was not found" if @@jobs[name].nil?
|
61
|
-
@@jobs[name].error?
|
62
|
-
end
|
63
|
-
|
64
|
-
def self.abort(name)
|
65
|
-
raise JobNotFound, "Job with name '#{ name }' was not found" if @@jobs[name].nil?
|
66
|
-
@@jobs[name].abort
|
50
|
+
def self.start(name, workdir, results, &block)
|
51
|
+
job = Job.new(name, workdir, results, &block)
|
52
|
+
@@jobs[job.name] = job
|
53
|
+
job.name
|
67
54
|
end
|
68
55
|
|
69
|
-
def self.
|
70
|
-
|
71
|
-
@@jobs[name].aborted?
|
56
|
+
def self.read(name, path)
|
57
|
+
Job::job(name).read(path)
|
72
58
|
end
|
73
59
|
|
74
60
|
|
75
|
-
def self.start(name,&block)
|
76
|
-
job = Job.new(name, &block)
|
77
|
-
@@jobs[job.name] = job
|
78
|
-
job.name
|
79
|
-
end
|
80
|
-
|
81
61
|
|
82
|
-
|
62
|
+
attr_reader :workdir, :messages, :status, :name
|
63
|
+
def initialize(name, workdir, results, &block)
|
83
64
|
@status = ''
|
84
65
|
@messages = []
|
85
66
|
@name = Job::make_name(name)
|
67
|
+
@results = results
|
68
|
+
@results_hash = {}
|
69
|
+
@workdir = workdir
|
86
70
|
|
87
|
-
|
71
|
+
super do
|
88
72
|
begin
|
89
|
-
|
73
|
+
block.call
|
90
74
|
step(:done)
|
91
75
|
|
76
|
+
exit
|
92
77
|
rescue JobAborted
|
93
78
|
step(:aborted, $!.message)
|
79
|
+
rescue
|
80
|
+
error($!.message)
|
81
|
+
raise $!
|
94
82
|
end
|
95
|
-
|
96
|
-
|
83
|
+
end
|
97
84
|
end
|
98
85
|
|
86
|
+
#{{{ Instance methods
|
99
87
|
def step(status, message="")
|
100
88
|
@status = status
|
101
89
|
@messages << message if message != ""
|
102
90
|
end
|
103
91
|
|
92
|
+
def read(path)
|
93
|
+
File.open(File.join(@workdir, path)).read
|
94
|
+
end
|
95
|
+
|
96
|
+
def write(path, content)
|
97
|
+
f = File.open(File.join(@workdir, path),'w')
|
98
|
+
f.write(content)
|
99
|
+
f.close
|
100
|
+
end
|
101
|
+
|
102
|
+
# Results
|
103
|
+
def results=(list)
|
104
|
+
@results = list
|
105
|
+
end
|
106
|
+
|
107
|
+
def results
|
108
|
+
@results.collect{|res|
|
109
|
+
res_name = Job.random_name("result-")
|
110
|
+
@results_hash[res_name] = res
|
111
|
+
res_name
|
112
|
+
}
|
113
|
+
end
|
114
|
+
|
115
|
+
def result(res_name)
|
116
|
+
raise ArgumentError, "Result #{ res_name } not found" if @results_hash[res_name].nil?
|
117
|
+
File.open(File.join(@workdir, @results_hash[res_name])).read
|
118
|
+
end
|
119
|
+
|
104
120
|
def status
|
105
121
|
@status.to_s
|
106
122
|
end
|
@@ -118,7 +134,7 @@ class SimpleWS::Asynchronous < SimpleWS
|
|
118
134
|
end
|
119
135
|
|
120
136
|
def abort
|
121
|
-
|
137
|
+
raise(JobAborted.new)
|
122
138
|
nil
|
123
139
|
end
|
124
140
|
|
@@ -129,44 +145,92 @@ class SimpleWS::Asynchronous < SimpleWS
|
|
129
145
|
|
130
146
|
end
|
131
147
|
|
148
|
+
#{{{ Server
|
149
|
+
|
132
150
|
def status(name)
|
133
|
-
Job.
|
151
|
+
Job.job(name).status
|
134
152
|
end
|
135
153
|
|
136
154
|
def abort(name)
|
137
|
-
Job.
|
155
|
+
Job.job(name).abort
|
138
156
|
end
|
139
157
|
|
140
|
-
|
141
158
|
def done(name)
|
142
|
-
Job.
|
159
|
+
Job.job(name).done?
|
143
160
|
end
|
144
161
|
|
145
162
|
def aborted(name)
|
146
|
-
Job.
|
163
|
+
Job.job(name).aborted?
|
147
164
|
end
|
148
165
|
|
149
166
|
def error(name)
|
150
|
-
Job.
|
167
|
+
Job.job(name).error?
|
151
168
|
end
|
152
169
|
|
153
170
|
def messages(name)
|
154
|
-
Job.
|
171
|
+
Job.job(name).messages
|
172
|
+
end
|
173
|
+
|
174
|
+
def results(name)
|
175
|
+
Job.job(name).results
|
176
|
+
end
|
177
|
+
|
178
|
+
def result(name, result)
|
179
|
+
Job.job(name).result(result)
|
155
180
|
end
|
156
181
|
|
157
|
-
def
|
158
|
-
|
182
|
+
def start_job(name, results = [], &block)
|
183
|
+
Job.start(name, @workdir, results, &block)
|
184
|
+
end
|
185
|
+
|
186
|
+
def workdir
|
187
|
+
@workdir
|
188
|
+
end
|
159
189
|
|
160
|
-
|
190
|
+
def set_workdir(workdir)
|
191
|
+
@workdir = workdir
|
192
|
+
begin
|
193
|
+
FileUtils.mkdir(@workdir) unless File.exist?( @workdir)
|
194
|
+
rescue
|
195
|
+
puts "Error creating work directory:"
|
196
|
+
raise $!
|
197
|
+
end
|
198
|
+
end
|
161
199
|
|
162
|
-
|
200
|
+
#{{{ Thread helper methods
|
201
|
+
|
202
|
+
def write(*args)
|
203
|
+
Thread.current.write(*args)
|
204
|
+
end
|
163
205
|
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
serve :aborted, %(name), :name => :string, :return => :boolean
|
206
|
+
def step(*args)
|
207
|
+
Thread.current.step(*args)
|
208
|
+
end
|
168
209
|
|
210
|
+
def read(*args)
|
211
|
+
Thread.current.read(*args)
|
169
212
|
end
|
170
213
|
|
171
214
|
|
215
|
+
|
216
|
+
def initialize(name="WS", description="", host="localhost", port="1984", workdir=nil, *args)
|
217
|
+
super(name, description, host, port, *args)
|
218
|
+
@results = {}
|
219
|
+
|
220
|
+
workdir ||= "/tmp/#{ name }"
|
221
|
+
set_workdir(workdir)
|
222
|
+
|
223
|
+
serve :abort, %w(name), :name => :string
|
224
|
+
|
225
|
+
serve :messages, %w(name), :name => :string, :return => :string
|
226
|
+
|
227
|
+
serve :status, %w(name), :name => :string, :return => :string
|
228
|
+
serve :done, %w(name), :name => :string, :return => :boolean
|
229
|
+
serve :error, %w(name), :name => :string, :return => :boolean
|
230
|
+
serve :aborted, %w(name), :name => :string, :return => :boolean
|
231
|
+
|
232
|
+
serve :results, %w(name), :return => :array
|
233
|
+
serve :result, %w(name result), :return => :binary
|
234
|
+
end
|
235
|
+
|
172
236
|
end
|
data/lib/simplews/version.rb
CHANGED
data/lib/simplews.rb
CHANGED
@@ -4,15 +4,25 @@ class TestSimpleWS < Test::Unit::TestCase
|
|
4
4
|
|
5
5
|
class TestAWS < SimpleWS::Asynchronous
|
6
6
|
|
7
|
+
def text
|
8
|
+
"Hi"
|
9
|
+
end
|
10
|
+
|
7
11
|
def process(name)
|
8
|
-
name =
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
name = start_job(name, %w(test.txt)) do
|
13
|
+
begin
|
14
|
+
write('test.txt', 'Hi')
|
15
|
+
step(:init)
|
16
|
+
sleep 2
|
17
|
+
step(:step1, "Step1")
|
18
|
+
sleep 2
|
19
|
+
step(:step2, "Step2")
|
20
|
+
sleep 2
|
21
|
+
step(:step2, "Step3")
|
22
|
+
rescue
|
23
|
+
puts $!.message
|
24
|
+
raise $!
|
25
|
+
end
|
16
26
|
end
|
17
27
|
|
18
28
|
name
|
@@ -53,6 +63,10 @@ class TestSimpleWS < Test::Unit::TestCase
|
|
53
63
|
|
54
64
|
assert(!driver.error(name))
|
55
65
|
assert(driver.messages(name).include? "Step3")
|
66
|
+
assert(driver.results(name).length == 1)
|
67
|
+
|
68
|
+
result = driver.results(name).first
|
69
|
+
assert(driver.result(name, result) == 'Hi')
|
56
70
|
|
57
71
|
|
58
72
|
name = driver.process("test-AWS")
|
@@ -60,6 +74,7 @@ class TestSimpleWS < Test::Unit::TestCase
|
|
60
74
|
puts "status: " + driver.status(name)
|
61
75
|
driver.abort(name)
|
62
76
|
sleep 2
|
77
|
+
puts driver.status(name)
|
63
78
|
assert(!driver.aborted(name))
|
64
79
|
end
|
65
80
|
|
data/test/test_simplews.rb
CHANGED