riddl 0.99.105

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.
Files changed (92) hide show
  1. data/AUTHORS +1 -0
  2. data/COPYING +165 -0
  3. data/INSTALL +24 -0
  4. data/README.rdoc +2 -0
  5. data/Rakefile +17 -0
  6. data/TODO +17 -0
  7. data/contrib/riddl.jpg +0 -0
  8. data/contrib/riddl.png +0 -0
  9. data/contrib/riddl.svg +138 -0
  10. data/lib/riddl/client.rb +423 -0
  11. data/lib/riddl/commonlogger.rb +16 -0
  12. data/lib/riddl/constants.rb +5 -0
  13. data/lib/riddl/error.rb +8 -0
  14. data/lib/riddl/handlers.rb +14 -0
  15. data/lib/riddl/handlers/oauth.rb +19 -0
  16. data/lib/riddl/handlers/plain-type.rb +21 -0
  17. data/lib/riddl/handlers/relaxng.rb +16 -0
  18. data/lib/riddl/handlers/xmlschema.rb +16 -0
  19. data/lib/riddl/header.rb +9 -0
  20. data/lib/riddl/implementation.rb +57 -0
  21. data/lib/riddl/ns/common-patterns/addon-security/request.xml +25 -0
  22. data/lib/riddl/ns/common-patterns/addon-security/response.xml +25 -0
  23. data/lib/riddl/ns/common-patterns/downloadify/1.0/downloadify.xml +18 -0
  24. data/lib/riddl/ns/common-patterns/notifications-consumer/1.0/consumer.xml +100 -0
  25. data/lib/riddl/ns/common-patterns/notifications-producer/1.0/producer.xml +204 -0
  26. data/lib/riddl/ns/common-patterns/properties/1.0/properties.schema.schema +140 -0
  27. data/lib/riddl/ns/common-patterns/properties/1.0/properties.schema.xsl +89 -0
  28. data/lib/riddl/ns/common-patterns/properties/1.0/properties.xml +150 -0
  29. data/lib/riddl/ns/common/datatypes-1_0.rng +79 -0
  30. data/lib/riddl/ns/common/relaxng-modular.rng +330 -0
  31. data/lib/riddl/ns/common/relaxng.rng +10 -0
  32. data/lib/riddl/ns/declaration/1.0/declaration.rng +114 -0
  33. data/lib/riddl/ns/description/1.0/description.rng +302 -0
  34. data/lib/riddl/option.rb +9 -0
  35. data/lib/riddl/parameter.rb +54 -0
  36. data/lib/riddl/protocols/http/generator.rb +121 -0
  37. data/lib/riddl/protocols/http/parser.rb +199 -0
  38. data/lib/riddl/protocols/websocket.rb +103 -0
  39. data/lib/riddl/protocols/xmpp/generator.rb +176 -0
  40. data/lib/riddl/protocols/xmpp/parser.rb +118 -0
  41. data/lib/riddl/roles.rb +15 -0
  42. data/lib/riddl/roles/http%3A%2F%2Foauth.net%2F1.0%2Faccess_token.rb +30 -0
  43. data/lib/riddl/roles/http%3A%2F%2Foauth.net%2F1.0%2Fon_behalf.rb +22 -0
  44. data/lib/riddl/roles/http%3A%2F%2Foauth.net%2F1.0%2Frequest_token.rb +30 -0
  45. data/lib/riddl/roles/http%3A%2F%2Foauth.net%2F1.0/base.rb +67 -0
  46. data/lib/riddl/server.rb +519 -0
  47. data/lib/riddl/utils/description.rb +29 -0
  48. data/lib/riddl/utils/downloadify.rb +14 -0
  49. data/lib/riddl/utils/erbserve.rb +23 -0
  50. data/lib/riddl/utils/fileserve.rb +31 -0
  51. data/lib/riddl/utils/notifications_producer.rb +310 -0
  52. data/lib/riddl/utils/properties.rb +474 -0
  53. data/lib/riddl/utils/xsloverlay.rb +21 -0
  54. data/lib/riddl/wrapper.rb +280 -0
  55. data/lib/riddl/wrapper/declaration.rb +103 -0
  56. data/lib/riddl/wrapper/declaration/facade.rb +94 -0
  57. data/lib/riddl/wrapper/declaration/interface.rb +34 -0
  58. data/lib/riddl/wrapper/declaration/tile.rb +107 -0
  59. data/lib/riddl/wrapper/description.rb +69 -0
  60. data/lib/riddl/wrapper/description/access.rb +108 -0
  61. data/lib/riddl/wrapper/description/message_and_transformation.rb +131 -0
  62. data/lib/riddl/wrapper/description/resource.rb +271 -0
  63. data/lib/riddl/wrapper/layerchecker.rb +33 -0
  64. data/lib/riddl/wrapper/messageparser.rb +221 -0
  65. data/lib/riddl/wrapper/resourcechecker.rb +98 -0
  66. data/ns/common-patterns/addon-security/request.xml +25 -0
  67. data/ns/common-patterns/addon-security/response.xml +25 -0
  68. data/ns/common-patterns/downloadify/1.0/downloadify.xml +18 -0
  69. data/ns/common-patterns/notifications-consumer/1.0/consumer.xml +100 -0
  70. data/ns/common-patterns/notifications-producer/1.0/producer.xml +204 -0
  71. data/ns/common-patterns/properties/1.0/properties.schema.schema +140 -0
  72. data/ns/common-patterns/properties/1.0/properties.schema.xsl +89 -0
  73. data/ns/common-patterns/properties/1.0/properties.xml +150 -0
  74. data/ns/common/datatypes-1_0.rng +79 -0
  75. data/ns/common/relaxng-modular.rng +330 -0
  76. data/ns/common/relaxng.rng +10 -0
  77. data/ns/declaration/1.0/declaration.rng +114 -0
  78. data/ns/description/1.0/description.rng +302 -0
  79. data/riddl.gemspec +33 -0
  80. data/test/smartrunner.rb +48 -0
  81. data/test/tc_declaration-distributed.rb +79 -0
  82. data/test/tc_declaration-hybrid.rb +71 -0
  83. data/test/tc_declaration-local.rb +47 -0
  84. data/test/tc_helloworld.rb +17 -0
  85. data/test/tc_producer.rb +54 -0
  86. data/test/tc_properties.rb +72 -0
  87. data/tools/flash-policy-server.rb +12 -0
  88. data/tools/riddlcheck +36 -0
  89. data/tools/riddlcheck-1_0 +36 -0
  90. data/tools/riddlprocess +51 -0
  91. data/tools/riddlprocess-1_0 +51 -0
  92. metadata +291 -0
@@ -0,0 +1,302 @@
1
+ <?xml version="1.0"?>
2
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" ns="http://riddl.org/ns/description/1.0">
3
+ <include href="../../common/relaxng-modular.rng"/>
4
+ <include href="../../common/datatypes-1_0.rng"/>
5
+
6
+ <start>
7
+ <element name="description">
8
+ <ref name="riddl-description"/>
9
+ </element>
10
+ </start>
11
+
12
+ <define name="riddl-description">
13
+ <attribute name="datatypeLibrary">
14
+ <data type="anyURI"/>
15
+ </attribute>
16
+ <ref name="riddl-description-other-atts"/>
17
+ <zeroOrMore>
18
+ <choice>
19
+ <element name="message">
20
+ <ref name="riddl-description-other-atts"/>
21
+ <ref name="riddl-message"/>
22
+ </element>
23
+ <element name="transformation">
24
+ <ref name="riddl-description-other-atts"/>
25
+ <ref name="riddl-transformation"/>
26
+ </element>
27
+ </choice>
28
+ </zeroOrMore>
29
+ <element name="resource">
30
+ <ref name="riddl-resource-dynamic"/>
31
+ </element>
32
+ </define>
33
+
34
+ <define name="riddl-message">
35
+ <ref name="riddl-att-name"/>
36
+ <zeroOrMore>
37
+ <ref name="riddl-header"/>
38
+ </zeroOrMore>
39
+ <zeroOrMore>
40
+ <ref name="riddl-message-other"/>
41
+ </zeroOrMore>
42
+ </define>
43
+
44
+ <define name="riddl-transformation">
45
+ <ref name="riddl-att-name"/>
46
+ <oneOrMore>
47
+ <choice>
48
+ <element name="add_header">
49
+ <oneOrMore>
50
+ <ref name="riddl-header"/>
51
+ </oneOrMore>
52
+ </element>
53
+ <element name="add_as_first">
54
+ <oneOrMore>
55
+ <ref name="riddl-parameter"/>
56
+ </oneOrMore>
57
+ </element>
58
+ <element name="add_as_last">
59
+ <oneOrMore>
60
+ <ref name="riddl-parameter"/>
61
+ </oneOrMore>
62
+ </element>
63
+ <element name="add_before">
64
+ <ref name="riddl-att-name-star"/>
65
+ <oneOrMore>
66
+ <ref name="riddl-parameter"/>
67
+ </oneOrMore>
68
+ </element>
69
+ <element name="add_after">
70
+ <ref name="riddl-att-name-star"/>
71
+ <oneOrMore>
72
+ <ref name="riddl-parameter"/>
73
+ </oneOrMore>
74
+ </element>
75
+ <element name="remove_each">
76
+ <ref name="riddl-att-col-remove"/>
77
+ </element>
78
+ <element name="remove_first">
79
+ <ref name="riddl-att-col-remove"/>
80
+ </element>
81
+ <element name="remove_last">
82
+ <ref name="riddl-att-col-remove"/>
83
+ </element>
84
+ </choice>
85
+ </oneOrMore>
86
+ </define>
87
+
88
+ <define name="riddl-header">
89
+ <element name="header">
90
+ <ref name="riddl-att-name"/>
91
+ <choice>
92
+ <ref name="riddl-fixed"/>
93
+ <ref name="data"/>
94
+ </choice>
95
+ </element>
96
+ </define>
97
+
98
+ <define name="riddl-message-other">
99
+ <choice>
100
+ <ref name="riddl-zeroOrMore"/>
101
+ <ref name="riddl-oneOrMore"/>
102
+ <ref name="riddl-optional"/>
103
+ <ref name="riddl-choice"/>
104
+ <ref name="riddl-parameter"/>
105
+ </choice>
106
+ </define>
107
+ <define name="riddl-message-other-trimmed">
108
+ <choice>
109
+ <ref name="riddl-zeroOrMore"/>
110
+ <ref name="riddl-oneOrMore"/>
111
+ <ref name="riddl-choice"/>
112
+ <ref name="riddl-group"/>
113
+ <ref name="riddl-parameter"/>
114
+ </choice>
115
+ </define>
116
+
117
+ <define name="riddl-zeroOrMore">
118
+ <element name="zeroOrMore">
119
+ <oneOrMore>
120
+ <ref name="riddl-message-other"/>
121
+ </oneOrMore>
122
+ </element>
123
+ </define>
124
+ <define name="riddl-oneOrMore">
125
+ <element name="oneOrMore">
126
+ <oneOrMore>
127
+ <ref name="riddl-message-other"/>
128
+ </oneOrMore>
129
+ </element>
130
+ </define>
131
+ <define name="riddl-optional">
132
+ <element name="optional">
133
+ <oneOrMore>
134
+ <ref name="riddl-message-other"/>
135
+ </oneOrMore>
136
+ </element>
137
+ </define>
138
+ <define name="riddl-choice">
139
+ <element name="choice">
140
+ <oneOrMore>
141
+ <ref name="riddl-message-other-trimmed"/>
142
+ </oneOrMore>
143
+ </element>
144
+ </define>
145
+ <define name="riddl-group">
146
+ <element name="group">
147
+ <oneOrMore>
148
+ <ref name="riddl-message-other"/>
149
+ </oneOrMore>
150
+ </element>
151
+ </define>
152
+ <define name="riddl-parameter">
153
+ <element name="parameter">
154
+ <ref name="riddl-att-name-star"/>
155
+ <ref name="riddl-description-other-atts"/>
156
+ <choice>
157
+ <ref name="riddl-fixed"/>
158
+ <ref name="data"/>
159
+ <group>
160
+ <attribute name="mimetype">
161
+ <data type="string">
162
+ <param name="pattern">(([\c]+|\*)/[\c\+]+)|([\c]+/([\c\+]+|\*))|\*</param>
163
+ </data>
164
+ </attribute>
165
+ <optional>
166
+ <attribute name="handler">
167
+ <data type="anyURI"/>
168
+ </attribute>
169
+ </optional>
170
+ <optional>
171
+ <ref name="any"/>
172
+ </optional>
173
+ </group>
174
+ </choice>
175
+ </element>
176
+ </define>
177
+
178
+ <define name="riddl-fixed">
179
+ <optional>
180
+ <attribute name="fixed">
181
+ <data type="string"/>
182
+ </attribute>
183
+ </optional>
184
+ </define>
185
+
186
+ <define name="riddl-resource-attributes">
187
+ <optional>
188
+ <attribute name="pattern">
189
+ <data type="anyURI"/>
190
+ </attribute>
191
+ </optional>
192
+ <optional>
193
+ <attribute name="role">
194
+ <data type="anyURI"/>
195
+ </attribute>
196
+ </optional>
197
+ <ref name="riddl-description-other-atts"/>
198
+ </define>
199
+
200
+ <define name="riddl-resource-recursive-choice">
201
+ <choice>
202
+ <attribute name="recursive">
203
+ <data type="boolean"/>
204
+ </attribute>
205
+ <group>
206
+ <ref name="riddl-resource-sub"/>
207
+ </group>
208
+ </choice>
209
+ </define>
210
+
211
+ <define name="riddl-resource-dynamic">
212
+ <ref name="riddl-resource-attributes"/>
213
+ <ref name="riddl-resource-content"/>
214
+ <ref name="riddl-resource-recursive-choice"/>
215
+ </define>
216
+ <define name="riddl-resource-named">
217
+ <ref name="riddl-resource-attributes"/>
218
+ <attribute name="relative">
219
+ <ref name="riddl-datatype-relpath"/>
220
+ </attribute>
221
+ <ref name="riddl-resource-content"/>
222
+ <ref name="riddl-resource-recursive-choice"/>
223
+ </define>
224
+
225
+ <define name="riddl-resource-sub">
226
+ <!-- One dynamic resources, multiple named ones, before or after the dynamic -->
227
+ <zeroOrMore>
228
+ <element name="resource">
229
+ <ref name="riddl-resource-named"/>
230
+ </element>
231
+ </zeroOrMore>
232
+ <optional>
233
+ <element name="resource">
234
+ <ref name="riddl-resource-dynamic"/>
235
+ </element>
236
+ </optional>
237
+ <zeroOrMore>
238
+ <element name="resource">
239
+ <ref name="riddl-resource-named"/>
240
+ </element>
241
+ </zeroOrMore>
242
+ </define>
243
+
244
+ <define name="riddl-resource-content">
245
+ <zeroOrMore>
246
+ <choice>
247
+ <element name="post">
248
+ <ref name="riddl-atts-request"/>
249
+ <ref name="riddl-description-others"/>
250
+ </element>
251
+ <element name="get">
252
+ <ref name="riddl-atts-request"/>
253
+ <ref name="riddl-description-others"/>
254
+ </element>
255
+ <element name="put">
256
+ <ref name="riddl-atts-request"/>
257
+ <ref name="riddl-description-others"/>
258
+ </element>
259
+ <element name="delete">
260
+ <ref name="riddl-atts-request"/>
261
+ <ref name="riddl-description-others"/>
262
+ </element>
263
+ <element name="request">
264
+ <ref name="riddl-att-method"/>
265
+ <ref name="riddl-atts-request"/>
266
+ <ref name="riddl-description-others"/>
267
+ </element>
268
+ <element name="websocket">
269
+ <empty/>
270
+ </element>
271
+ </choice>
272
+ </zeroOrMore>
273
+ </define>
274
+
275
+ <define name="riddl-description-others">
276
+ <ref name="other"/>
277
+ <zeroOrMore>
278
+ <attribute>
279
+ <anyName>
280
+ <except>
281
+ <nsName/>
282
+ <nsName ns=""/>
283
+ </except>
284
+ </anyName>
285
+ </attribute>
286
+ </zeroOrMore>
287
+ </define>
288
+
289
+ <define name="riddl-description-other-atts">
290
+ <zeroOrMore>
291
+ <attribute>
292
+ <anyName>
293
+ <except>
294
+ <nsName/>
295
+ <nsName ns=""/>
296
+ </except>
297
+ </anyName>
298
+ </attribute>
299
+ </zeroOrMore>
300
+ </define>
301
+
302
+ </grammar>
data/riddl.gemspec ADDED
@@ -0,0 +1,33 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "riddl"
3
+ s.version = "0.99.105"
4
+ s.platform = Gem::Platform::RUBY
5
+ s.license = "LGPL-3"
6
+ s.summary = "restful interface description and declaration language: tools and client/server libs"
7
+
8
+ s.description = "rest service interface definition, mixing, and evolution"
9
+
10
+ s.files = Dir['{lib/riddl/ns/**/*,tools/**/*,ns/**/*,contrib/**/*,lib/riddl/**/*,example/**/*}'] + %w(COPYING Rakefile riddl.gemspec README.rdoc TODO AUTHORS INSTALL)
11
+ s.require_path = 'lib'
12
+ s.extra_rdoc_files = ['README.rdoc']
13
+ s.bindir = 'tools'
14
+ s.executables = ['riddlcheck','riddlprocess']
15
+ s.test_files = Dir['test/tc_*.rb','test/smartrunner.rb']
16
+
17
+
18
+ s.authors = ['Juergen eTM Mangler']
19
+ s.email = 'juergen.mangler@gmail.com'
20
+ s.homepage = 'http://www.wst.univie.ac.at/communities/riddl/'
21
+
22
+ s.required_ruby_version = '>=1.9.3'
23
+
24
+ s.add_runtime_dependency 'xml-smart', '>=0.3.4'
25
+ s.add_runtime_dependency 'rack'
26
+ s.add_runtime_dependency 'thin'
27
+ s.add_runtime_dependency 'eventmachine', '>= 1.0.0'
28
+ s.add_runtime_dependency 'em-websocket', '>= 0.4.0'
29
+ s.add_runtime_dependency 'em-websocket-client'
30
+ s.add_runtime_dependency 'mime-types'
31
+ s.add_runtime_dependency 'minitest', '=4.7.4'
32
+ s.add_runtime_dependency 'blather'
33
+ end
@@ -0,0 +1,48 @@
1
+ require 'rubygems'
2
+ gem 'minitest', '=4.7.4'
3
+ require 'minitest/autorun'
4
+ require 'socket'
5
+
6
+ class TestServerInfo
7
+ attr_reader :server,:schema
8
+ attr_accessor :url, :port
9
+
10
+ def initialize(server,schema)
11
+ @server = server
12
+ @schema = schema
13
+ end
14
+ end
15
+
16
+ module ServerCase
17
+ def setup
18
+ self.class::SERVER.each do |s|
19
+ if self.class::NORUN
20
+ out = `#{s.server} info`
21
+ s.port = out.match(/:(\d+)\)/)[1].to_i
22
+ s.url = out.match(/\(([^\)]+)\)/)[1]
23
+ else
24
+ out = `#{s.server} start`
25
+ s.port = out.match(/:(\d+)\)/)[1].to_i
26
+ s.url = out.match(/\(([^\)]+)\)/)[1]
27
+
28
+ up = false
29
+ until up
30
+ begin
31
+ TCPSocket.new('localhost', s.port)
32
+ up = true
33
+ rescue => e
34
+ sleep 0.2
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ def teardown
42
+ unless self.class::NORUN
43
+ self.class::SERVER.each do |s|
44
+ `#{s.server} stop`
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,79 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/smartrunner.rb')
2
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/riddl/client')
3
+ require 'xml/smart'
4
+ require 'pp'
5
+
6
+ class TestDecDi < MiniTest::Unit::TestCase
7
+ include ServerCase
8
+
9
+ SERVER = [
10
+ TestServerInfo.new(
11
+ File.expand_path(File.dirname(__FILE__) + '/../examples/declaration-server-distributed/main.rb'),
12
+ File.expand_path(File.dirname(__FILE__) + '/../examples/declaration-server-distributed/main.xml')
13
+ ),
14
+ TestServerInfo.new(
15
+ File.expand_path(File.dirname(__FILE__) + '/../examples/declaration-server-distributed/properties.rb'),
16
+ File.expand_path(File.dirname(__FILE__) + '/../examples/declaration-server-distributed/properties.xml')
17
+ ),
18
+ TestServerInfo.new(
19
+ File.expand_path(File.dirname(__FILE__) + '/../examples/declaration-server-distributed/xsloverlay.rb'),
20
+ File.expand_path(File.dirname(__FILE__) + '/../examples/declaration-server-distributed/xsloverlay.xml')
21
+ ),
22
+ TestServerInfo.new(
23
+ File.expand_path(File.dirname(__FILE__) + '/../examples/declaration-server-distributed/declaration.rb'),
24
+ File.expand_path(File.dirname(__FILE__) + '/../examples/declaration-server-distributed/declaration.xml')
25
+ )
26
+ ]
27
+ NORUN = false
28
+
29
+ def test_decdi
30
+ ep = Riddl::Client.interface(SERVER[3].url,SERVER[3].schema)
31
+
32
+ test = ep.resource('/')
33
+ status, res = test.get
34
+ assert status == 200
35
+ doc = XML::Smart.string(res[0].value.read)
36
+ assert doc.find('/processing-instruction("xml-stylesheet")').length == 1
37
+ assert doc.find('/processing-instruction("xml-stylesheet")').first.content =~ /instances\.xsl/
38
+ assert doc.find('/instances/instance').length == 2
39
+
40
+ test = ep.resource('/1')
41
+ status, res = test.get
42
+ assert status == 200
43
+ doc = XML::Smart.string(res[0].value.read)
44
+ assert doc.find('/processing-instruction("xml-stylesheet")').length == 1
45
+ assert doc.find('/processing-instruction("xml-stylesheet")').first.content =~ /info\.xsl/
46
+ assert doc.find('/info/properties').length == 1
47
+
48
+ test = ep.resource('/1/properties')
49
+ status, res = test.get
50
+ assert status == 200
51
+ doc = XML::Smart.string(res[0].value.read)
52
+ assert doc.find('/processing-instruction("xml-stylesheet")').length == 1
53
+ assert doc.find('/processing-instruction("xml-stylesheet")').first.content =~ /properties\.xsl/
54
+ assert doc.find('/xmlns:properties/xmlns:name').length == 1
55
+ assert doc.find('/xmlns:properties/xmlns:state').length == 1
56
+ assert doc.find('/xmlns:properties/xmlns:dataelements').length == 1
57
+ assert doc.find('/xmlns:properties/xmlns:endpoints').length == 1
58
+ assert doc.find('/xmlns:properties/xmlns:handlerwrapper').length == 1
59
+ assert doc.find('/xmlns:properties/xmlns:description').length == 1
60
+
61
+ test = ep.resource('/1/properties/values')
62
+ status, res = test.get
63
+ assert status == 200
64
+ doc = XML::Smart.string(res[0].value.read)
65
+ assert doc.find('/processing-instruction("xml-stylesheet")').length == 1
66
+ assert doc.find('/processing-instruction("xml-stylesheet")').first.content =~ /values\.xsl/
67
+ assert doc.find('/xmlns:properties/xmlns:property[.="name"]').length == 1
68
+ assert doc.find('/xmlns:properties/xmlns:property[.="state"]').length == 1
69
+ assert doc.find('/xmlns:properties/xmlns:property[.="dataelements"]').length == 1
70
+ assert doc.find('/xmlns:properties/xmlns:property[.="endpoints"]').length == 1
71
+ assert doc.find('/xmlns:properties/xmlns:property[.="handlerwrapper"]').length == 1
72
+ assert doc.find('/xmlns:properties/xmlns:property[.="description"]').length == 1
73
+
74
+ test = ep.resource('/1/properties/values/name')
75
+ status, res = test.get
76
+ assert status == 200
77
+ assert res[0].value == 'laller'
78
+ end
79
+ end