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.
- data/AUTHORS +1 -0
- data/COPYING +165 -0
- data/INSTALL +24 -0
- data/README.rdoc +2 -0
- data/Rakefile +17 -0
- data/TODO +17 -0
- data/contrib/riddl.jpg +0 -0
- data/contrib/riddl.png +0 -0
- data/contrib/riddl.svg +138 -0
- data/lib/riddl/client.rb +423 -0
- data/lib/riddl/commonlogger.rb +16 -0
- data/lib/riddl/constants.rb +5 -0
- data/lib/riddl/error.rb +8 -0
- data/lib/riddl/handlers.rb +14 -0
- data/lib/riddl/handlers/oauth.rb +19 -0
- data/lib/riddl/handlers/plain-type.rb +21 -0
- data/lib/riddl/handlers/relaxng.rb +16 -0
- data/lib/riddl/handlers/xmlschema.rb +16 -0
- data/lib/riddl/header.rb +9 -0
- data/lib/riddl/implementation.rb +57 -0
- data/lib/riddl/ns/common-patterns/addon-security/request.xml +25 -0
- data/lib/riddl/ns/common-patterns/addon-security/response.xml +25 -0
- data/lib/riddl/ns/common-patterns/downloadify/1.0/downloadify.xml +18 -0
- data/lib/riddl/ns/common-patterns/notifications-consumer/1.0/consumer.xml +100 -0
- data/lib/riddl/ns/common-patterns/notifications-producer/1.0/producer.xml +204 -0
- data/lib/riddl/ns/common-patterns/properties/1.0/properties.schema.schema +140 -0
- data/lib/riddl/ns/common-patterns/properties/1.0/properties.schema.xsl +89 -0
- data/lib/riddl/ns/common-patterns/properties/1.0/properties.xml +150 -0
- data/lib/riddl/ns/common/datatypes-1_0.rng +79 -0
- data/lib/riddl/ns/common/relaxng-modular.rng +330 -0
- data/lib/riddl/ns/common/relaxng.rng +10 -0
- data/lib/riddl/ns/declaration/1.0/declaration.rng +114 -0
- data/lib/riddl/ns/description/1.0/description.rng +302 -0
- data/lib/riddl/option.rb +9 -0
- data/lib/riddl/parameter.rb +54 -0
- data/lib/riddl/protocols/http/generator.rb +121 -0
- data/lib/riddl/protocols/http/parser.rb +199 -0
- data/lib/riddl/protocols/websocket.rb +103 -0
- data/lib/riddl/protocols/xmpp/generator.rb +176 -0
- data/lib/riddl/protocols/xmpp/parser.rb +118 -0
- data/lib/riddl/roles.rb +15 -0
- data/lib/riddl/roles/http%3A%2F%2Foauth.net%2F1.0%2Faccess_token.rb +30 -0
- data/lib/riddl/roles/http%3A%2F%2Foauth.net%2F1.0%2Fon_behalf.rb +22 -0
- data/lib/riddl/roles/http%3A%2F%2Foauth.net%2F1.0%2Frequest_token.rb +30 -0
- data/lib/riddl/roles/http%3A%2F%2Foauth.net%2F1.0/base.rb +67 -0
- data/lib/riddl/server.rb +519 -0
- data/lib/riddl/utils/description.rb +29 -0
- data/lib/riddl/utils/downloadify.rb +14 -0
- data/lib/riddl/utils/erbserve.rb +23 -0
- data/lib/riddl/utils/fileserve.rb +31 -0
- data/lib/riddl/utils/notifications_producer.rb +310 -0
- data/lib/riddl/utils/properties.rb +474 -0
- data/lib/riddl/utils/xsloverlay.rb +21 -0
- data/lib/riddl/wrapper.rb +280 -0
- data/lib/riddl/wrapper/declaration.rb +103 -0
- data/lib/riddl/wrapper/declaration/facade.rb +94 -0
- data/lib/riddl/wrapper/declaration/interface.rb +34 -0
- data/lib/riddl/wrapper/declaration/tile.rb +107 -0
- data/lib/riddl/wrapper/description.rb +69 -0
- data/lib/riddl/wrapper/description/access.rb +108 -0
- data/lib/riddl/wrapper/description/message_and_transformation.rb +131 -0
- data/lib/riddl/wrapper/description/resource.rb +271 -0
- data/lib/riddl/wrapper/layerchecker.rb +33 -0
- data/lib/riddl/wrapper/messageparser.rb +221 -0
- data/lib/riddl/wrapper/resourcechecker.rb +98 -0
- data/ns/common-patterns/addon-security/request.xml +25 -0
- data/ns/common-patterns/addon-security/response.xml +25 -0
- data/ns/common-patterns/downloadify/1.0/downloadify.xml +18 -0
- data/ns/common-patterns/notifications-consumer/1.0/consumer.xml +100 -0
- data/ns/common-patterns/notifications-producer/1.0/producer.xml +204 -0
- data/ns/common-patterns/properties/1.0/properties.schema.schema +140 -0
- data/ns/common-patterns/properties/1.0/properties.schema.xsl +89 -0
- data/ns/common-patterns/properties/1.0/properties.xml +150 -0
- data/ns/common/datatypes-1_0.rng +79 -0
- data/ns/common/relaxng-modular.rng +330 -0
- data/ns/common/relaxng.rng +10 -0
- data/ns/declaration/1.0/declaration.rng +114 -0
- data/ns/description/1.0/description.rng +302 -0
- data/riddl.gemspec +33 -0
- data/test/smartrunner.rb +48 -0
- data/test/tc_declaration-distributed.rb +79 -0
- data/test/tc_declaration-hybrid.rb +71 -0
- data/test/tc_declaration-local.rb +47 -0
- data/test/tc_helloworld.rb +17 -0
- data/test/tc_producer.rb +54 -0
- data/test/tc_properties.rb +72 -0
- data/tools/flash-policy-server.rb +12 -0
- data/tools/riddlcheck +36 -0
- data/tools/riddlcheck-1_0 +36 -0
- data/tools/riddlprocess +51 -0
- data/tools/riddlprocess-1_0 +51 -0
- 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/lib/riddl/option.rb
ADDED
@@ -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
|