simplews 1.1.2 → 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,10 +1,4 @@
1
- == 1.1.2 2008-10-28
2
-
3
- * 2 bug fix:
4
- * Release was missing a file
5
- * Missing require
6
-
7
- == 1.1.0 2008-10-28
1
+ == 1.1.4 2008-10-28
8
2
 
9
3
  * 1 major enhancement:
10
4
  * Web Service with asynchronous jobs
@@ -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.status(name)
45
+ def self.job(name)
46
46
  raise JobNotFound, "Job with name '#{ name }' was not found" if @@jobs[name].nil?
47
- @@jobs[name].status
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.done?(name)
55
- raise JobNotFound, "Job with name '#{ name }' was not found" if @@jobs[name].nil?
56
- @@jobs[name].done?
57
- end
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.aborted?(name)
70
- raise JobNotFound, "Job with name '#{ name }' was not found" if @@jobs[name].nil?
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
- def initialize(name, &block)
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
- @thread = Thread.new{
71
+ super do
88
72
  begin
89
- instance_eval(&block)
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
- @thread.raise(JobAborted.new)
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.status(name)
151
+ Job.job(name).status
134
152
  end
135
153
 
136
154
  def abort(name)
137
- Job.abort(name)
155
+ Job.job(name).abort
138
156
  end
139
157
 
140
-
141
158
  def done(name)
142
- Job.done?(name)
159
+ Job.job(name).done?
143
160
  end
144
161
 
145
162
  def aborted(name)
146
- Job.done?(name)
163
+ Job.job(name).aborted?
147
164
  end
148
165
 
149
166
  def error(name)
150
- Job.error?(name)
167
+ Job.job(name).error?
151
168
  end
152
169
 
153
170
  def messages(name)
154
- Job.messages(name)
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 initialize(*args)
158
- super(*args)
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
- serve :abort, %(name), :name => :string
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
- serve :messages, %(name), :name => :string, :return => :string
200
+ #{{{ Thread helper methods
201
+
202
+ def write(*args)
203
+ Thread.current.write(*args)
204
+ end
163
205
 
164
- serve :status, %(name), :name => :string, :return => :string
165
- serve :done, %(name), :name => :string, :return => :boolean
166
- serve :error, %(name), :name => :string, :return => :boolean
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
@@ -2,7 +2,7 @@ module Simplews
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 1
4
4
  MINOR = 1
5
- TINY = 2
5
+ TINY = 4
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  self
data/lib/simplews.rb CHANGED
@@ -37,6 +37,11 @@ class SimpleWS < SOAP::RPC::StandaloneServer
37
37
  serve :wsdl, %w(), :return => :string
38
38
  end
39
39
 
40
+ def name
41
+ @name
42
+ end
43
+
44
+
40
45
  def serve(name, args=[], types={}, &block)
41
46
 
42
47
  if block
@@ -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 = Job.start(name) do
9
- step(:init)
10
- sleep 2
11
- step(:step1, "Step1")
12
- sleep 2
13
- step(:step2, "Step2")
14
- sleep 2
15
- step(:step2, "Step3")
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
 
@@ -41,7 +41,6 @@ class TestSimpleWS < Test::Unit::TestCase
41
41
  assert(driver.bye('Gladis') == "Bye bye Gladis. See you soon.")
42
42
 
43
43
 
44
-
45
44
  end
46
45
 
47
46
 
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.2
4
+ version: 1.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez