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 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