simplews 1.1.4 → 1.1.5
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 +5 -0
- data/Manifest.txt +0 -2
- data/lib/simplews/asynchronous.rb +133 -61
- data/lib/simplews/version.rb +1 -1
- data/test/simplews/test_asynchronous.rb +11 -5
- data/test/test_simplews.rb +2 -0
- metadata +2 -4
- data/TestWS.wsdl +0 -112
- data/lib/helper.rb +0 -0
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require File.join(File.dirname(File.dirname(__FILE__)) + '/simplews')
|
2
|
+
|
3
|
+
require 'yaml'
|
2
4
|
class SimpleWS::Asynchronous < SimpleWS
|
3
5
|
|
4
6
|
class JobNotFound < Exception; end
|
@@ -6,10 +8,6 @@ class SimpleWS::Asynchronous < SimpleWS
|
|
6
8
|
|
7
9
|
|
8
10
|
class Job < Thread
|
9
|
-
|
10
|
-
@@jobs = {}
|
11
|
-
attr_reader :status, :messages, :name, :results
|
12
|
-
|
13
11
|
def self.random_name(s="", num=20)
|
14
12
|
num.times{
|
15
13
|
r = rand
|
@@ -43,12 +41,20 @@ class SimpleWS::Asynchronous < SimpleWS
|
|
43
41
|
end
|
44
42
|
|
45
43
|
def self.job(name)
|
46
|
-
|
44
|
+
if @@jobs[name].nil?
|
45
|
+
if File.exists?(File.join(@@workdir, ".save/#{name}.yaml"))
|
46
|
+
job = Job.new(name, [])
|
47
|
+
job.load
|
48
|
+
@@jobs[name] = job
|
49
|
+
else
|
50
|
+
raise JobNotFound, "Job with name '#{ name }' was not found"
|
51
|
+
end
|
52
|
+
end
|
47
53
|
@@jobs[name]
|
48
54
|
end
|
49
55
|
|
50
|
-
def self.start(name,
|
51
|
-
job = Job.new(name,
|
56
|
+
def self.start(name, results, &block)
|
57
|
+
job = Job.new(name, results, &block)
|
52
58
|
@@jobs[job.name] = job
|
53
59
|
job.name
|
54
60
|
end
|
@@ -58,48 +64,97 @@ class SimpleWS::Asynchronous < SimpleWS
|
|
58
64
|
end
|
59
65
|
|
60
66
|
|
67
|
+
@@workdir = nil
|
68
|
+
@@jobs = {}
|
69
|
+
|
70
|
+
def self.workdir
|
71
|
+
@@workdir
|
72
|
+
end
|
61
73
|
|
62
|
-
|
63
|
-
|
74
|
+
def self.workdir=(workdir)
|
75
|
+
@@workdir = workdir
|
76
|
+
begin
|
77
|
+
FileUtils.mkdir(@@workdir) unless File.exist?( @@workdir)
|
78
|
+
FileUtils.mkdir(File.join(@@workdir,'.save')) unless File.exist?( File.join(@@workdir,'.save'))
|
79
|
+
rescue
|
80
|
+
puts "Error creating work directory:"
|
81
|
+
raise $!
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
attr_reader :messages, :status, :name
|
86
|
+
def initialize(name, results, &block)
|
64
87
|
@status = ''
|
65
88
|
@messages = []
|
66
89
|
@name = Job::make_name(name)
|
67
90
|
@results = results
|
68
91
|
@results_hash = {}
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
92
|
+
|
93
|
+
if block_given?
|
94
|
+
super do
|
95
|
+
begin
|
96
|
+
block.call
|
97
|
+
step(:done)
|
98
|
+
|
99
|
+
rescue SimpleWS::Asynchronous::JobAborted
|
100
|
+
step(:aborted, $!.message)
|
101
|
+
rescue Exception
|
102
|
+
error($!.message)
|
103
|
+
raise $!
|
104
|
+
ensure
|
105
|
+
save
|
106
|
+
Thread.exit
|
107
|
+
end
|
82
108
|
end
|
109
|
+
else
|
110
|
+
super do end
|
83
111
|
end
|
84
112
|
end
|
85
113
|
|
114
|
+
def save
|
115
|
+
info = {
|
116
|
+
:status => @status,
|
117
|
+
:messages => @messages,
|
118
|
+
:name => @name,
|
119
|
+
:results => @results,
|
120
|
+
:results_hash => @results_hash,
|
121
|
+
}
|
122
|
+
|
123
|
+
fout = File.open(File.join(@@workdir, ".save/#{name}.yaml"),'w')
|
124
|
+
fout.write info.to_yaml
|
125
|
+
fout.close
|
126
|
+
end
|
127
|
+
|
128
|
+
def load
|
129
|
+
info = YAML::load(File.open(File.join(@@workdir, ".save/#{@name}.yaml")))
|
130
|
+
@status = info[:status]
|
131
|
+
@messages = info[:messages]
|
132
|
+
@name = info[:name]
|
133
|
+
@results = info[:results]
|
134
|
+
@results_hash = info[:results_hash]
|
135
|
+
end
|
136
|
+
|
86
137
|
#{{{ Instance methods
|
138
|
+
def name
|
139
|
+
@name
|
140
|
+
end
|
141
|
+
|
87
142
|
def step(status, message="")
|
88
143
|
@status = status
|
89
144
|
@messages << message if message != ""
|
90
145
|
end
|
91
146
|
|
92
147
|
def read(path)
|
93
|
-
File.open(File.join(
|
148
|
+
File.open(File.join(@@workdir, path)).read
|
94
149
|
end
|
95
150
|
|
96
151
|
def write(path, content)
|
97
|
-
f = File.open(File.join(
|
152
|
+
f = File.open(File.join(@@workdir, path),'w')
|
98
153
|
f.write(content)
|
99
154
|
f.close
|
100
155
|
end
|
101
156
|
|
102
|
-
# Results
|
157
|
+
#{{{ Results Related
|
103
158
|
def results=(list)
|
104
159
|
@results = list
|
105
160
|
end
|
@@ -114,15 +169,16 @@ class SimpleWS::Asynchronous < SimpleWS
|
|
114
169
|
|
115
170
|
def result(res_name)
|
116
171
|
raise ArgumentError, "Result #{ res_name } not found" if @results_hash[res_name].nil?
|
117
|
-
File.open(File.join(
|
172
|
+
File.open(File.join(@@workdir, @results_hash[res_name])).read
|
118
173
|
end
|
119
174
|
|
175
|
+
#{{{ Status related
|
120
176
|
def status
|
121
177
|
@status.to_s
|
122
178
|
end
|
123
179
|
|
124
180
|
def done?
|
125
|
-
@status.to_sym == :done || @status.to_sym == :error
|
181
|
+
@status.to_sym == :done || @status.to_sym == :error || @status.to_sym == :aborted
|
126
182
|
end
|
127
183
|
|
128
184
|
def error?
|
@@ -134,7 +190,7 @@ class SimpleWS::Asynchronous < SimpleWS
|
|
134
190
|
end
|
135
191
|
|
136
192
|
def abort
|
137
|
-
raise
|
193
|
+
raise SimpleWS::Asynchronous::JobAborted, "Aborted"
|
138
194
|
nil
|
139
195
|
end
|
140
196
|
|
@@ -145,8 +201,57 @@ class SimpleWS::Asynchronous < SimpleWS
|
|
145
201
|
|
146
202
|
end
|
147
203
|
|
204
|
+
############################################################################################3
|
148
205
|
#{{{ Server
|
149
206
|
|
207
|
+
def set_workdir(workdir)
|
208
|
+
Job::workdir = workdir
|
209
|
+
end
|
210
|
+
|
211
|
+
def workdir
|
212
|
+
Job::workdir
|
213
|
+
end
|
214
|
+
|
215
|
+
def start_job(name, results = [], &block)
|
216
|
+
Job.start(name, results, &block)
|
217
|
+
end
|
218
|
+
|
219
|
+
def set_results(name, results)
|
220
|
+
Job.job(name).results = results
|
221
|
+
end
|
222
|
+
|
223
|
+
|
224
|
+
|
225
|
+
#{{{ Thread helper methods
|
226
|
+
def save
|
227
|
+
Thread.current.save
|
228
|
+
end
|
229
|
+
|
230
|
+
|
231
|
+
def write(*args)
|
232
|
+
Thread.current.write(*args)
|
233
|
+
end
|
234
|
+
|
235
|
+
def step(*args)
|
236
|
+
Thread.current.step(*args)
|
237
|
+
end
|
238
|
+
|
239
|
+
def read(*args)
|
240
|
+
Thread.current.read(*args)
|
241
|
+
end
|
242
|
+
|
243
|
+
def job_name
|
244
|
+
Thread.current.name
|
245
|
+
end
|
246
|
+
|
247
|
+
def abort_process
|
248
|
+
Thread.current.abort
|
249
|
+
end
|
250
|
+
|
251
|
+
|
252
|
+
|
253
|
+
#{{{ WS Methods
|
254
|
+
|
150
255
|
def status(name)
|
151
256
|
Job.job(name).status
|
152
257
|
end
|
@@ -178,39 +283,6 @@ class SimpleWS::Asynchronous < SimpleWS
|
|
178
283
|
def result(name, result)
|
179
284
|
Job.job(name).result(result)
|
180
285
|
end
|
181
|
-
|
182
|
-
def start_job(name, results = [], &block)
|
183
|
-
Job.start(name, @workdir, results, &block)
|
184
|
-
end
|
185
|
-
|
186
|
-
def workdir
|
187
|
-
@workdir
|
188
|
-
end
|
189
|
-
|
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
|
199
|
-
|
200
|
-
#{{{ Thread helper methods
|
201
|
-
|
202
|
-
def write(*args)
|
203
|
-
Thread.current.write(*args)
|
204
|
-
end
|
205
|
-
|
206
|
-
def step(*args)
|
207
|
-
Thread.current.step(*args)
|
208
|
-
end
|
209
|
-
|
210
|
-
def read(*args)
|
211
|
-
Thread.current.read(*args)
|
212
|
-
end
|
213
|
-
|
214
286
|
|
215
287
|
|
216
288
|
def initialize(name="WS", description="", host="localhost", port="1984", workdir=nil, *args)
|
data/lib/simplews/version.rb
CHANGED
@@ -11,7 +11,7 @@ class TestSimpleWS < Test::Unit::TestCase
|
|
11
11
|
def process(name)
|
12
12
|
name = start_job(name, %w(test.txt)) do
|
13
13
|
begin
|
14
|
-
write('test.txt',
|
14
|
+
write('test.txt', job_name)
|
15
15
|
step(:init)
|
16
16
|
sleep 2
|
17
17
|
step(:step1, "Step1")
|
@@ -31,13 +31,13 @@ class TestSimpleWS < Test::Unit::TestCase
|
|
31
31
|
def initialize(*args)
|
32
32
|
super(*args)
|
33
33
|
serve :process, %w(name), :name => :string, :return => :string
|
34
|
-
|
35
34
|
end
|
36
35
|
end
|
37
36
|
|
38
37
|
|
39
38
|
def setup
|
40
39
|
server = TestAWS.new("TestAWS", "Asynchronous Job Server", 'localhost', '1984')
|
40
|
+
server.set_workdir("tmp-TestAWS")
|
41
41
|
|
42
42
|
Thread.new do
|
43
43
|
server.start
|
@@ -51,7 +51,8 @@ class TestSimpleWS < Test::Unit::TestCase
|
|
51
51
|
|
52
52
|
driver = SimpleWS.get_driver('http://localhost:1984', 'TestAWS')
|
53
53
|
|
54
|
-
name = driver.process("
|
54
|
+
name = driver.process("")
|
55
|
+
|
55
56
|
|
56
57
|
|
57
58
|
puts "Job name #{ name }"
|
@@ -66,7 +67,7 @@ class TestSimpleWS < Test::Unit::TestCase
|
|
66
67
|
assert(driver.results(name).length == 1)
|
67
68
|
|
68
69
|
result = driver.results(name).first
|
69
|
-
|
70
|
+
assert_match(name, driver.result(name, result))
|
70
71
|
|
71
72
|
|
72
73
|
name = driver.process("test-AWS")
|
@@ -75,7 +76,12 @@ class TestSimpleWS < Test::Unit::TestCase
|
|
75
76
|
driver.abort(name)
|
76
77
|
sleep 2
|
77
78
|
puts driver.status(name)
|
78
|
-
assert(
|
79
|
+
assert(driver.aborted(name))
|
80
|
+
|
81
|
+
FileUtils.cp "tmp-TestAWS/.save/test-AWS.yaml", "tmp-TestAWS/.save/copy-AWS.yaml"
|
82
|
+
assert(driver.aborted("copy-AWS"))
|
83
|
+
|
84
|
+
|
79
85
|
end
|
80
86
|
|
81
87
|
|
data/test/test_simplews.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
2
|
|
3
|
+
|
3
4
|
class TestSimpleWS < Test::Unit::TestCase
|
4
5
|
|
5
6
|
class TestWS < SimpleWS
|
@@ -14,6 +15,7 @@ class TestSimpleWS < Test::Unit::TestCase
|
|
14
15
|
serve :bye, %w(name), :name => :string, :return => :string do |name|
|
15
16
|
"Bye bye #{name}. See you soon."
|
16
17
|
end
|
18
|
+
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simplews
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-11-
|
12
|
+
date: 2008-11-24 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -40,10 +40,8 @@ files:
|
|
40
40
|
- PostInstall.txt
|
41
41
|
- README.rdoc
|
42
42
|
- Rakefile
|
43
|
-
- TestWS.wsdl
|
44
43
|
- config/hoe.rb
|
45
44
|
- config/requirements.rb
|
46
|
-
- lib/helper.rb
|
47
45
|
- lib/simplews.rb
|
48
46
|
- lib/simplews/asynchronous.rb
|
49
47
|
- lib/simplews/version.rb
|
data/TestWS.wsdl
DELETED
@@ -1,112 +0,0 @@
|
|
1
|
-
<?xml version="1.0"?>
|
2
|
-
<definitions xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
|
3
|
-
xmlns:tns="TestWS-NS"
|
4
|
-
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
5
|
-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
6
|
-
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
|
7
|
-
xmlns:si="http://soapinterop.org/xsd"
|
8
|
-
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
|
9
|
-
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
|
10
|
-
xmlns="http://schemas.xmlsoap.org/wsdl/"
|
11
|
-
targetNamespace="TestWS-NS">
|
12
|
-
|
13
|
-
|
14
|
-
<types>
|
15
|
-
<schema xmlns="http://www.w3.org/2001/XMLSchema"
|
16
|
-
targetNamespace="TestWS-NS"
|
17
|
-
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
|
18
|
-
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
|
19
|
-
<complexType name="ArrayOfString">
|
20
|
-
<complexContent>
|
21
|
-
<restriction base="soapenc:Array">
|
22
|
-
<attribute ref="soapenc:arrayType"
|
23
|
-
wsdl:arrayType="string[]"/>
|
24
|
-
</restriction>
|
25
|
-
</complexContent>
|
26
|
-
</complexType>
|
27
|
-
</schema>
|
28
|
-
</types>
|
29
|
-
|
30
|
-
<message name="wsdlRequest">
|
31
|
-
</message>
|
32
|
-
|
33
|
-
<message name="wsdlResponse">
|
34
|
-
<part type="xsd:string" name="return"/>
|
35
|
-
</message>
|
36
|
-
|
37
|
-
<message name="hiRequest">
|
38
|
-
<part type="xsd:string" name="name"/>
|
39
|
-
</message>
|
40
|
-
|
41
|
-
<message name="hiResponse">
|
42
|
-
<part type="xsd:string" name="return"/>
|
43
|
-
</message>
|
44
|
-
|
45
|
-
<message name="byeRequest">
|
46
|
-
<part type="xsd:string" name="name"/>
|
47
|
-
</message>
|
48
|
-
|
49
|
-
<message name="byeResponse">
|
50
|
-
<part type="xsd:string" name="return"/>
|
51
|
-
</message>
|
52
|
-
|
53
|
-
<portType name="TestWS">
|
54
|
-
<operation name="wsdl">
|
55
|
-
<input message="wsdlRequest"/>
|
56
|
-
<output message="wsdlResponse"/>
|
57
|
-
</operation>
|
58
|
-
|
59
|
-
<operation name="hi">
|
60
|
-
<input message="hiRequest"/>
|
61
|
-
<output message="hiResponse"/>
|
62
|
-
</operation>
|
63
|
-
|
64
|
-
<operation name="bye">
|
65
|
-
<input message="byeRequest"/>
|
66
|
-
<output message="byeResponse"/>
|
67
|
-
</operation>
|
68
|
-
|
69
|
-
</portType>
|
70
|
-
|
71
|
-
<binding name="TestWSBinding" type="tns:TestWS">
|
72
|
-
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
|
73
|
-
<operation name="wsdl">
|
74
|
-
<soap:operation soapAction="urn:TestWS#wsdl" style="rpc"/>
|
75
|
-
<input>
|
76
|
-
<soap:body namespace="urn:TestWS" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
|
77
|
-
</input>
|
78
|
-
<output>
|
79
|
-
<soap:body namespace="urn:TestWS" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
|
80
|
-
</output>
|
81
|
-
</operation>
|
82
|
-
|
83
|
-
<operation name="hi">
|
84
|
-
<soap:operation soapAction="urn:TestWS#hi" style="rpc"/>
|
85
|
-
<input>
|
86
|
-
<soap:body namespace="urn:TestWS" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
|
87
|
-
</input>
|
88
|
-
<output>
|
89
|
-
<soap:body namespace="urn:TestWS" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
|
90
|
-
</output>
|
91
|
-
</operation>
|
92
|
-
|
93
|
-
<operation name="bye">
|
94
|
-
<soap:operation soapAction="urn:TestWS#bye" style="rpc"/>
|
95
|
-
<input>
|
96
|
-
<soap:body namespace="urn:TestWS" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
|
97
|
-
</input>
|
98
|
-
<output>
|
99
|
-
<soap:body namespace="urn:TestWS" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded"/>
|
100
|
-
</output>
|
101
|
-
</operation>
|
102
|
-
|
103
|
-
</binding>
|
104
|
-
<service name="TestWS">
|
105
|
-
<documentation>Greeting Services</documentation>
|
106
|
-
|
107
|
-
<port name="TestWS" binding="tns:TestWSBinding">
|
108
|
-
<soap:address location="http://localhost:1984"/>
|
109
|
-
</port>
|
110
|
-
</service>
|
111
|
-
|
112
|
-
</definitions>
|
data/lib/helper.rb
DELETED
File without changes
|