simplews 1.9.1 → 1.10.0

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.
@@ -28,8 +28,8 @@ OptionParser.new do |opts|
28
28
  options[:wsdl] = filename
29
29
  end
30
30
 
31
- opts.on("-d", "--directory PATH", String, "Work directory for the WS") do |filename|
32
- options[:wsdl] = filename
31
+ opts.on("-t", "--path PATH", String, "Work directory for the WS") do |filename|
32
+ options[:directory] = filename
33
33
  end
34
34
 
35
35
  end.parse!
@@ -71,7 +71,7 @@ class SimpleWS < SOAP::RPC::StandaloneServer
71
71
  tmp = File.open("/tmp/simpleWS.wsdl",'w')
72
72
  tmp.write SimpleWS::get_wsdl(url, name)
73
73
  tmp.close
74
- driver = SOAP::WSDLDriverFactory.new( "/tmp/simpleWS.wsdl" ).create_rpc_driver
74
+ driver = SOAP::WSDLDriverFactory.new("/tmp/simpleWS.wsdl").create_rpc_driver
75
75
  FileUtils.rm "/tmp/simpleWS.wsdl"
76
76
 
77
77
  driver
@@ -216,6 +216,8 @@ class SimpleWS < SOAP::RPC::StandaloneServer
216
216
  wsdl.gsub!(/\$\{LOCATION\}/,"http://#{ @host }:#{ @port }")
217
217
 
218
218
  if filename
219
+ directory = File.dirname(File.expand_path(filename))
220
+ FileUtils.mkdir_p directory unless File.exists? directory
219
221
  File.open(filename,'w') {|f| f.write wsdl }
220
222
  nil
221
223
  else
@@ -277,6 +279,8 @@ class SimpleWS < SOAP::RPC::StandaloneServer
277
279
  end
278
280
 
279
281
  if filename
282
+ directory = File.dirname(File.expand_path(filename))
283
+ FileUtils.mkdir_p directory unless File.exists? directory
280
284
  File.open(filename,'w') {|f| f.write html_table }
281
285
  nil
282
286
  else
@@ -0,0 +1,123 @@
1
+ require 'rmail'
2
+ require 'net/smtp'
3
+ require 'soap/wsdlDriver'
4
+ require 'simplews/jobs'
5
+
6
+ class SimpleWS::Jobs::Notifier
7
+
8
+ def driver
9
+ case
10
+ when String === @ws
11
+ if File.exists? @ws
12
+ return SOAP::WSDLDriverFactory.new(@ws).create_rpc_driver
13
+ end
14
+ when Array === @ws
15
+ return SimpleWS.get_driver(@ws[0], @ws[1])
16
+ when SOAP::WSDLDriverFactory === @ws
17
+ return @ws
18
+ end
19
+
20
+ raise "Do not know how to connect to driver"
21
+ end
22
+
23
+ def initialize(name, host, ws, options = {})
24
+ @host = host
25
+ @name = name
26
+ @ws = ws
27
+ @smtp_host = options[:smtp_host] || 'localhost'
28
+ @smtp_port = options[:smtp_port] || 25
29
+ @sleep_time = options[:sleep_time] || 2
30
+ @jobs = {}
31
+ end
32
+
33
+ def add_job(job_id, email)
34
+ @jobs[job_id] = email
35
+ end
36
+
37
+ def process
38
+ @jobs.each do |job_id, email|
39
+ if driver.done job_id
40
+ if driver.error job_id
41
+ error(job_id, email, driver.messages(job_id).last)
42
+ else
43
+ success(job_id, email)
44
+ end
45
+ @jobs.delete(job_id)
46
+ end
47
+ end
48
+ end
49
+
50
+ def send_mail(to, subject, body)
51
+ puts "Sending mail to #{ to }: #{ subject }"
52
+ message = RMail::Message.new
53
+
54
+ from = "noreply@" + @host.sub(/:.*/,'')
55
+
56
+ message.header['To'] = to
57
+ message.header['From'] = from
58
+ message.header['Subject'] = subject
59
+
60
+ main = RMail::Message.new
61
+ main.body = body
62
+
63
+ message.add_part(main)
64
+
65
+ Net::SMTP.start(@smtp_host.chomp, @smtp_port.to_i) do |smtp|
66
+ smtp.send_message message.to_s, from, to
67
+ end
68
+ end
69
+
70
+
71
+ def error(job_id, email, msg)
72
+ body =<<-EOF
73
+ Dear #{ @name } user:
74
+
75
+ You job with id '#{ job_id }' has finished with error message:
76
+
77
+ #{ msg }
78
+
79
+ URL: http://#{@host.chomp}/#{ job_id }
80
+
81
+ Note: Do not reply to this message, it is automatically generated.
82
+ EOF
83
+ send_mail(email, "#{@name} [ERROR]: #{ job_id }", body)
84
+ end
85
+
86
+ def success(job_id, email)
87
+ body =<<-EOF
88
+ Dear #{ @name } user:
89
+
90
+ You job with id '#{ job_id }' has finished successfully:
91
+
92
+ URL: http://#{@host.chomp}/#{ job_id }
93
+
94
+ Note: Do not reply to this message, it is automatically generated.
95
+ EOF
96
+ send_mail(email, "#{@name} [SUCCESS]: #{ job_id }", body)
97
+ end
98
+
99
+ def pending?
100
+ ! @jobs.empty?
101
+ end
102
+
103
+ def start
104
+ puts "Starting Email notifier."
105
+ puts "Name: #{ @name }"
106
+ puts "Host: #{ @host }"
107
+ puts "SMTP: #{ @smtp_host }"
108
+ @thread = Thread.new do
109
+ while true
110
+ begin
111
+ process
112
+ sleep @sleep_time
113
+ rescue
114
+ puts $!.message
115
+ end
116
+ end
117
+ end
118
+ end
119
+
120
+ def stop
121
+ @thread.kill
122
+ end
123
+ end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simplews
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.1
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 10
8
+ - 0
9
+ version: 1.10.0
5
10
  platform: ruby
6
11
  authors:
7
12
  - Miguel Vazquez
@@ -9,39 +14,47 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-02-16 00:00:00 +01:00
17
+ date: 2010-04-12 00:00:00 +02:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: soap4r
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 5
30
+ - 8
23
31
  version: 1.5.8
24
- version:
32
+ type: :runtime
33
+ version_requirements: *id001
25
34
  - !ruby/object:Gem::Dependency
26
35
  name: rand
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
30
38
  requirements:
31
39
  - - ">="
32
40
  - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
33
43
  version: "0"
34
- version:
44
+ type: :runtime
45
+ version_requirements: *id002
35
46
  - !ruby/object:Gem::Dependency
36
47
  name: builder
37
- type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
48
+ prerelease: false
49
+ requirement: &id003 !ruby/object:Gem::Requirement
40
50
  requirements:
41
51
  - - ">="
42
52
  - !ruby/object:Gem::Version
53
+ segments:
54
+ - 0
43
55
  version: "0"
44
- version:
56
+ type: :runtime
57
+ version_requirements: *id003
45
58
  description: Generates WSDL automatically. It manages jobs as asynchronous processes
46
59
  email: miguel.vazquez@fdi.ucm.es
47
60
  executables:
@@ -56,6 +69,7 @@ files:
56
69
  - lib/rake_pipeline.rb
57
70
  - lib/simplews.rb
58
71
  - lib/simplews/jobs.rb
72
+ - lib/simplews/notifier.rb
59
73
  - lib/simplews/rake.rb
60
74
  - LICENSE
61
75
  - README.rdoc
@@ -72,18 +86,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - ">="
74
88
  - !ruby/object:Gem::Version
89
+ segments:
90
+ - 0
75
91
  version: "0"
76
- version:
77
92
  required_rubygems_version: !ruby/object:Gem::Requirement
78
93
  requirements:
79
94
  - - ">="
80
95
  - !ruby/object:Gem::Version
96
+ segments:
97
+ - 0
81
98
  version: "0"
82
- version:
83
99
  requirements: []
84
100
 
85
101
  rubyforge_project:
86
- rubygems_version: 1.3.5
102
+ rubygems_version: 1.3.6
87
103
  signing_key:
88
104
  specification_version: 3
89
105
  summary: Simplifies creating soap4r web services as stand-alone servers