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>
@@ -0,0 +1,9 @@
1
+ module Riddl
2
+ class Option
3
+ attr_reader :name, :value
4
+ def initialize(name,value)
5
+ @name = name
6
+ @value = value
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,54 @@
1
+ require 'tempfile'
2
+
3
+ module Riddl
4
+ module Parameter
5
+ class Array < ::Array
6
+ def value(index)
7
+ tmp = find_all{|e| e.name == index}
8
+ case tmp.length
9
+ when 0; nil
10
+ when 1; tmp[0].value
11
+ else tmp
12
+ end if tmp
13
+ end
14
+ end
15
+ class Simple
16
+ attr_accessor :name, :value, :type
17
+ def initialize(name,value,type=:body)
18
+ @name = name
19
+ @value = value
20
+ @type = (type == :query ? :query : :body)
21
+ end
22
+ end
23
+ class Complex
24
+ attr_reader :mimetype, :filename, :value, :type, :additional
25
+ attr_accessor :name
26
+ def initialize(name,mimetype,file=nil,filename=nil,additional=[])
27
+ @name = name
28
+ @mimetype = mimetype.gsub(/;.*/,'')
29
+ @filename = filename
30
+ @type = :body
31
+ @additional = additional
32
+
33
+ @value = block_given? ? yield : file
34
+ unless (@value && (@value.class == String || (file.respond_to?(:read) && file.respond_to?(:rewind))))
35
+ raise "ERROR input is not a stream or string"
36
+ end
37
+ end
38
+ def reopen
39
+ if @value.class == File || @value.class == Riddl::Parameter::Tempfile
40
+ pname = @value.path
41
+ @value.close
42
+ @value = File.open(pname,'r')
43
+ end
44
+ end
45
+ end
46
+ class Tempfile < ::Tempfile
47
+ def _close
48
+ @tmpfile.close if @tmpfile
49
+ @data[1] = nil if @data
50
+ @tmpfile = nil
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,121 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../constants')
2
+ require 'stringio'
3
+
4
+ module Riddl
5
+ module Protocols
6
+ module HTTP
7
+ class Generator
8
+ def initialize(params,headers)
9
+ @params = params
10
+ @headers = headers
11
+ end
12
+
13
+ # Performs URI escaping so that you can construct proper
14
+ # query strings faster. Use this rather than the cgi.rb
15
+ # version since it's faster. (%20 instead of + for improved standards conformance).
16
+ def self.escape(s)
17
+ s.to_s.gsub(/([^a-zA-Z0-9_.-]+)/n) {
18
+ '%'+$1.unpack('H2'*$1.size).join('%').upcase
19
+ }
20
+ end
21
+
22
+ def generate(mode=:output)
23
+ if @params.is_a?(Array) && @params.length == 1
24
+ body(@params[0],mode)
25
+ elsif @params.class == Riddl::Parameter::Simple || @params.class == Riddl::Parameter::Complex
26
+ body(@params,mode)
27
+ elsif @params.is_a?(Array) && @params.length > 1
28
+ multipart(mode)
29
+ else
30
+ StringIO.new('','r+b')
31
+ end
32
+ end
33
+
34
+ def body(r,mode)
35
+ tmp = StringIO.new('','r+b')
36
+ case r
37
+ when Riddl::Parameter::Simple
38
+ if mode == :output
39
+ tmp.write r.value
40
+ @headers['Content-Type'] = 'text/plain'
41
+ @headers['Content-ID'] = r.name
42
+ @headers['RIDDL-TYPE'] = 'simple'
43
+ end
44
+ if mode == :input
45
+ @headers['Content-Type'] = 'application/x-www-form-urlencoded'
46
+ tmp.write self.class::escape(r.name) + '=' + self.class::escape(r.value)
47
+ end
48
+ when Riddl::Parameter::Complex
49
+ tmp.write(r.value.respond_to?(:read) ? r.value.read : r.value)
50
+ @headers['Content-Type'] = r.mimetype
51
+ @headers['RIDDL-TYPE'] = 'complex'
52
+ if r.filename.nil?
53
+ @headers['Content-ID'] = r.name
54
+ else
55
+ @headers['Content-Disposition'] = "riddl-data; name=\"#{r.name}\"; filename=\"#{r.filename}\""
56
+ end
57
+ end
58
+ tmp.flush
59
+ tmp.rewind
60
+ tmp
61
+ end
62
+ private :body
63
+
64
+ def multipart(mode)
65
+ tmp = StringIO.new('','r+b')
66
+ scount = ccount = 0
67
+ @params.each do |r|
68
+ case r
69
+ when Riddl::Parameter::Simple
70
+ scount += 1
71
+ when Riddl::Parameter::Complex
72
+ ccount += 1
73
+ end
74
+ end
75
+ if scount > 0 && ccount == 0
76
+ @headers['Content-Type'] = 'application/x-www-form-urlencoded'
77
+ res = []
78
+ @params.each do |r|
79
+ case r
80
+ when Riddl::Parameter::Simple
81
+ res << self.class::escape(r.name) + '=' + self.class::escape(r.value)
82
+ end
83
+ end
84
+ tmp.write res.join('&')
85
+ else
86
+ if scount + ccount > 0
87
+ @headers['Content-Type'] = "multipart/#{mode == :input ? 'form-data' : 'mixed'}; boundary=\"#{BOUNDARY}\""
88
+ @params.each do |r|
89
+ case r
90
+ when Riddl::Parameter::Simple
91
+ tmp.write "--" + BOUNDARY + EOL
92
+ tmp.write "RIDDL-TYPE: simple" + EOL
93
+ tmp.write "Content-Disposition: #{mode == :input ? 'form-data' : 'riddl-data'}; name=\"#{r.name}\"" + EOL
94
+ tmp.write EOL
95
+ tmp.write r.value
96
+ tmp.write EOL
97
+ when Riddl::Parameter::Complex
98
+ tmp.write "--" + BOUNDARY + EOL
99
+ tmp.write "RIDDL-TYPE: complex" + EOL
100
+ tmp.write "Content-Disposition: #{mode == :input ? 'form-data' : 'riddl-data'}; name=\"#{r.name}\""
101
+ tmp.write r.filename.nil? ? EOL : "; filename=\"#{r.filename}\"" + EOL
102
+ tmp.write "Content-Transfer-Encoding: binary" + EOL
103
+ tmp.write "Content-Type: " + r.mimetype + EOL
104
+ tmp.write EOL
105
+ tmp.write(r.value.respond_to?(:read) ? r.value.read : r.value)
106
+ tmp.write EOL
107
+ end
108
+ end
109
+ tmp.write "--" + BOUNDARY + EOL
110
+ end
111
+ end
112
+ tmp.flush
113
+ tmp.rewind
114
+ tmp
115
+ end
116
+ private :multipart
117
+
118
+ end
119
+ end
120
+ end
121
+ end