rubysl-xmlrpc 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,36 +1,38 @@
1
1
  #
2
- # $Id: config.rb 11708 2007-02-12 23:01:19Z shyouhei $
2
+ # $Id$
3
3
  # Configuration file for XML-RPC for Ruby
4
4
  #
5
5
 
6
- module XMLRPC
6
+ module XMLRPC # :nodoc:
7
7
 
8
8
  module Config
9
9
 
10
- DEFAULT_WRITER = XMLWriter::Simple # or XMLWriter::XMLParser
11
-
12
- # available parser:
13
- # * XMLParser::NQXMLTreeParser
14
- # * XMLParser::NQXMLStreamParser
15
- # * XMLParser::XMLTreeParser
16
- # * XMLParser::XMLStreamParser (fastest)
17
- # * XMLParser::REXMLStreamParser
18
- # * XMLParser::XMLScanStreamParser
10
+ # or XMLWriter::XMLParser
11
+ DEFAULT_WRITER = XMLWriter::Simple
12
+
13
+ # === Available parsers
14
+ #
15
+ # * XMLParser::NQXMLTreeParser
16
+ # * XMLParser::NQXMLStreamParser
17
+ # * XMLParser::XMLTreeParser
18
+ # * XMLParser::XMLStreamParser (fastest)
19
+ # * XMLParser::REXMLStreamParser
20
+ # * XMLParser::XMLScanStreamParser
19
21
  DEFAULT_PARSER = XMLParser::REXMLStreamParser
20
22
 
21
- # enable <nil/> tag
23
+ # enable <code><nil/></code> tag
22
24
  ENABLE_NIL_CREATE = false
23
25
  ENABLE_NIL_PARSER = false
24
-
25
- # allows integers greater than 32-bit if true
26
+
27
+ # allows integers greater than 32-bit if +true+
26
28
  ENABLE_BIGINT = false
27
29
 
28
30
  # enable marshalling ruby objects which include XMLRPC::Marshallable
29
- ENABLE_MARSHALLING = true
31
+ ENABLE_MARSHALLING = true
30
32
 
31
33
  # enable multiCall extension by default
32
34
  ENABLE_MULTICALL = false
33
-
35
+
34
36
  # enable Introspection extension by default
35
37
  ENABLE_INTROSPECTION = false
36
38
 
@@ -1,25 +1,23 @@
1
1
  #
2
- # Creates XML-RPC call/response documents
3
- #
4
2
  # Copyright (C) 2001, 2002, 2003 by Michael Neumann (mneumann@ntecs.de)
5
3
  #
6
- # $Id: create.rb 11818 2007-02-23 03:45:55Z knu $
4
+ # $Id$
7
5
  #
8
6
 
9
7
  require "date"
10
8
  require "xmlrpc/base64"
11
9
 
12
- module XMLRPC
10
+ module XMLRPC # :nodoc:
13
11
 
14
12
  module XMLWriter
15
13
 
16
14
  class Abstract
17
15
  def ele(name, *children)
18
- element(name, nil, *children)
16
+ element(name, nil, *children)
19
17
  end
20
18
 
21
19
  def tag(name, txt)
22
- element(name, nil, text(txt))
20
+ element(name, nil, text(txt))
23
21
  end
24
22
  end
25
23
 
@@ -27,21 +25,21 @@ module XMLRPC
27
25
  class Simple < Abstract
28
26
 
29
27
  def document_to_str(doc)
30
- doc
28
+ doc
31
29
  end
32
30
 
33
31
  def document(*params)
34
- params.join("")
32
+ params.join("")
35
33
  end
36
34
 
37
35
  def pi(name, *params)
38
- "<?#{name} " + params.join(" ") + " ?>"
36
+ "<?#{name} " + params.join(" ") + " ?>"
39
37
  end
40
38
 
41
39
  def element(name, attrs, *children)
42
- raise "attributes not yet implemented" unless attrs.nil?
40
+ raise "attributes not yet implemented" unless attrs.nil?
43
41
  if children.empty?
44
- "<#{name}/>"
42
+ "<#{name}/>"
45
43
  else
46
44
  "<#{name}>" + children.join("") + "</#{name}>"
47
45
  end
@@ -61,27 +59,27 @@ module XMLRPC
61
59
  class XMLParser < Abstract
62
60
 
63
61
  def initialize
64
- require "xmltreebuilder"
62
+ require "xmltreebuilder"
65
63
  end
66
64
 
67
65
  def document_to_str(doc)
68
- doc.to_s
66
+ doc.to_s
69
67
  end
70
68
 
71
69
  def document(*params)
72
- XML::SimpleTree::Document.new(*params)
70
+ XML::SimpleTree::Document.new(*params)
73
71
  end
74
72
 
75
73
  def pi(name, *params)
76
- XML::SimpleTree::ProcessingInstruction.new(name, *params)
74
+ XML::SimpleTree::ProcessingInstruction.new(name, *params)
77
75
  end
78
76
 
79
77
  def element(name, attrs, *children)
80
- XML::SimpleTree::Element.new(name, attrs, *children)
78
+ XML::SimpleTree::Element.new(name, attrs, *children)
81
79
  end
82
80
 
83
81
  def text(txt)
84
- XML::SimpleTree::Text.new(txt)
82
+ XML::SimpleTree::Text.new(txt)
85
83
  end
86
84
 
87
85
  end # class XMLParser
@@ -100,6 +98,8 @@ module XMLRPC
100
98
 
101
99
  end # module XMLWriter
102
100
 
101
+ # Creates XML-RPC call/response documents
102
+ #
103
103
  class Create
104
104
 
105
105
  def initialize(xml_writer = nil)
@@ -111,20 +111,20 @@ module XMLRPC
111
111
  name = name.to_s
112
112
 
113
113
  if name !~ /[a-zA-Z0-9_.:\/]+/
114
- raise ArgumentError, "Wrong XML-RPC method-name"
114
+ raise ArgumentError, "Wrong XML-RPC method-name"
115
115
  end
116
116
 
117
117
  parameter = params.collect do |param|
118
- @writer.ele("param", conv2value(param))
118
+ @writer.ele("param", conv2value(param))
119
119
  end
120
120
 
121
121
  tree = @writer.document(
122
- @writer.pi("xml", 'version="1.0"'),
123
- @writer.ele("methodCall",
124
- @writer.tag("methodName", name),
125
- @writer.ele("params", *parameter)
126
- )
127
- )
122
+ @writer.pi("xml", 'version="1.0"'),
123
+ @writer.ele("methodCall",
124
+ @writer.tag("methodName", name),
125
+ @writer.ele("params", *parameter)
126
+ )
127
+ )
128
128
 
129
129
  @writer.document_to_str(tree) + "\n"
130
130
  end
@@ -132,56 +132,51 @@ module XMLRPC
132
132
 
133
133
 
134
134
  #
135
- # generates a XML-RPC methodResponse document
135
+ # Generates a XML-RPC methodResponse document
136
136
  #
137
- # if is_ret == false then the params array must
137
+ # When +is_ret+ is +false+ then the +params+ array must
138
138
  # contain only one element, which is a structure
139
139
  # of a fault return-value.
140
- #
141
- # if is_ret == true then a normal
142
- # return-value of all the given params is created.
140
+ #
141
+ # When +is_ret+ is +true+ then a normal
142
+ # return-value of all the given +params+ is created.
143
143
  #
144
144
  def methodResponse(is_ret, *params)
145
145
 
146
- if is_ret
147
- resp = params.collect do |param|
148
- @writer.ele("param", conv2value(param))
149
- end
150
-
151
- resp = [@writer.ele("params", *resp)]
146
+ if is_ret
147
+ resp = params.collect do |param|
148
+ @writer.ele("param", conv2value(param))
149
+ end
150
+
151
+ resp = [@writer.ele("params", *resp)]
152
152
  else
153
- if params.size != 1 or params[0] === XMLRPC::FaultException
154
- raise ArgumentError, "no valid fault-structure given"
155
- end
156
- resp = @writer.ele("fault", conv2value(params[0].to_h))
153
+ if params.size != 1 or params[0] === XMLRPC::FaultException
154
+ raise ArgumentError, "no valid fault-structure given"
155
+ end
156
+ resp = @writer.ele("fault", conv2value(params[0].to_h))
157
157
  end
158
158
 
159
-
159
+
160
160
  tree = @writer.document(
161
- @writer.pi("xml", 'version="1.0"'),
162
- @writer.ele("methodResponse", resp)
163
- )
161
+ @writer.pi("xml", 'version="1.0"'),
162
+ @writer.ele("methodResponse", resp)
163
+ )
164
164
 
165
165
  @writer.document_to_str(tree) + "\n"
166
166
  end
167
167
 
168
168
 
169
169
 
170
- #####################################
171
170
  private
172
- #####################################
173
171
 
174
172
  #
175
- # converts a Ruby object into
176
- # a XML-RPC <value> tag
173
+ # Converts a Ruby object into a XML-RPC <code><value></code> tag
177
174
  #
178
- def conv2value(param)
179
-
180
- val = case param
181
- when Fixnum
182
- @writer.tag("i4", param.to_s)
175
+ def conv2value(param) # :doc:
183
176
 
184
- when Bignum
177
+ val = case param
178
+ when Fixnum, Bignum
179
+ # XML-RPC's int is 32bit int, and Fixnum also may be beyond 32bit
185
180
  if Config::ENABLE_BIGINT
186
181
  @writer.tag("i4", param.to_s)
187
182
  else
@@ -191,14 +186,14 @@ module XMLRPC
191
186
  raise "Bignum is too big! Must be signed 32-bit integer!"
192
187
  end
193
188
  end
194
- when TrueClass, FalseClass
195
- @writer.tag("boolean", param ? "1" : "0")
189
+ when TrueClass, FalseClass
190
+ @writer.tag("boolean", param ? "1" : "0")
196
191
 
197
- when String
198
- @writer.tag("string", param)
192
+ when Symbol
193
+ @writer.tag("string", param.to_s)
199
194
 
200
- when Symbol
201
- @writer.tag("string", param.to_s)
195
+ when String
196
+ @writer.tag("string", param)
202
197
 
203
198
  when NilClass
204
199
  if Config::ENABLE_NIL_CREATE
@@ -207,55 +202,56 @@ module XMLRPC
207
202
  raise "Wrong type NilClass. Not allowed!"
208
203
  end
209
204
 
210
- when Float
211
- @writer.tag("double", param.to_s)
212
-
213
- when Struct
214
- h = param.members.collect do |key|
215
- value = param[key]
216
- @writer.ele("member",
217
- @writer.tag("name", key.to_s),
218
- conv2value(value)
219
- )
220
- end
221
-
222
- @writer.ele("struct", *h)
223
-
224
- when Hash
225
- # TODO: can a Hash be empty?
226
-
227
- h = param.collect do |key, value|
228
- @writer.ele("member",
229
- @writer.tag("name", key.to_s),
230
- conv2value(value)
231
- )
232
- end
233
-
234
- @writer.ele("struct", *h)
235
-
236
- when Array
237
- # TODO: can an Array be empty?
238
- a = param.collect {|v| conv2value(v) }
239
-
240
- @writer.ele("array",
241
- @writer.ele("data", *a)
242
- )
243
-
244
- when Time, Date, ::DateTime
245
- @writer.tag("dateTime.iso8601", param.strftime("%Y%m%dT%H:%M:%S"))
246
-
247
- when XMLRPC::DateTime
248
- @writer.tag("dateTime.iso8601",
249
- format("%.4d%02d%02dT%02d:%02d:%02d", *param.to_a))
250
-
251
- when XMLRPC::Base64
252
- @writer.tag("base64", param.encoded)
253
-
254
- else
205
+ when Float
206
+ raise "Wrong value #{param}. Not allowed!" unless param.finite?
207
+ @writer.tag("double", param.to_s)
208
+
209
+ when Struct
210
+ h = param.members.collect do |key|
211
+ value = param[key]
212
+ @writer.ele("member",
213
+ @writer.tag("name", key.to_s),
214
+ conv2value(value)
215
+ )
216
+ end
217
+
218
+ @writer.ele("struct", *h)
219
+
220
+ when Hash
221
+ # TODO: can a Hash be empty?
222
+
223
+ h = param.collect do |key, value|
224
+ @writer.ele("member",
225
+ @writer.tag("name", key.to_s),
226
+ conv2value(value)
227
+ )
228
+ end
229
+
230
+ @writer.ele("struct", *h)
231
+
232
+ when Array
233
+ # TODO: can an Array be empty?
234
+ a = param.collect {|v| conv2value(v) }
235
+
236
+ @writer.ele("array",
237
+ @writer.ele("data", *a)
238
+ )
239
+
240
+ when Time, Date, ::DateTime
241
+ @writer.tag("dateTime.iso8601", param.strftime("%Y%m%dT%H:%M:%S"))
242
+
243
+ when XMLRPC::DateTime
244
+ @writer.tag("dateTime.iso8601",
245
+ format("%.4d%02d%02dT%02d:%02d:%02d", *param.to_a))
246
+
247
+ when XMLRPC::Base64
248
+ @writer.tag("base64", param.encoded)
249
+
250
+ else
255
251
  if Config::ENABLE_MARSHALLING and param.class.included_modules.include? XMLRPC::Marshallable
256
252
  # convert Ruby object into Hash
257
253
  ret = {"___class___" => param.class.name}
258
- param.instance_variables.each {|v|
254
+ param.instance_variables.each {|v|
259
255
  name = v[1..-1]
260
256
  val = param.instance_variable_get(v)
261
257
 
@@ -266,24 +262,24 @@ module XMLRPC
266
262
  end
267
263
  }
268
264
  return conv2value(ret)
269
- else
265
+ else
270
266
  ok, pa = wrong_type(param)
271
267
  if ok
272
268
  return conv2value(pa)
273
- else
269
+ else
274
270
  raise "Wrong type!"
275
271
  end
276
272
  end
277
- end
278
-
279
- @writer.ele("value", val)
273
+ end
274
+
275
+ @writer.ele("value", val)
280
276
  end
281
277
 
282
278
  def wrong_type(value)
283
279
  false
284
280
  end
285
281
 
286
-
282
+
287
283
  end # class Create
288
284
 
289
285
  end # module XMLRPC
@@ -1,115 +1,95 @@
1
- =begin
2
- = xmlrpc/datetime.rb
3
- Copyright (C) 2001, 2002, 2003 by Michael Neumann (mneumann@ntecs.de)
4
-
5
- Released under the same term of license as Ruby.
6
-
7
- = Classes
8
- * ((<XMLRPC::DateTime>))
9
-
10
- = XMLRPC::DateTime
11
- == Description
12
- This class is important to handle XMLRPC (('dateTime.iso8601')) values,
13
- correcly, because normal UNIX-dates (class (({Date}))) only handle dates
14
- from year 1970 on, and class (({Time})) handles dates without the time
15
- component. (({XMLRPC::DateTime})) is able to store a XMLRPC
16
- (('dateTime.iso8601')) value correctly.
17
-
18
- == Class Methods
19
- --- XMLRPC::DateTime.new( year, month, day, hour, min, sec )
20
- Creates a new (({XMLRPC::DateTime})) instance with the
21
- parameters ((|year|)), ((|month|)), ((|day|)) as date and
22
- ((|hour|)), ((|min|)), ((|sec|)) as time.
23
- Raises (({ArgumentError})) if a parameter is out of range, or ((|year|)) is not
24
- of type (({Integer})).
25
-
26
- == Instance Methods
27
- --- XMLRPC::DateTime#year
28
- --- XMLRPC::DateTime#month
29
- --- XMLRPC::DateTime#day
30
- --- XMLRPC::DateTime#hour
31
- --- XMLRPC::DateTime#min
32
- --- XMLRPC::DateTime#sec
33
- Return the value of the specified date/time component.
34
-
35
- --- XMLRPC::DateTime#mon
36
- Alias for ((<XMLRPC::DateTime#month>)).
37
-
38
- --- XMLRPC::DateTime#year=( value )
39
- --- XMLRPC::DateTime#month=( value )
40
- --- XMLRPC::DateTime#day=( value )
41
- --- XMLRPC::DateTime#hour=( value )
42
- --- XMLRPC::DateTime#min=( value )
43
- --- XMLRPC::DateTime#sec=( value )
44
- Set ((|value|)) as the new date/time component.
45
- Raises (({ArgumentError})) if ((|value|)) is out of range, or in the case
46
- of (({XMLRPC::DateTime#year=})) if ((|value|)) is not of type (({Integer})).
47
-
48
- --- XMLRPC::DateTime#mon=( value )
49
- Alias for ((<XMLRPC::DateTime#month=>)).
50
-
51
- --- XMLRPC::DateTime#to_time
52
- Return a (({Time})) object of the date/time which (({self})) represents.
53
- If the (('year')) is below 1970, this method returns (({nil})),
54
- because (({Time})) cannot handle years below 1970.
55
- The used timezone is GMT.
56
-
57
- --- XMLRPC::DateTime#to_date
58
- Return a (({Date})) object of the date which (({self})) represents.
59
- The (({Date})) object do ((*not*)) contain the time component (only date).
60
-
61
- --- XMLRPC::DateTime#to_a
62
- Returns all date/time components in an array.
63
- Returns (({[year, month, day, hour, min, sec]})).
64
- =end
65
-
1
+ #
2
+ # xmlrpc/datetime.rb
3
+ # Copyright (C) 2001, 2002, 2003 by Michael Neumann (mneumann@ntecs.de)
4
+ #
5
+ # Released under the same term of license as Ruby.
6
+ #
66
7
  require "date"
67
8
 
68
- module XMLRPC
9
+ module XMLRPC # :nodoc:
69
10
 
11
+ # This class is important to handle XMLRPC +dateTime.iso8601+ values,
12
+ # correcly, because normal UNIX-dates, ie: Date, only handle dates
13
+ # from year 1970 on, and ruby's native Time class handles dates without the
14
+ # time component.
15
+ #
16
+ # XMLRPC::DateTime is able to store a XMLRPC +dateTime.iso8601+ value correctly.
70
17
  class DateTime
71
-
18
+
19
+ # Return the value of the specified date/time component.
72
20
  attr_reader :year, :month, :day, :hour, :min, :sec
73
21
 
22
+ # Set +value+ as the new date/time component.
23
+ #
24
+ # Raises ArgumentError if the given +value+ is out of range, or in the case
25
+ # of XMLRPC::DateTime#year= if +value+ is not of type Integer.
74
26
  def year= (value)
75
27
  raise ArgumentError, "date/time out of range" unless value.is_a? Integer
76
28
  @year = value
77
29
  end
78
30
 
31
+ # Set +value+ as the new date/time component.
32
+ #
33
+ # Raises an ArgumentError if the given +value+ isn't between 1 and 12.
79
34
  def month= (value)
80
35
  raise ArgumentError, "date/time out of range" unless (1..12).include? value
81
36
  @month = value
82
37
  end
83
38
 
39
+ # Set +value+ as the new date/time component.
40
+ #
41
+ # Raises an ArgumentError if the given +value+ isn't between 1 and 31.
84
42
  def day= (value)
85
43
  raise ArgumentError, "date/time out of range" unless (1..31).include? value
86
44
  @day = value
87
45
  end
88
46
 
47
+ # Set +value+ as the new date/time component.
48
+ #
49
+ # Raises an ArgumentError if the given +value+ isn't between 0 and 24.
89
50
  def hour= (value)
90
51
  raise ArgumentError, "date/time out of range" unless (0..24).include? value
91
52
  @hour = value
92
53
  end
93
54
 
55
+ # Set +value+ as the new date/time component.
56
+ #
57
+ # Raises an ArgumentError if the given +value+ isn't between 0 and 59.
94
58
  def min= (value)
95
59
  raise ArgumentError, "date/time out of range" unless (0..59).include? value
96
60
  @min = value
97
61
  end
98
62
 
63
+ # Set +value+ as the new date/time component.
64
+ #
65
+ # Raises an ArgumentError if the given +value+ isn't between 0 and 59.
99
66
  def sec= (value)
100
67
  raise ArgumentError, "date/time out of range" unless (0..59).include? value
101
68
  @sec = value
102
69
  end
103
70
 
71
+ # Alias for XMLRPC::DateTime#month.
104
72
  alias mon month
105
- alias mon= month=
106
-
73
+ # Alias for XMLRPC::DateTime#month=.
74
+ alias mon= month=
75
+
107
76
 
77
+ # Creates a new XMLRPC::DateTime instance with the
78
+ # parameters +year+, +month+, +day+ as date and
79
+ # +hour+, +min+, +sec+ as time.
80
+ #
81
+ # Raises an ArgumentError if a parameter is out of range,
82
+ # or if +year+ is not of the Integer type.
108
83
  def initialize(year, month, day, hour, min, sec)
109
84
  self.year, self.month, self.day = year, month, day
110
85
  self.hour, self.min, self.sec = hour, min, sec
111
86
  end
112
-
87
+
88
+ # Return a Time object of the date/time which represents +self+.
89
+ # If the <code>@year</code> is below 1970, this method returns +nil+,
90
+ # because Time cannot handle years below 1970.
91
+ #
92
+ # The timezone used is GMT.
113
93
  def to_time
114
94
  if @year >= 1970
115
95
  Time.gm(*to_a)
@@ -118,16 +98,23 @@ class DateTime
118
98
  end
119
99
  end
120
100
 
101
+ # Return a Date object of the date which represents +self+.
102
+ #
103
+ # The Date object do _not_ contain the time component (only date).
121
104
  def to_date
122
105
  Date.new(*to_a[0,3])
123
106
  end
124
107
 
108
+ # Returns all date/time components in an array.
109
+ #
110
+ # Returns +[year, month, day, hour, min, sec]+.
125
111
  def to_a
126
112
  [@year, @month, @day, @hour, @min, @sec]
127
113
  end
128
114
 
115
+ # Returns whether or not all date/time components are an array.
129
116
  def ==(o)
130
- Array(self) == Array(o)
117
+ self.to_a == Array(o) rescue false
131
118
  end
132
119
 
133
120
  end
@@ -138,5 +125,5 @@ end # module XMLRPC
138
125
 
139
126
  =begin
140
127
  = History
141
- $Id: datetime.rb 11708 2007-02-12 23:01:19Z shyouhei $
128
+ $Id$
142
129
  =end