diff options
Diffstat (limited to 'actionpack')
-rwxr-xr-x | actionpack/lib/action_controller/cgi_ext/cgi_methods.rb | 6 | ||||
-rw-r--r-- | actionpack/lib/action_controller/vendor/xml_node.rb | 97 | ||||
-rw-r--r-- | actionpack/test/controller/webservice_test.rb | 60 |
3 files changed, 4 insertions, 159 deletions
diff --git a/actionpack/lib/action_controller/cgi_ext/cgi_methods.rb b/actionpack/lib/action_controller/cgi_ext/cgi_methods.rb index b06966729a..abf70cc76a 100755 --- a/actionpack/lib/action_controller/cgi_ext/cgi_methods.rb +++ b/actionpack/lib/action_controller/cgi_ext/cgi_methods.rb @@ -1,5 +1,4 @@ require 'cgi' -require 'action_controller/vendor/xml_node' require 'strscan' # Static methods for parsing the query and request parameters that can be used in @@ -49,13 +48,10 @@ class CGIMethods #:nodoc: case strategy = ActionController::Base.param_parsers[mime_type] when Proc strategy.call(raw_post_data) - when :xml_simple + when :xml_simple, :xml_node raw_post_data.blank? ? {} : Hash.from_xml(raw_post_data) when :yaml YAML.load(raw_post_data) - when :xml_node - node = XmlNode.from_xml(raw_post_data) - { node.node_name => node } end rescue Exception => e # YAML, XML or Ruby code block errors { "exception" => "#{e.message} (#{e.class})", "backtrace" => e.backtrace, diff --git a/actionpack/lib/action_controller/vendor/xml_node.rb b/actionpack/lib/action_controller/vendor/xml_node.rb deleted file mode 100644 index d07bef142a..0000000000 --- a/actionpack/lib/action_controller/vendor/xml_node.rb +++ /dev/null @@ -1,97 +0,0 @@ -require 'rexml/document' - -# SimpleXML like xml parser. Written by leon breet from the ruby on rails Mailing list -class XmlNode #:nodoc: - attr :node - - def initialize(node, options = {}) - @node = node - @children = {} - @raise_errors = options[:raise_errors] - end - - def self.from_xml(xml_or_io) - document = REXML::Document.new(xml_or_io) - if document.root - XmlNode.new(document.root) - else - XmlNode.new(document) - end - end - - def node_encoding - @node.encoding - end - - def node_name - @node.name - end - - def node_value - @node.text - end - - def node_value=(value) - @node.text = value - end - - def xpath(expr) - matches = nil - REXML::XPath.each(@node, expr) do |element| - matches ||= XmlNodeList.new - matches << (@children[element] ||= XmlNode.new(element)) - end - matches - end - - def method_missing(name, *args) - name = name.to_s - nodes = nil - @node.each_element(name) do |element| - nodes ||= XmlNodeList.new - nodes << (@children[element] ||= XmlNode.new(element)) - end - nodes - end - - def <<(node) - if node.is_a? REXML::Node - child = node - elsif node.respond_to? :node - child = node.node - end - @node.add_element child - @children[child] ||= XmlNode.new(child) - end - - def [](name) - @node.attributes[name.to_s] - end - - def []=(name, value) - @node.attributes[name.to_s] = value - end - - def to_s - @node.to_s - end - - def to_i - to_s.to_i - end -end - -class XmlNodeList < Array #:nodoc: - def [](i) - i.is_a?(String) ? super(0)[i] : super(i) - end - - def []=(i, value) - i.is_a?(String) ? self[0][i] = value : super(i, value) - end - - def method_missing(name, *args) - name = name.to_s - self[0].__send__(name, *args) - end -end
\ No newline at end of file diff --git a/actionpack/test/controller/webservice_test.rb b/actionpack/test/controller/webservice_test.rb index 2b50088bb4..4558d401b0 100644 --- a/actionpack/test/controller/webservice_test.rb +++ b/actionpack/test/controller/webservice_test.rb @@ -41,7 +41,7 @@ class WebServiceTest < Test::Unit::TestCase def setup @controller = TestController.new ActionController::Base.param_parsers.clear - ActionController::Base.param_parsers[Mime::XML] = :xml_node + ActionController::Base.param_parsers[Mime::XML] = :xml_simple end def test_check_parameters @@ -54,7 +54,7 @@ class WebServiceTest < Test::Unit::TestCase assert_equal 'entry', @controller.response.body assert @controller.params.has_key?(:entry) - assert_equal 'content...', @controller.params["entry"].summary.node_value + assert_equal 'content...', @controller.params["entry"]['summary'] assert_equal 'true', @controller.params["entry"]['attributed'] end @@ -63,7 +63,7 @@ class WebServiceTest < Test::Unit::TestCase assert_equal 'entry', @controller.response.body assert @controller.params.has_key?(:entry) - assert_equal 'content...', @controller.params["entry"].summary.node_value + assert_equal 'content...', @controller.params["entry"]['summary'] assert_equal 'true', @controller.params["entry"]['attributed'] end @@ -183,57 +183,3 @@ class WebServiceTest < Test::Unit::TestCase end end - - -class XmlNodeTest < Test::Unit::TestCase - def test_all - xn = XmlNode.from_xml(%{<?xml version="1.0" encoding="UTF-8"?> - <response success='true'> - <page title='Ajax Summit' id='1133' email_address='ry87ib@backpackit.com'> - <description>With O'Reilly and Adaptive Path</description> - <notes> - <note title='Hotel' id='1020' created_at='2005-05-14 16:41:11'> - Staying at the Savoy - </note> - </notes> - <tags> - <tag name='Technology' id='4' /> - <tag name='Travel' id='5' /> - </tags> - </page> - </response> - } - ) - assert_equal 'UTF-8', xn.node.document.encoding - assert_equal '1.0', xn.node.document.version - assert_equal 'true', xn['success'] - assert_equal 'response', xn.node_name - assert_equal 'Ajax Summit', xn.page['title'] - assert_equal '1133', xn.page['id'] - assert_equal "With O'Reilly and Adaptive Path", xn.page.description.node_value - assert_equal nil, xn.nonexistent - assert_equal "Staying at the Savoy", xn.page.notes.note.node_value.strip - assert_equal 'Technology', xn.page.tags.tag[0]['name'] - assert_equal 'Travel', xn.page.tags.tag[1][:name] - matches = xn.xpath('//@id').map{ |id| id.to_i } - assert_equal [4, 5, 1020, 1133], matches.sort - matches = xn.xpath('//tag').map{ |tag| tag['name'] } - assert_equal ['Technology', 'Travel'], matches.sort - assert_equal "Ajax Summit", xn.page['title'] - xn.page['title'] = 'Ajax Summit V2' - assert_equal "Ajax Summit V2", xn.page['title'] - assert_equal "Staying at the Savoy", xn.page.notes.note.node_value.strip - xn.page.notes.note.node_value = "Staying at the Ritz" - assert_equal "Staying at the Ritz", xn.page.notes.note.node_value.strip - assert_equal '5', xn.page.tags.tag[1][:id] - xn.page.tags.tag[1]['id'] = '7' - assert_equal '7', xn.page.tags.tag[1]['id'] - end - - - def test_small_entry - node = XmlNode.from_xml('<entry>hi</entry>') - assert_equal 'hi', node.node_value - end - -end |