aboutsummaryrefslogtreecommitdiffstats
path: root/actionwebservice/lib/action_web_service/casting.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionwebservice/lib/action_web_service/casting.rb')
-rw-r--r--actionwebservice/lib/action_web_service/casting.rb8
1 files changed, 8 insertions, 0 deletions
diff --git a/actionwebservice/lib/action_web_service/casting.rb b/actionwebservice/lib/action_web_service/casting.rb
index c9982f13a0..3c0afbe9f9 100644
--- a/actionwebservice/lib/action_web_service/casting.rb
+++ b/actionwebservice/lib/action_web_service/casting.rb
@@ -1,5 +1,6 @@
require 'time'
require 'date'
+require 'xmlrpc/datetime'
module ActionWebService # :nodoc:
module Casting # :nodoc:
@@ -58,6 +59,13 @@ module ActionWebService # :nodoc:
end
def cast_base_type(value, signature_type) # :nodoc:
+ # This is a work-around for the fact that XML-RPC special-cases DateTime values into its own DateTime type
+ # in order to support iso8601 dates. This doesn't work too well for us, so we'll convert it into a Time,
+ # with the caveat that we won't be able to handle pre-1970 dates that are sent to us.
+ #
+ # See http://dev.rubyonrails.com/ticket/2516
+ value = value.to_time if value.is_a?(XMLRPC::DateTime)
+
case signature_type.type
when :int
Integer(value)