Class: Aws::AwsParser
- Inherits:
-
Object
- Object
- Aws::AwsParser
- Defined in:
- lib/awsbase/parsers.rb
Overview
:nodoc:
Direct Known Subclasses
Aws::AcfInterface::AcfBaseDistributionParser, Aws::AcfInterface::AcfDistributionConfigParser, Ec2::QEc2AllocateAddressParser, Ec2::QEc2AttachAndDetachVolumeParser, Ec2::QEc2BundleInstanceParser, Ec2::QEc2ConfirmProductInstanceParser, Ec2::QEc2CreateImageParser, Ec2::QEc2CreateKeyPairParser, Ec2::QEc2CreateSnapshotParser, Ec2::QEc2CreateVolumeParser, Ec2::QEc2DescribeAddressesParser, Ec2::QEc2DescribeAvailabilityZonesParser, Ec2::QEc2DescribeBundleTasksParser, Ec2::QEc2DescribeImageAttributeParser, Ec2::QEc2DescribeImagesParser, Ec2::QEc2DescribeInstancesParser, Ec2::QEc2DescribeKeyPairParser, Ec2::QEc2DescribeRegionsParser, Ec2::QEc2DescribeSecurityGroupsParser, Ec2::QEc2DescribeSnapshotsParser, Ec2::QEc2DescribeTagsParser, Ec2::QEc2DescribeVolumesParser, Ec2::QEc2GetConsoleOutputParser, Ec2::QEc2MonitorInstancesParser, Ec2::QEc2RegisterImageParser, Ec2::QEc2StartInstancesParser, Ec2::QEc2StopInstancesParser, Ec2::QEc2TerminateInstancesParser, Ec2::RightBoolResponseParser, Elb::QElbCreateParser, Elb::QElbDeleteParser, Elb::QElbDescribeInstancesHealthParser, Elb::QElbDescribeLoadBalancersParser, Elb::QElbRegisterInstancesParser, Mon::QMonGetMetricStatistics, Mon::QMonListMetrics, RightErrorResponseParser, RightHttp2xxParser, S3Interface::S3AclParser, S3Interface::S3BucketLocationParser, S3Interface::S3CopyParser, S3Interface::S3ImprovedListBucketParser, S3Interface::S3ListAllMyBucketsParser, S3Interface::S3ListBucketParser, S3Interface::S3LoggingParser, SdbInterface::QSdbDomainMetadataParser, SdbInterface::QSdbGetAttributesParser, SdbInterface::QSdbListDomainParser, SdbInterface::QSdbQueryParser, SdbInterface::QSdbQueryWithAttributesParser, SdbInterface::QSdbSelectParser, SdbInterface::QSdbSimpleParser, 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.
64 65 66 67 68 69 70 71 |
# File 'lib/awsbase/parsers.rb', line 64 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
144 145 146 147 148 149 150 151 |
# File 'lib/awsbase/parsers.rb', line 144 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.
60 61 62 |
# File 'lib/awsbase/parsers.rb', line 60 def result @result end |
#xml_lib ⇒ Object
Returns the value of attribute xml_lib.
62 63 64 |
# File 'lib/awsbase/parsers.rb', line 62 def xml_lib @xml_lib end |
#xmlpath ⇒ Object (readonly)
Returns the value of attribute xmlpath.
61 62 63 |
# File 'lib/awsbase/parsers.rb', line 61 def xmlpath @xmlpath end |
Class Method Details
.xml_lib ⇒ Object
52 53 54 |
# File 'lib/awsbase/parsers.rb', line 52 def self.xml_lib @@xml_lib end |
.xml_lib=(new_lib_name) ⇒ Object
56 57 58 |
# File 'lib/awsbase/parsers.rb', line 56 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'
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/awsbase/parsers.rb', line 95 def parse(xml_text, params={}) # Get response body unless xml_text.is_a?(String) xml_text = xml_text.body.respond_to?(:force_encoding) ? xml_text.body.force_encoding("UTF-8") : xml_text.body end @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.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)
154 155 |
# File 'lib/awsbase/parsers.rb', line 154 def reset; end |
#tag_end(name) ⇒ Object
79 80 81 82 83 84 |
# File 'lib/awsbase/parsers.rb', line 79 def tag_end(name) if @xmlpath =~ /^(.*?)\/?#{name}$/ @xmlpath = $1 end tagend(name) end |
#tag_start(name, attributes) ⇒ Object
73 74 75 76 77 |
# File 'lib/awsbase/parsers.rb', line 73 def tag_start(name, attributes) @text = '' (name, attributes) @xmlpath += @xmlpath.empty? ? name : "/#{name}" end |
#tagend(name) ⇒ Object
161 162 163 |
# File 'lib/awsbase/parsers.rb', line 161 def tagend(name) ; end |
#tagstart(name, attributes) ⇒ Object
157 158 159 |
# File 'lib/awsbase/parsers.rb', line 157 def (name, attributes) ; end |
#tagtext(text) ⇒ Object
165 166 167 |
# File 'lib/awsbase/parsers.rb', line 165 def tagtext(text) ; end |
#text(text) ⇒ Object
86 87 88 89 |
# File 'lib/awsbase/parsers.rb', line 86 def text(text) @text += text tagtext(text) end |