summaryrefslogtreecommitdiff
path: root/lib/xmlrpc/create.rb
diff options
context:
space:
mode:
-rw-r--r--lib/xmlrpc/create.rb176
1 files changed, 88 insertions, 88 deletions
@@ -15,11 +15,11 @@ module XMLRPC
class Abstract
def ele(name, *children)
- element(name, nil, *children)
end
def tag(name, txt)
- element(name, nil, text(txt))
end
end
@@ -27,19 +27,19 @@ module XMLRPC
class Simple < Abstract
def document_to_str(doc)
- doc
end
def document(*params)
- params.join("")
end
def pi(name, *params)
- "<?#{name} " + params.join(" ") + " ?>"
end
def element(name, attrs, *children)
- raise "attributes not yet implemented" unless attrs.nil?
if children.empty?
"<#{name}/>"
else
@@ -61,27 +61,27 @@ module XMLRPC
class XMLParser < Abstract
def initialize
- require "xmltreebuilder"
end
def document_to_str(doc)
- doc.to_s
end
def document(*params)
- XML::SimpleTree::Document.new(*params)
end
def pi(name, *params)
- XML::SimpleTree::ProcessingInstruction.new(name, *params)
end
def element(name, attrs, *children)
- XML::SimpleTree::Element.new(name, attrs, *children)
end
def text(txt)
- XML::SimpleTree::Text.new(txt)
end
end # class XMLParser
@@ -111,20 +111,20 @@ module XMLRPC
name = name.to_s
if name !~ /[a-zA-Z0-9_.:\/]+/
- raise ArgumentError, "Wrong XML-RPC method-name"
end
parameter = params.collect do |param|
- @writer.ele("param", conv2value(param))
end
tree = @writer.document(
- @writer.pi("xml", 'version="1.0"'),
- @writer.ele("methodCall",
- @writer.tag("methodName", name),
- @writer.ele("params", *parameter)
- )
- )
@writer.document_to_str(tree) + "\n"
end
@@ -144,23 +144,23 @@ module XMLRPC
def methodResponse(is_ret, *params)
if is_ret
- resp = params.collect do |param|
- @writer.ele("param", conv2value(param))
- end
- resp = [@writer.ele("params", *resp)]
else
- if params.size != 1 or params[0] === XMLRPC::FaultException
- raise ArgumentError, "no valid fault-structure given"
- end
- resp = @writer.ele("fault", conv2value(params[0].to_h))
end
-
tree = @writer.document(
- @writer.pi("xml", 'version="1.0"'),
- @writer.ele("methodResponse", resp)
- )
@writer.document_to_str(tree) + "\n"
end
@@ -177,11 +177,11 @@ module XMLRPC
#
def conv2value(param)
- val = case param
- when Fixnum
- @writer.tag("i4", param.to_s)
- when Bignum
if Config::ENABLE_BIGINT
@writer.tag("i4", param.to_s)
else
@@ -191,14 +191,14 @@ module XMLRPC
raise "Bignum is too big! Must be signed 32-bit integer!"
end
end
- when TrueClass, FalseClass
- @writer.tag("boolean", param ? "1" : "0")
- when Symbol
- @writer.tag("string", param.to_s)
- when String
- @writer.tag("string", param)
when NilClass
if Config::ENABLE_NIL_CREATE
@@ -207,51 +207,51 @@ module XMLRPC
raise "Wrong type NilClass. Not allowed!"
end
- when Float
- @writer.tag("double", param.to_s)
-
- when Struct
- h = param.members.collect do |key|
- value = param[key]
- @writer.ele("member",
- @writer.tag("name", key.to_s),
- conv2value(value)
- )
- end
-
- @writer.ele("struct", *h)
-
- when Hash
- # TODO: can a Hash be empty?
-
- h = param.collect do |key, value|
- @writer.ele("member",
- @writer.tag("name", key.to_s),
- conv2value(value)
- )
- end
-
- @writer.ele("struct", *h)
-
- when Array
- # TODO: can an Array be empty?
- a = param.collect {|v| conv2value(v) }
-
- @writer.ele("array",
- @writer.ele("data", *a)
- )
-
- when Time, Date, ::DateTime
- @writer.tag("dateTime.iso8601", param.strftime("%Y%m%dT%H:%M:%S"))
-
- when XMLRPC::DateTime
- @writer.tag("dateTime.iso8601",
- format("%.4d%02d%02dT%02d:%02d:%02d", *param.to_a))
- when XMLRPC::Base64
- @writer.tag("base64", param.encoded)
- else
if Config::ENABLE_MARSHALLING and param.class.included_modules.include? XMLRPC::Marshallable
# convert Ruby object into Hash
ret = {"___class___" => param.class.name}
@@ -274,9 +274,9 @@ module XMLRPC
raise "Wrong type!"
end
end
- end
-
- @writer.ele("value", val)
end
def wrong_type(value)