riddl 0.99.105 → 0.99.106

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 12c031be92256e0af144457f4fcfcb02c4e0c7eb
4
+ data.tar.gz: d48a272fdef110c5d5ee3504da07869ad0a633fa
5
+ SHA512:
6
+ metadata.gz: 4968eab363c56e10bf3be952018c6e9c4752126d316da12cf74ac631a56fdbf33b9592d09bc109da55be01c0281f42efd3bc6339dccbdd6d44523413ffcbbd54
7
+ data.tar.gz: f3d6fed2f30fda387954503ef037d9e36acb87dda23db77f735bf07869f2cdf8e1e653ef7487b1f41c79e1ed0b471a3edfa025a1ec17a857b9955710b3d8c47e
data/lib/riddl/client.rb CHANGED
@@ -25,8 +25,8 @@ class SignalWait #{{{
25
25
  @q = Queue.new
26
26
  end
27
27
 
28
- def wait
29
- @q.deq
28
+ def wait(num=1)
29
+ num.times{ @q.deq }
30
30
  end
31
31
 
32
32
  def continue
@@ -46,19 +46,26 @@ unless Module.constants.include?('CLIENT_INCLUDED')
46
46
  @options = options
47
47
  @wrapper = nil
48
48
  @thread = nil
49
- sig = SignalWait.new
50
- if URI.parse(@base).scheme == 'xmpp' && @options[:jid] && @options[:pass]
49
+ if URI.parse(@base).scheme == 'xmpp' && !((@options[:jid] && @options[:pass]) || @options[:xmpp].is_a?(Blather::Client))
50
+ raise ConnectionError, 'XMPP connections need jid/pass or Blather::client object passed as options to be successful.'
51
+ end
52
+ if URI.parse(@base).scheme == 'xmpp' && @options[:jid] && @options[:pass]
53
+ sig = SignalWait.new
54
+ Thread::abort_on_exception = true
51
55
  @thread = Thread.new do
52
- EM.run do
53
- client = Blather::Client.setup @options[:jid], @options[:pass]
54
- client.register_handler(:ready) { sig.continue; }
55
- client.connect
56
- @options[:xmpp] = client
57
- sig.continue
56
+ begin
57
+ EM.run do
58
+ client = Blather::Client.setup @options[:jid], @options[:pass]
59
+ client.register_handler(:ready) { sig.continue; }
60
+ client.connect
61
+ @options[:xmpp] = client
62
+ sig.continue
63
+ end
64
+ rescue
65
+ raise ConnectionError, 'XMPP connection not successful.'
58
66
  end
59
67
  end
60
- sig.wait
61
- sig.wait
68
+ sig.wait 2
62
69
  end
63
70
  unless riddl.nil?
64
71
  @wrapper = (riddl.class == Riddl::Wrapper ? riddl : Riddl::Wrapper::new(riddl))
@@ -245,7 +252,7 @@ unless Module.constants.include?('CLIENT_INCLUDED')
245
252
 
246
253
  res = response = nil
247
254
  if @wrapper.nil? || @wrapper.description? || (@wrapper.declaration? && !@base.nil?)
248
- status, response, response_headers = make_request(@base + @rpath,riddl_method,parameters,headers,qparams,simulate)
255
+ status, response, response_headers = make_request(@base + @rpath,riddl_method,parameters,headers,qparams,simulate,!riddl_message.out.nil?)
249
256
  return response if simulate
250
257
  if !@wrapper.nil? && status == 200
251
258
  unless @wrapper.check_message(response,response_headers,riddl_message.out)
@@ -255,7 +262,7 @@ unless Module.constants.include?('CLIENT_INCLUDED')
255
262
  elsif !@wrapper.nil? && @base.nil? && @wrapper.declaration?
256
263
  headers['RIDDL-DECLARATION-PATH'] = @rpath
257
264
  if !riddl_message.route?
258
- status, response, response_headers = make_request(riddl_message.interface.real_url(@rpath,@base),riddl_method,parameters,headers,qparams,simulate)
265
+ status, response, response_headers = make_request(riddl_message.interface.real_url(@rpath,@base),riddl_method,parameters,headers,qparams,simulate,!riddl_message.out.nil?)
259
266
  return response if simulate
260
267
  if status == 200
261
268
  unless @wrapper.check_message(response,response_headers,riddl_message.out)
@@ -267,7 +274,7 @@ unless Module.constants.include?('CLIENT_INCLUDED')
267
274
  th = headers
268
275
  tq = qparams
269
276
  riddl_message.route.each do |m|
270
- status, response, response_headers = make_request(m.interface.real_url(@rpath,@base),riddl_method,tp,th,tq,simulate)
277
+ status, response, response_headers = make_request(m.interface.real_url(@rpath,@base),riddl_method,tp,th,tq,simulate,!riddl_message.out.nil?)
271
278
  return response if simulate
272
279
  if status != 200 || !@wrapper.check_message(response,response_headers,m.out)
273
280
  raise OutputError, "Not a valid output from service."
@@ -291,7 +298,7 @@ unless Module.constants.include?('CLIENT_INCLUDED')
291
298
  end #}}}
292
299
  private :exec_request
293
300
 
294
- def make_request(url,riddl_method,parameters,headers,qparams,simulate) #{{{
301
+ def make_request(url,riddl_method,parameters,headers,qparams,simulate,out) #{{{
295
302
  url = URI.parse(url)
296
303
  qs = qparams.join('&')
297
304
  if url.class == URI::HTTP || url.class == URI::HTTPS
@@ -338,6 +345,7 @@ unless Module.constants.include?('CLIENT_INCLUDED')
338
345
  return res.code.to_i, response, response_headers
339
346
  #}}}
340
347
  elsif url.class == URI::Generic && url.scheme.downcase == 'xmpp'
348
+ #{{{
341
349
  req = Riddl::Client::XMPPRequest.new(riddl_method,url.user + "@" + url.host,url.path,parameters,headers,qs)
342
350
  return req.simulate if simulate
343
351
 
@@ -349,26 +357,32 @@ unless Module.constants.include?('CLIENT_INCLUDED')
349
357
  status = 404
350
358
  response = []
351
359
  response_headers = {}
352
- @options[:xmpp].write_with_handler(stanza) do |raw|
353
- res = XML::Smart::Dom::Element.new(raw).parent
354
- @options[:debug].puts(res.to_s) if @options[:debug]
355
- res.register_namespace 'xr', Riddl::Protocols::XMPP::XR_NS
356
- if res.find('/message/error').empty?
357
- status = 200
358
- response_headers = {}
359
- res.find('/message/xr:header').each do |e|
360
- response_headers[e.attributes['name']] = e.text
361
- end
362
- response = Protocols::XMPP::Parser.new('', res).params
363
- else
364
- res.register_namespace 'se', Blather::StanzaError::STANZA_ERR_NS
365
- err = res.find('string(/message/error/se:text)')
366
- status = (err.match(/\d+/)[0] || 209).to_i
367
- end
368
- sig.continue
360
+ if out
361
+ @options[:xmpp].write_with_handler(stanza) do |raw|
362
+ res = XML::Smart::Dom::Element.new(raw).parent
363
+ @options[:debug].puts(res.to_s) if @options[:debug]
364
+ res.register_namespace 'xr', Riddl::Protocols::XMPP::XR_NS
365
+ if res.find('/message/error').empty?
366
+ status = 200
367
+ response_headers = {}
368
+ res.find('/message/xr:header').each do |e|
369
+ response_headers[e.attributes['name']] = e.text
370
+ end
371
+ response = Protocols::XMPP::Parser.new('', res).params
372
+ else
373
+ res.register_namespace 'se', Blather::StanzaError::STANZA_ERR_NS
374
+ err = res.find('string(/message/error/se:text)')
375
+ status = (err.match(/\d+/)[0] || 209).to_i
376
+ end
377
+ sig.continue
378
+ end
379
+ sig.wait
380
+ else
381
+ status = 200
382
+ @options[:xmpp].write(stanza)
369
383
  end
370
- sig.wait
371
384
  return status, response, response_headers
385
+ #}}}
372
386
  end
373
387
  raise URIError, "not a valid URI (http, https, xmpp are accepted)"
374
388
  end #}}}
data/lib/riddl/error.rb CHANGED
@@ -5,4 +5,5 @@ module Riddl
5
5
  class PathError < ::RuntimeError; end
6
6
  class BlockError < ::StandardError; end
7
7
  class SpecificationError < ::StandardError; end
8
+ class ConnectionError < ::StandardError; end
8
9
  end
data/lib/riddl/server.rb CHANGED
@@ -160,32 +160,41 @@ module Riddl
160
160
  v.delete [Rack::Lint]
161
161
  end
162
162
 
163
- EM.run do
164
- puts "Server (#{@riddl_opts[:url]}) started as #{Process.pid}"
165
- puts "XMPP support (#{@riddl_xmpp_jid}) active" if @riddl_xmpp_jid && @riddl_xmpp_pass
166
- server.start
167
- if @riddl_xmpp_jid && @riddl_xmpp_pass
168
- xmpp = Blather::Client.setup @riddl_xmpp_jid, @riddl_xmpp_pass
169
- xmpp.register_handler(:message, :type => :normal) do |m|
170
- began_at = Time.now
171
- instance = dup
172
- instance.__xmpp_call(xmpp,m)
173
- now = Time.now
174
- instance.riddl_log.write Rack::CommonLogger::FORMAT % [
175
- @riddl_xmpp_jid || "-",
176
- m.from || "-",
177
- now.strftime("%d/%b/%Y %H:%M:%S"),
178
- instance.riddl_method.upcase,
179
- instance.riddl_pinfo,
180
- '',
181
- 'XMPP',
182
- instance.riddl_status,
183
- '?',
184
- now - began_at ]
185
-
186
- end
187
- xmpp.connect
188
- end
163
+ begin
164
+ EM.run do
165
+ puts "Server (#{@riddl_opts[:url]}) started as PID:#{Process.pid}"
166
+ puts "XMPP support (#{@riddl_xmpp_jid}) active" if @riddl_xmpp_jid && @riddl_xmpp_pass
167
+ server.start
168
+ if @riddl_xmpp_jid && @riddl_xmpp_pass
169
+ xmpp = Blather::Client.setup @riddl_xmpp_jid, @riddl_xmpp_pass
170
+ @riddl_opts[:xmpp] = xmpp
171
+ xmpp.register_handler(:message, :type => :normal) do |m|
172
+ began_at = Time.now
173
+ instance = dup
174
+ instance.__xmpp_call(xmpp,m)
175
+ now = Time.now
176
+ instance.riddl_log.write Rack::CommonLogger::FORMAT % [
177
+ @riddl_xmpp_jid || "-",
178
+ m.from || "-",
179
+ now.strftime("%d/%b/%Y %H:%M:%S"),
180
+ instance.riddl_method.upcase,
181
+ instance.riddl_pinfo,
182
+ '',
183
+ 'XMPP',
184
+ instance.riddl_status,
185
+ '?',
186
+ now - began_at
187
+ ]
188
+ end
189
+ xmpp.connect
190
+ end
191
+ end
192
+ rescue => e
193
+ if e.is_a?(Blather::Stream::ConnectionFailed)
194
+ puts "Server (#{@riddl_xmpp_jid}) stopped due to connection error (PID:#{Process.pid})"
195
+ else
196
+ puts "Server (#{@riddl_opts[:url]}) stopped due to connection error (PID:#{Process.pid})"
197
+ end
189
198
  end
190
199
  end #}}}
191
200
 
@@ -193,9 +202,7 @@ module Riddl
193
202
 
194
203
  def initialize(riddl,opts={},&blk)# {{{
195
204
  @riddl_opts = {}
196
- OPTS.each do |k,v|
197
- @riddl_opts[k] = opts.has_key?(k) ? opts[k] : v
198
- end
205
+ @riddl_opts = OPTS.merge(opts)
199
206
 
200
207
  if File.exists?(@riddl_opts[:basepath] + '/' + @riddl_opts[:conffile])
201
208
  @riddl_opts.merge!(YAML::load_file(@riddl_opts[:basepath] + '/' + @riddl_opts[:conffile]))
@@ -210,7 +217,7 @@ module Riddl
210
217
  @riddl_paths = []
211
218
 
212
219
  @riddl_interfaces = {}
213
- instance_eval(&blk) if block_given?
220
+ instance_exec(@riddl_opts,&blk) if block_given?
214
221
 
215
222
  @riddl = Riddl::Wrapper.new(riddl,@accessible_description)
216
223
  if @riddl.description?
@@ -326,11 +333,14 @@ module Riddl
326
333
  @riddl_log.write "404: this resource for sure does not exist.\n"
327
334
  @riddl_status = 404 # client requests wrong path
328
335
  end
336
+ p @riddl_message.out
337
+
329
338
  stanza = if @riddl_exe && @riddl_status == 200
330
339
  Protocols::XMPP::Generator.new(@riddl_status,@riddl_exe.response,@riddl_exe.headers).generate
331
340
  else
332
341
  Protocols::XMPP::Error.new(@riddl_status).generate
333
- end
342
+ end
343
+
334
344
  stanza.from = raw.to
335
345
  stanza.to = raw.from
336
346
  stanza.id = raw.id
data/riddl.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "riddl"
3
- s.version = "0.99.105"
3
+ s.version = "0.99.106"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.license = "LGPL-3"
6
6
  s.summary = "restful interface description and declaration language: tools and client/server libs"
metadata CHANGED
@@ -1,132 +1,116 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: riddl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.99.105
5
- prerelease:
4
+ version: 0.99.106
6
5
  platform: ruby
7
6
  authors:
8
7
  - Juergen eTM Mangler
9
8
  autorequire:
10
9
  bindir: tools
11
10
  cert_chain: []
12
- date: 2013-06-26 00:00:00.000000000 Z
11
+ date: 2013-06-30 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: xml-smart
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: 0.3.4
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: 0.3.4
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rack
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: thin
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: eventmachine
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: 1.0.0
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: 1.0.0
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: em-websocket
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: 0.4.0
86
76
  type: :runtime
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: 0.4.0
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: em-websocket-client
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - '>='
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :runtime
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - '>='
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: mime-types
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ! '>='
101
+ - - '>='
116
102
  - !ruby/object:Gem::Version
117
103
  version: '0'
118
104
  type: :runtime
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ! '>='
108
+ - - '>='
124
109
  - !ruby/object:Gem::Version
125
110
  version: '0'
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: minitest
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
115
  - - '='
132
116
  - !ruby/object:Gem::Version
@@ -134,7 +118,6 @@ dependencies:
134
118
  type: :runtime
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
122
  - - '='
140
123
  - !ruby/object:Gem::Version
@@ -142,17 +125,15 @@ dependencies:
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: blather
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
- - - ! '>='
129
+ - - '>='
148
130
  - !ruby/object:Gem::Version
149
131
  version: '0'
150
132
  type: :runtime
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
- - - ! '>='
136
+ - - '>='
156
137
  - !ruby/object:Gem::Version
157
138
  version: '0'
158
139
  description: rest service interface definition, mixing, and evolution
@@ -258,28 +239,27 @@ files:
258
239
  homepage: http://www.wst.univie.ac.at/communities/riddl/
259
240
  licenses:
260
241
  - LGPL-3
242
+ metadata: {}
261
243
  post_install_message:
262
244
  rdoc_options: []
263
245
  require_paths:
264
246
  - lib
265
247
  required_ruby_version: !ruby/object:Gem::Requirement
266
- none: false
267
248
  requirements:
268
- - - ! '>='
249
+ - - '>='
269
250
  - !ruby/object:Gem::Version
270
251
  version: 1.9.3
271
252
  required_rubygems_version: !ruby/object:Gem::Requirement
272
- none: false
273
253
  requirements:
274
- - - ! '>='
254
+ - - '>='
275
255
  - !ruby/object:Gem::Version
276
256
  version: '0'
277
257
  requirements: []
278
258
  rubyforge_project:
279
- rubygems_version: 1.8.23
259
+ rubygems_version: 2.0.2
280
260
  signing_key:
281
- specification_version: 3
282
- summary: ! 'restful interface description and declaration language: tools and client/server
261
+ specification_version: 4
262
+ summary: 'restful interface description and declaration language: tools and client/server
283
263
  libs'
284
264
  test_files:
285
265
  - test/tc_declaration-hybrid.rb