simplews 1.7.2 → 1.7.3

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.
@@ -36,9 +36,7 @@ server = SimpleWS.new(options[:name], options[:description], options[:host], opt
36
36
  eval actions
37
37
  end
38
38
 
39
- if options[:wsdl]
40
- File.open(options[:wsdl], 'w') do |f| f.write server.wsdl end
41
- end
39
+ server.wsdl(options[:wsdl]) if options[:wsdl]
42
40
 
43
41
  trap('INT'){
44
42
  puts "Stopping server"
@@ -49,7 +49,7 @@ class SimpleWS < SOAP::RPC::StandaloneServer
49
49
  VERSION = "1.3.6"
50
50
 
51
51
  # Saves method defined in the class to be served by the instances
52
- METHODS = {}
52
+ INHERITED_METHODS = {}
53
53
 
54
54
  # This is a helper function for clients. Given the +url+ where the
55
55
  # server is listening, as well as the name of the server, it can
@@ -102,17 +102,27 @@ class SimpleWS < SOAP::RPC::StandaloneServer
102
102
  @messages = []
103
103
  @operations = []
104
104
  @bindings = []
105
+ @method_descriptions = {}
106
+ @method_order = []
105
107
 
106
108
  if block_given?
107
109
  instance_eval &block
108
110
  end
109
111
 
110
112
  puts "Server #{ name } at #{ host }:#{ port }"
111
-
113
+
114
+
112
115
  desc "Return the WSDL describing the web server"
113
116
  param_desc :return => "WSDL description"
114
117
  serve :wsdl, %w(), :return => :string
115
- METHODS.each{|name, info|
118
+
119
+ desc "Return HMLT table with documentation for the web service"
120
+ param_desc :return => "HTML table with documentation"
121
+ serve :documentation, %w(), :return => :string
122
+
123
+ INHERITED_METHODS.each{|name, info|
124
+ @@last_description = info[:description]
125
+ @@last_param_description = info[:param_descriptions]
116
126
  serve name, info[:args], info[:types], &info[:block]
117
127
  }
118
128
  end
@@ -126,8 +136,6 @@ class SimpleWS < SOAP::RPC::StandaloneServer
126
136
  # Add a description for the next method served.
127
137
  @@last_description = nil
128
138
  @@last_param_description = nil
129
- STEP_DESCRIPTIONS = {}
130
- PARAMETER_DESCRIPTIONS = {}
131
139
  def desc(text = "")
132
140
  @@last_description = text
133
141
  end
@@ -164,10 +172,14 @@ class SimpleWS < SOAP::RPC::StandaloneServer
164
172
  # method is taken to return no value. Other than that, if a parameter
165
173
  # type is omitted it is taken to be :string.
166
174
  def serve(name, args=[], types={}, &block)
167
- STEP_DESCRIPTIONS[name] ||= @@last_description
168
- PARAMETER_DESCRIPTIONS[name] ||= @@last_param_description
175
+
176
+ @method_descriptions[name] = {:args => args, :types => types, :block => block,
177
+ :description => @@last_description, :param_descriptions => @@last_param_description}
178
+
169
179
  @@last_description = nil
170
180
  @@last_param_description = nil
181
+
182
+ @method_order << name
171
183
  if block
172
184
  inline_name = "_inline_" + name.to_s
173
185
  add_to_ruby(inline_name, &block)
@@ -185,11 +197,10 @@ class SimpleWS < SOAP::RPC::StandaloneServer
185
197
  # instance check if there where any methods declared to be served in the class
186
198
  # and add them.
187
199
  def self.serve(name, args=[], types={}, &block)
188
- STEP_DESCRIPTIONS[name] ||= @@last_description
189
- PARAMETER_DESCRIPTIONS[name] ||= @@last_param_description
200
+ INHERITED_METHODS[name] = {:args => args, :types => types, :block => block,
201
+ :description => @@last_description, :param_descriptions => @@last_param_description}
190
202
  @@last_description = nil
191
203
  @@last_param_description = nil
192
- METHODS[name] = {:args => args, :types => types, :block => block}
193
204
  end
194
205
 
195
206
  # If +filename+ is specified it saves the +WSDL+ file in that file. If
@@ -215,6 +226,47 @@ class SimpleWS < SOAP::RPC::StandaloneServer
215
226
  end
216
227
  end
217
228
 
229
+ def documentation(filename = nil)
230
+ html_table = Builder::XmlMarkup.new(:indent => 2).table :class => "WS_documentation" do |xml|
231
+ xml.thead do
232
+ xml.tr do
233
+ xml.th "Operation", :class => "WS_operation"
234
+ xml.th "Parameters", :class => "WS_parameters"
235
+ xml.th "Documentation", :class => "WS_documentation"
236
+ end
237
+ end
238
+ xml.tbody do
239
+ @method_order.each do |method|
240
+ xml.tr do
241
+ xml.td method.to_s, :class => "WS_operation"
242
+
243
+ xml.td :class => "WS_parameters" do
244
+ description = @method_descriptions[method]
245
+ method_parameters = description[:args]
246
+ method_parameters.push 'return' unless description[:types][:return] == false || description[:types]['return'] == false
247
+ if method_parameters.any?
248
+ xml.dl :class => "WS_parameter_documentation" do
249
+ method_parameters.each do |param|
250
+ xml.dt param
251
+ if description[:param_descriptions]
252
+ xml.dd description[:param_descriptions][param.to_s] || ""
253
+ else
254
+ xml.dd
255
+ end
256
+ end
257
+ end
258
+ end
259
+ end
260
+
261
+ xml.td description[:description] || "", :class => "WS_documentation"
262
+ end
263
+ end
264
+ end
265
+ end
266
+
267
+ html_table
268
+ end
269
+
218
270
  private
219
271
 
220
272
  def add_to_ruby(name, &block)
@@ -222,16 +274,22 @@ class SimpleWS < SOAP::RPC::StandaloneServer
222
274
  end
223
275
 
224
276
  def add_to_wsdl(name, args, types)
277
+ description = @method_descriptions[name]
225
278
  message = Builder::XmlMarkup.new(:indent => 2).message :name => "#{ name }Request" do |xml|
226
- args.each{|param|
279
+
280
+ args.each do |param|
227
281
  type = types[param.to_s] || types[param.to_sym] || :string
228
282
  type = type.to_sym
283
+
229
284
  xml.part :name => param, :type => TYPES2WSDL[type] do
230
- if PARAMETER_DESCRIPTIONS[name] && PARAMETER_DESCRIPTIONS[name][param.to_s]
231
- xml.documentation PARAMETER_DESCRIPTIONS[name][param.to_s]
285
+ param_descriptions = description[:param_descriptions]
286
+
287
+ if param_descriptions && param_descriptions[param.to_s]
288
+ xml.documentation param_descriptions[param.to_s]
232
289
  end
233
290
  end
234
- }
291
+
292
+ end
235
293
  end
236
294
  @messages << message
237
295
 
@@ -240,17 +298,21 @@ class SimpleWS < SOAP::RPC::StandaloneServer
240
298
  type = :string if type.nil?
241
299
  if type
242
300
  type = type.to_sym
301
+
243
302
  xml.part :name => 'return', :type => TYPES2WSDL[type] do
244
- if PARAMETER_DESCRIPTIONS[name] && PARAMETER_DESCRIPTIONS[name]['return']
245
- xml.documentation PARAMETER_DESCRIPTIONS[name]['return']
303
+ param_descriptions = description[:param_descriptions]
304
+
305
+ if param_descriptions && param_descriptions['return']
306
+ xml.documentation param_descriptions['return']
246
307
  end
247
308
  end
309
+
248
310
  end
249
311
  end
250
312
  @messages << message
251
313
 
252
314
  operation = Builder::XmlMarkup.new(:indent => 2).operation :name => "#{ name }" do |xml|
253
- xml.documentation STEP_DESCRIPTIONS[name] if STEP_DESCRIPTIONS[name]
315
+ xml.documentation description[:description] if description[:description]
254
316
  xml.input :message => "tns:#{ name }Request"
255
317
  xml.output :message => "tns:#{ name }Response"
256
318
  end
@@ -268,9 +330,8 @@ class SimpleWS < SOAP::RPC::StandaloneServer
268
330
  end
269
331
 
270
332
  @bindings << binding
271
-
272
333
  end
273
-
334
+
274
335
 
275
336
  WSDL_STUB =<<EOT
276
337
  <?xml version="1.0"?>
@@ -18,6 +18,8 @@ class SimpleWS::Jobs < SimpleWS
18
18
  :job_info => 1,
19
19
  :monitor => 2,
20
20
  }
21
+
22
+ INHERITED_TASKS = {}
21
23
 
22
24
 
23
25
  #{{{ Scheduler
@@ -366,12 +368,8 @@ class SimpleWS::Jobs < SimpleWS
366
368
  end
367
369
 
368
370
  def task(name, params=[], types={}, results = [], &block)
369
- STEP_DESCRIPTIONS[name.to_s] ||= @@last_description
370
- PARAMETER_DESCRIPTIONS[name.to_s] ||= @@last_param_description
371
- @@last_description = nil
372
- @@last_param_description = nil
373
- PARAMETER_DESCRIPTIONS[name.to_s]['return'] ||= 'Job identifier' if PARAMETER_DESCRIPTIONS[name.to_s]
374
-
371
+ @@last_param_description['return'] ||= 'Job identifier' if @@last_param_description
372
+
375
373
  Scheduler.task name, results, block
376
374
  serve name.to_s, params + ['suggested_name'], types.merge(:suggested_name => 'string', :return => :string) do |*args|
377
375
  Scheduler.run name, *args
@@ -380,17 +378,11 @@ class SimpleWS::Jobs < SimpleWS
380
378
 
381
379
  @@tasks = {}
382
380
  def self.task(name, params=[], types={}, results =[], &block)
383
- STEP_DESCRIPTIONS[name.to_s] ||= @@last_description
384
- PARAMETER_DESCRIPTIONS[name.to_s] ||= @@last_param_description
381
+ INHERITED_TASKS[name] = {:params => params, :types => types, :results => results, :block => block,
382
+ :description => @@last_description, :param_description => @@last_param_description};
383
+
385
384
  @@last_description = nil
386
385
  @@last_param_description = nil
387
- if PARAMETER_DESCRIPTIONS[name.to_s]
388
- PARAMETER_DESCRIPTIONS[name.to_s]['return'] ||= 'Job identifier'
389
- PARAMETER_DESCRIPTIONS[name.to_s]['suggested_name'] ||= 'Suggested name for the job'
390
- end
391
-
392
- Scheduler.task name, results, block
393
- @@tasks[name] = {:params => params, :types => types};
394
386
  end
395
387
 
396
388
  def abort_jobs
@@ -408,10 +400,10 @@ class SimpleWS::Jobs < SimpleWS
408
400
  @workdir = workdir || "/tmp/#{ name }"
409
401
  Scheduler.workdir = @workdir
410
402
  @results = {}
411
- @@tasks.each{|task, values|
412
- serve task.to_s, values[:params] + ['suggested_name'], values[:types].merge(:suggested_name => 'string', :return => :string) do |*args|
413
- Scheduler.run task, *args
414
- end
403
+ INHERITED_TASKS.each{|task,info|
404
+ @@last_description = info[:description]
405
+ @@last_param_description = info[:param_description]
406
+ task(task, info[:params], info[:types], info[:results], &info[:block])
415
407
  }
416
408
 
417
409
 
@@ -46,6 +46,8 @@ class SimpleWS::Jobs::Scheduler::Job
46
46
  EOC
47
47
 
48
48
  load rakefile
49
+ p workdir
50
+ p @@steps
49
51
  @@steps.each{|step|
50
52
  step_dirname = File.join(workdir, step.to_s)
51
53
  FileUtils.mkdir_p step_dirname unless File.exists? step_dirname
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.7.2
4
+ version: 1.7.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez