simplews 1.7.3 → 1.8.1
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/README.rdoc +2 -0
- data/bin/start_jobs_ws +53 -0
- data/lib/simplews/jobs.rb +5 -2
- data/lib/simplews/rake.rb +0 -2
- data/lib/simplews.rb +41 -22
- metadata +4 -3
data/README.rdoc
CHANGED
@@ -4,6 +4,8 @@ This library simplifies the creation of SOAP web services. It is based on
|
|
4
4
|
soap4r, and adds a DSL for serving methods that create automatically the WSDL.
|
5
5
|
Additionally, it offers support for asynchronous jobs.
|
6
6
|
|
7
|
+
Documentation and detailed examples available at http://bioinfovm05.dacya.ucm.es/simplews/index.html
|
8
|
+
|
7
9
|
== Note on Patches/Pull Requests
|
8
10
|
|
9
11
|
* Fork the project.
|
data/bin/start_jobs_ws
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
require 'rubygems'
|
3
|
+
require 'simplews'
|
4
|
+
require "optparse"
|
5
|
+
require 'simplews/rake'
|
6
|
+
|
7
|
+
options = {}
|
8
|
+
OptionParser.new do |opts|
|
9
|
+
opts.banner = "Usage: #{ $_ } [options] <config_file>"
|
10
|
+
|
11
|
+
opts.on("-h", "--host HOST", String, "Select host interface, localhost by default") do |host|
|
12
|
+
options[:host] = host
|
13
|
+
end
|
14
|
+
|
15
|
+
opts.on("-p", "--port PORT", Integer, "Select interface port, 1984 by default") do |port|
|
16
|
+
options[:port] = port
|
17
|
+
end
|
18
|
+
|
19
|
+
opts.on("-n", "--name NAME", String, "Select the name of the web server interface, SimpleWS by default") do |name|
|
20
|
+
options[:name] = name
|
21
|
+
end
|
22
|
+
|
23
|
+
opts.on("-d", "--description DESCRIPTION", String, "Description of the service") do |description|
|
24
|
+
options[:description] = description
|
25
|
+
end
|
26
|
+
|
27
|
+
opts.on("-w", "--wsdl FILENAME", String, "Save the WSDL file") do |filename|
|
28
|
+
options[:wsdl] = filename
|
29
|
+
end
|
30
|
+
|
31
|
+
opts.on("-d", "--directory PATH", String, "Work directory for the WS") do |filename|
|
32
|
+
options[:wsdl] = filename
|
33
|
+
end
|
34
|
+
|
35
|
+
end.parse!
|
36
|
+
|
37
|
+
filename = ARGV[0]
|
38
|
+
|
39
|
+
server = SimpleWS::Jobs.new(options[:name], options[:description], options[:host], options[:port], options[:directory]) do
|
40
|
+
actions = File.open(filename)do |f| f.read end
|
41
|
+
eval actions
|
42
|
+
end
|
43
|
+
|
44
|
+
server.wsdl(options[:wsdl]) if options[:wsdl]
|
45
|
+
|
46
|
+
trap('INT'){
|
47
|
+
puts "Stopping server"
|
48
|
+
server.shutdown
|
49
|
+
}
|
50
|
+
|
51
|
+
server.start
|
52
|
+
|
53
|
+
|
data/lib/simplews/jobs.rb
CHANGED
@@ -124,7 +124,7 @@ class SimpleWS::Jobs < SimpleWS
|
|
124
124
|
name = @@pids.select{|name, p| p == pid}.first
|
125
125
|
return if name.nil?
|
126
126
|
name = name.first
|
127
|
-
puts "
|
127
|
+
puts "Job #{ name } with pid #{ pid } finished with exitstatus #{$?.exitstatus}"
|
128
128
|
state = Job.job_info(name)
|
129
129
|
if ![:error, :done, :aborted].include?(state[:status])
|
130
130
|
state[:status] = :error
|
@@ -268,6 +268,8 @@ class SimpleWS::Jobs < SimpleWS
|
|
268
268
|
|
269
269
|
def write(file, contents)
|
270
270
|
path = Job.path(file, @name)
|
271
|
+
directory = File.dirname(File.expand_path(path))
|
272
|
+
FileUtils.mkdir_p directory unless File.exists? directory
|
271
273
|
File.open(path,'w') do |fout|
|
272
274
|
fout.write contents
|
273
275
|
end
|
@@ -369,6 +371,7 @@ class SimpleWS::Jobs < SimpleWS
|
|
369
371
|
|
370
372
|
def task(name, params=[], types={}, results = [], &block)
|
371
373
|
@@last_param_description['return'] ||= 'Job identifier' if @@last_param_description
|
374
|
+
@@last_param_description['suggested_name'] ||= 'Suggested job id' if @@last_param_description
|
372
375
|
|
373
376
|
Scheduler.task name, results, block
|
374
377
|
serve name.to_s, params + ['suggested_name'], types.merge(:suggested_name => 'string', :return => :string) do |*args|
|
@@ -464,7 +467,7 @@ class SimpleWS::Jobs < SimpleWS
|
|
464
467
|
results.collect{|p| p[0]}
|
465
468
|
end
|
466
469
|
|
467
|
-
desc "Job management: Return the content of the result specified by the result identifier. These identifiers are retrieve using the 'results' operation"
|
470
|
+
desc "Job management: Return the content of the result specified by the result identifier. These identifiers are retrieve using the 'results' operation. Results are Base64 encoded to allow binary data"
|
468
471
|
param_desc :result => "Result identifier", :return => "Content of the result file, in Base64 encoding for compatibility"
|
469
472
|
serve :result, %w(result), :return => :binary do |result|
|
470
473
|
path = @results[result]
|
data/lib/simplews/rake.rb
CHANGED
data/lib/simplews.rb
CHANGED
@@ -46,10 +46,8 @@ require 'builder'
|
|
46
46
|
|
47
47
|
|
48
48
|
class SimpleWS < SOAP::RPC::StandaloneServer
|
49
|
-
VERSION = "1.3.6"
|
50
|
-
|
51
49
|
# Saves method defined in the class to be served by the instances
|
52
|
-
INHERITED_METHODS = {}
|
50
|
+
INHERITED_METHODS = {} unless defined? INHERITED_METHODS
|
53
51
|
|
54
52
|
# This is a helper function for clients. Given the +url+ where the
|
55
53
|
# server is listening, as well as the name of the server, it can
|
@@ -216,10 +214,9 @@ class SimpleWS < SOAP::RPC::StandaloneServer
|
|
216
214
|
wsdl.gsub!(/\$\{NAME\}/,@name)
|
217
215
|
wsdl.gsub!(/\$\{DESCRIPTION\}/,@description)
|
218
216
|
wsdl.gsub!(/\$\{LOCATION\}/,"http://#{ @host }:#{ @port }")
|
217
|
+
|
219
218
|
if filename
|
220
|
-
|
221
|
-
fwsdl.write(wsdl)
|
222
|
-
fwsdl.close
|
219
|
+
File.open(filename,'w') {|f| f.write wsdl }
|
223
220
|
nil
|
224
221
|
else
|
225
222
|
wsdl
|
@@ -237,17 +234,33 @@ class SimpleWS < SOAP::RPC::StandaloneServer
|
|
237
234
|
end
|
238
235
|
xml.tbody do
|
239
236
|
@method_order.each do |method|
|
240
|
-
|
237
|
+
desc = @method_descriptions[method][:description] || ""
|
238
|
+
case
|
239
|
+
when method.to_s == 'wsdl' || method.to_s == 'documentation'
|
240
|
+
type = 'WS_documentation'
|
241
|
+
when desc =~ /^Job management:/
|
242
|
+
type = 'WS_job_management'
|
243
|
+
when @method_descriptions[method][:args].include?( :sugested_name )
|
244
|
+
type = 'WS_task'
|
245
|
+
else
|
246
|
+
type = 'WS_normal'
|
247
|
+
end
|
248
|
+
xml.tr :class => type, :id => "WS_method_#{method}" do
|
241
249
|
xml.td method.to_s, :class => "WS_operation"
|
242
250
|
|
243
251
|
xml.td :class => "WS_parameters" do
|
244
252
|
description = @method_descriptions[method]
|
245
253
|
method_parameters = description[:args]
|
246
|
-
method_parameters
|
254
|
+
method_parameters += ['return'] unless description[:types][:return] == false || description[:types]['return'] == false
|
247
255
|
if method_parameters.any?
|
248
256
|
xml.dl :class => "WS_parameter_documentation" do
|
249
257
|
method_parameters.each do |param|
|
250
|
-
|
258
|
+
if param.to_s == 'return'
|
259
|
+
xml.dt param, :class => 'WS_return'
|
260
|
+
else
|
261
|
+
xml.dt param
|
262
|
+
end
|
263
|
+
|
251
264
|
if description[:param_descriptions]
|
252
265
|
xml.dd description[:param_descriptions][param.to_s] || ""
|
253
266
|
else
|
@@ -257,14 +270,18 @@ class SimpleWS < SOAP::RPC::StandaloneServer
|
|
257
270
|
end
|
258
271
|
end
|
259
272
|
end
|
260
|
-
|
261
|
-
xml.td description[:description] || "", :class => "WS_documentation"
|
273
|
+
xml.td desc, :class => "WS_documentation"
|
262
274
|
end
|
263
275
|
end
|
264
276
|
end
|
265
277
|
end
|
266
278
|
|
267
|
-
|
279
|
+
if filename
|
280
|
+
File.open(filename,'w') {|f| f.write html_table }
|
281
|
+
nil
|
282
|
+
else
|
283
|
+
html_table
|
284
|
+
end
|
268
285
|
end
|
269
286
|
|
270
287
|
private
|
@@ -298,7 +315,6 @@ class SimpleWS < SOAP::RPC::StandaloneServer
|
|
298
315
|
type = :string if type.nil?
|
299
316
|
if type
|
300
317
|
type = type.to_sym
|
301
|
-
|
302
318
|
xml.part :name => 'return', :type => TYPES2WSDL[type] do
|
303
319
|
param_descriptions = description[:param_descriptions]
|
304
320
|
|
@@ -306,7 +322,6 @@ class SimpleWS < SOAP::RPC::StandaloneServer
|
|
306
322
|
xml.documentation param_descriptions['return']
|
307
323
|
end
|
308
324
|
end
|
309
|
-
|
310
325
|
end
|
311
326
|
end
|
312
327
|
@messages << message
|
@@ -333,6 +348,7 @@ class SimpleWS < SOAP::RPC::StandaloneServer
|
|
333
348
|
end
|
334
349
|
|
335
350
|
|
351
|
+
if ! defined? WSDL_STUB
|
336
352
|
WSDL_STUB =<<EOT
|
337
353
|
<?xml version="1.0"?>
|
338
354
|
<definitions xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
|
@@ -382,15 +398,18 @@ ${BINDINGS}
|
|
382
398
|
|
383
399
|
</definitions>
|
384
400
|
EOT
|
401
|
+
end
|
385
402
|
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
403
|
+
if ! defined? TYPES2WSDL
|
404
|
+
TYPES2WSDL = {
|
405
|
+
:boolean => 'xsd:boolean',
|
406
|
+
:string => 'xsd:string',
|
407
|
+
:integer => 'xsd:integer',
|
408
|
+
:float => 'xsd:float',
|
409
|
+
:array => 'tns:ArrayOfString',
|
410
|
+
:binary => 'xsd:base64Binary',
|
411
|
+
}
|
412
|
+
end
|
394
413
|
|
395
414
|
|
396
415
|
end
|
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.
|
4
|
+
version: 1.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
@@ -9,8 +9,8 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
13
|
-
default_executable:
|
12
|
+
date: 2010-01-02 00:00:00 +01:00
|
13
|
+
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: soap4r
|
@@ -45,6 +45,7 @@ dependencies:
|
|
45
45
|
description: Generates WSDL automatically. It manages jobs as asynchronous processes
|
46
46
|
email: miguel.vazquez@fdi.ucm.es
|
47
47
|
executables:
|
48
|
+
- start_jobs_ws
|
48
49
|
- start_ws
|
49
50
|
extensions: []
|
50
51
|
|