Class: Aws::AwsParser
Overview
:nodoc:
Direct Known Subclasses
ErrorResponseParser, Http2xxParser, SqsInterface::SqsCreateQueueParser, SqsInterface::SqsGetQueueAttributesParser, SqsInterface::SqsListQueuesParser, SqsInterface::SqsReceiveMessageParser, SqsInterface::SqsSendMessagesParser, SqsInterface::SqsStatusParser
Constant Summary collapse
- DEFAULT_XML_LIBRARY =
default parsing library
'rexml'- @@supported_xml_libs =
a list of supported parsers
[DEFAULT_XML_LIBRARY, 'libxml']
- @@xml_lib =
xml library name: ‘rexml’ | ‘libxml’
DEFAULT_XML_LIBRARY
Instance Attribute Summary collapse
-
#result ⇒ Object
Returns the value of attribute result.
-
#xml_lib ⇒ Object
Returns the value of attribute xml_lib.
-
#xmlpath ⇒ Object
readonly
Returns the value of attribute xmlpath.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(params = {}) ⇒ AwsParser
constructor
A new instance of AwsParser.
-
#method_missing(method, *params) ⇒ Object
Parser must have a lots of methods (see /usr/lib/ruby/1.8/rexml/parsers/streamparser.rb) We dont need most of them in AwsParser and method_missing helps us to skip their definition.
-
#parse(xml_text, params = {}) ⇒ Object
Parser method.
-
#reset ⇒ Object
the functions to be overriden by children (if nessesery).
- #tag_end(name) ⇒ Object
- #tag_start(name, attributes) ⇒ Object
- #tagend(name) ⇒ Object
- #tagstart(name, attributes) ⇒ Object
- #tagtext(text) ⇒ Object
- #text(text) ⇒ Object
Constructor Details
#initialize(params = {}) ⇒ AwsParser
Returns a new instance of AwsParser.
641 642 643 644 645 646 647 648 |
# File 'lib/awsbase/awsbase.rb', line 641 def initialize(params={}) @xmlpath = '' @result = false @text = '' @xml_lib = params[:xml_lib] || @@xml_lib @logger = params[:logger] reset end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *params) ⇒ Object
Parser must have a lots of methods (see /usr/lib/ruby/1.8/rexml/parsers/streamparser.rb) We dont need most of them in AwsParser and method_missing helps us to skip their definition
714 715 716 717 718 719 720 721 |
# File 'lib/awsbase/awsbase.rb', line 714 def method_missing(method, *params) # if the method is one of known - just skip it ... return if [:comment, :attlistdecl, :notationdecl, :elementdecl, :entitydecl, :cdata, :xmldecl, :attlistdecl, :instruction, :doctype].include?(method) # ... else - call super to raise an exception super(method, params) end |
Instance Attribute Details
#result ⇒ Object
Returns the value of attribute result.
637 638 639 |
# File 'lib/awsbase/awsbase.rb', line 637 def result @result end |
#xml_lib ⇒ Object
Returns the value of attribute xml_lib.
639 640 641 |
# File 'lib/awsbase/awsbase.rb', line 639 def xml_lib @xml_lib end |
#xmlpath ⇒ Object (readonly)
Returns the value of attribute xmlpath.
638 639 640 |
# File 'lib/awsbase/awsbase.rb', line 638 def xmlpath @xmlpath end |
Class Method Details
.xml_lib ⇒ Object
630 631 632 |
# File 'lib/awsbase/awsbase.rb', line 630 def self.xml_lib @@xml_lib end |
.xml_lib=(new_lib_name) ⇒ Object
633 634 635 |
# File 'lib/awsbase/awsbase.rb', line 633 def self.xml_lib=(new_lib_name) @@xml_lib = new_lib_name end |
Instance Method Details
#parse(xml_text, params = {}) ⇒ Object
Parser method. Params:
xml_text - xml message text(String) or Net:HTTPxxx instance (response)
params[:xml_lib] - library name: 'rexml' | 'libxml'
668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 |
# File 'lib/awsbase/awsbase.rb', line 668 def parse(xml_text, params={}) # Get response body xml_text = xml_text.body unless xml_text.is_a?(String) @xml_lib = params[:xml_lib] || @xml_lib # check that we had no problems with this library otherwise use default @xml_lib = DEFAULT_XML_LIBRARY unless @@supported_xml_libs.include?(@xml_lib) # load xml library if @xml_lib=='libxml' && !defined?(XML::SaxParser) begin require 'xml/libxml' # is it new ? - Setup SaxParserCallback if XML::Parser::VERSION >= '0.5.1.0' SaxParserCallback.include_callback end rescue LoadError => e @@supported_xml_libs.delete(@xml_lib) @xml_lib = DEFAULT_XML_LIBRARY if @logger @logger.error e.inspect @logger.error e.backtrace @logger.info "Can not load 'libxml' library. '#{DEFAULT_XML_LIBRARY}' is used for parsing." end end end # Parse the xml text case @xml_lib when 'libxml' xml = XML::SaxParser.new xml.string = xml_text # check libxml-ruby version if XML::Parser::VERSION >= '0.5.1.0' xml.callbacks = SaxParserCallback.new(self) else xml.on_start_element{|name, attr_hash| self.tag_start(name, attr_hash)} xml.on_characters{ |text| self.text(text)} xml.on_end_element{ |name| self.tag_end(name)} end xml.parse else REXML::Document.parse_stream(xml_text, self) end end |
#reset ⇒ Object
the functions to be overriden by children (if nessesery)
723 |
# File 'lib/awsbase/awsbase.rb', line 723 def reset ; end |
#tag_end(name) ⇒ Object
654 655 656 657 658 659 |
# File 'lib/awsbase/awsbase.rb', line 654 def tag_end(name) if @xmlpath =~ /^(.*?)\/?#{name}$/ @xmlpath = $1 end tagend(name) end |
#tag_start(name, attributes) ⇒ Object
649 650 651 652 653 |
# File 'lib/awsbase/awsbase.rb', line 649 def tag_start(name, attributes) @text = '' (name, attributes) @xmlpath += @xmlpath.empty? ? name : "/#{name}" end |
#tagend(name) ⇒ Object
725 |
# File 'lib/awsbase/awsbase.rb', line 725 def tagend(name) ; end |
#tagstart(name, attributes) ⇒ Object
724 |
# File 'lib/awsbase/awsbase.rb', line 724 def (name, attributes); end |
#tagtext(text) ⇒ Object
726 |
# File 'lib/awsbase/awsbase.rb', line 726 def tagtext(text) ; end |
#text(text) ⇒ Object
660 661 662 663 |
# File 'lib/awsbase/awsbase.rb', line 660 def text(text) @text += text tagtext(text) end |