Class: RightAws::RightAWSParser
Overview
:nodoc:
Direct Known Subclasses
Ec2::QEc2ConfirmProductInstanceParser, Ec2::QEc2CreateKeyPairParser, Ec2::QEc2DescribeImageAttributeParser, Ec2::QEc2DescribeImagesParser, Ec2::QEc2DescribeInstancesParser, Ec2::QEc2DescribeKeyPairParser, Ec2::QEc2DescribeSecurityGroupsParser, Ec2::QEc2GetConsoleOutputParser, Ec2::QEc2RegisterImageParser, Ec2::QEc2RunInstancesParser, Ec2::QEc2TerminateInstancesParser, Ec2::RightBoolResponseParser, RightErrorResponseParser, S3Interface::S3AclParser, S3Interface::S3BucketLocationParser, S3Interface::S3ImprovedListBucketParser, S3Interface::S3ListAllMyBucketsParser, S3Interface::S3ListBucketParser, SqsGen2Interface::SqsCreateQueueParser, SqsGen2Interface::SqsGetQueueAttributesParser, SqsGen2Interface::SqsListQueuesParser, SqsGen2Interface::SqsReceiveMessageParser, SqsGen2Interface::SqsSendMessagesParser, SqsGen2Interface::SqsStatusParser, SqsInterface::SqsCreateQueueParser, SqsInterface::SqsGetQueueAttributesParser, SqsInterface::SqsGetVisibilityTimeoutParser, SqsInterface::SqsListGrantsParser, SqsInterface::SqsListQueuesParser, SqsInterface::SqsReceiveMessagesParser, 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 = {}) ⇒ RightAWSParser
constructor
A new instance of RightAWSParser.
-
#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 RightAWSParser 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 = {}) ⇒ RightAWSParser
Returns a new instance of RightAWSParser.
521 522 523 524 525 526 527 528 |
# File 'lib/awsbase/right_awsbase.rb', line 521 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 RightAWSParser and method_missing helps us to skip their definition
593 594 595 596 597 598 599 600 |
# File 'lib/awsbase/right_awsbase.rb', line 593 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.
517 518 519 |
# File 'lib/awsbase/right_awsbase.rb', line 517 def result @result end |
#xml_lib ⇒ Object
Returns the value of attribute xml_lib.
519 520 521 |
# File 'lib/awsbase/right_awsbase.rb', line 519 def xml_lib @xml_lib end |
#xmlpath ⇒ Object (readonly)
Returns the value of attribute xmlpath.
518 519 520 |
# File 'lib/awsbase/right_awsbase.rb', line 518 def xmlpath @xmlpath end |
Class Method Details
.xml_lib ⇒ Object
510 511 512 |
# File 'lib/awsbase/right_awsbase.rb', line 510 def self.xml_lib @@xml_lib end |
.xml_lib=(new_lib_name) ⇒ Object
513 514 515 |
# File 'lib/awsbase/right_awsbase.rb', line 513 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'
547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 |
# File 'lib/awsbase/right_awsbase.rb', line 547 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' RightSaxParserCallback.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 = RightSaxParserCallback.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)
602 |
# File 'lib/awsbase/right_awsbase.rb', line 602 def reset ; end |
#tag_end(name) ⇒ Object
534 535 536 537 538 |
# File 'lib/awsbase/right_awsbase.rb', line 534 def tag_end(name) @xmlpath[/^(.*?)\/?#{name}$/] @xmlpath = $1 tagend(name) end |
#tag_start(name, attributes) ⇒ Object
529 530 531 532 533 |
# File 'lib/awsbase/right_awsbase.rb', line 529 def tag_start(name, attributes) @text = '' (name, attributes) @xmlpath += @xmlpath.empty? ? name : "/#{name}" end |
#tagend(name) ⇒ Object
604 |
# File 'lib/awsbase/right_awsbase.rb', line 604 def tagend(name) ; end |
#tagstart(name, attributes) ⇒ Object
603 |
# File 'lib/awsbase/right_awsbase.rb', line 603 def (name, attributes); end |
#tagtext(text) ⇒ Object
605 |
# File 'lib/awsbase/right_awsbase.rb', line 605 def tagtext(text) ; end |
#text(text) ⇒ Object
539 540 541 542 |
# File 'lib/awsbase/right_awsbase.rb', line 539 def text(text) @text = text tagtext(text) end |