riddl 0.99.105 → 0.99.106
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.
- checksums.yaml +7 -0
- data/lib/riddl/client.rb +48 -34
- data/lib/riddl/error.rb +1 -0
- data/lib/riddl/server.rb +41 -31
- data/riddl.gemspec +1 -1
- metadata +24 -44
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
|
-
|
50
|
-
|
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
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
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
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
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
data/lib/riddl/server.rb
CHANGED
@@ -160,32 +160,41 @@ module Riddl
|
|
160
160
|
v.delete [Rack::Lint]
|
161
161
|
end
|
162
162
|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
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.
|
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
|
-
|
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
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.
|
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-
|
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:
|
259
|
+
rubygems_version: 2.0.2
|
280
260
|
signing_key:
|
281
|
-
specification_version:
|
282
|
-
summary:
|
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
|