Class: RightAws::RightAWSParser
- Inherits:
-
Object
- Object
- RightAws::RightAWSParser
- Defined in:
- lib/awsbase/right_awsbase.rb
Overview
:nodoc:
Direct Known Subclasses
AcfInterface::AcfDistributionListParser, AcfInterface::AcfInvalidationsListParser, AcfInterface::AcfOriginAccesIdentitiesListParser, AcwInterface::GetMetricStatisticsParser, AcwInterface::ListMetricsParser, AsInterface::DescribeAutoScalingGroupsParser, AsInterface::DescribeLaunchConfigurationsParser, AsInterface::DescribeScalingActivitiesParser, AsInterface::DescribeTriggersParser, Ec2::QEc2AllocateAddressParser, Ec2::QEc2AssociateAddressParser, Ec2::QEc2AttachAndDetachVolumeParser, Ec2::QEc2AttachVpnGatewayParser, Ec2::QEc2BundleInstanceParser, Ec2::QEc2CancelSpotInstanceParser, Ec2::QEc2ConfirmProductInstanceParser, Ec2::QEc2CreateKeyPairParser, Ec2::QEc2CreateSecurityGroupsParser, Ec2::QEc2CreateVolumeParser, Ec2::QEc2DescribeAddressesParser, Ec2::QEc2DescribeAvailabilityZonesParser, Ec2::QEc2DescribeBundleTasksParser, Ec2::QEc2DescribeCustomerGatewaysParser, Ec2::QEc2DescribeDhcpOptionsParser, Ec2::QEc2DescribeImageAttributeParser, Ec2::QEc2DescribeImagesParser, Ec2::QEc2DescribeInstanceAttributeParser, Ec2::QEc2DescribeInstancesParser, Ec2::QEc2DescribeInternetGatewaysParser, Ec2::QEc2DescribeKeyPairParser, Ec2::QEc2DescribeLicensesParser, Ec2::QEc2DescribePlacementGroupsParser, Ec2::QEc2DescribeRegionsParser, Ec2::QEc2DescribeReservedInstancesOfferingsParser, Ec2::QEc2DescribeReservedInstancesParser, Ec2::QEc2DescribeRouteTablesParser, Ec2::QEc2DescribeSecurityGroupsParser, Ec2::QEc2DescribeSnapshotAttributeParser, Ec2::QEc2DescribeSnapshotsParser, Ec2::QEc2DescribeSpotDatafeedSubscriptionParser, Ec2::QEc2DescribeSpotInstanceParser, Ec2::QEc2DescribeSpotPriceHistoryParser, Ec2::QEc2DescribeSubnetsParser, Ec2::QEc2DescribeTagsParser, Ec2::QEc2DescribeVolumesParser, Ec2::QEc2DescribeVpcsParser, Ec2::QEc2DescribeVpnConnectionsParser, Ec2::QEc2DescribeVpnGatewaysParser, Ec2::QEc2GetConsoleOutputParser, Ec2::QEc2GetPasswordDataParser, Ec2::QEc2ImportKeyPairParser, Ec2::QEc2MonitorInstancesParser, Ec2::QEc2PurchaseReservedInstancesOfferingParser, Ec2::QEc2RegisterImageParser, Ec2::QEc2TerminateInstancesParser, ElbInterface::AvailabilityZonesForLoadBalancerParser, ElbInterface::CreateLoadBalancerParser, ElbInterface::DeleteLoadBalancerParser, ElbInterface::DescribeInstanceHealthParser, ElbInterface::DescribeLoadBalancersParser, ElbInterface::HealthCheckParser, ElbInterface::InstancesWithLoadBalancerParser, EmrInterface::AddInstanceGroupsParser, EmrInterface::DescribeJobFlowsParser, EmrInterface::RunJobFlowParser, IamInterface::BasicIamListParser, IamInterface::BasicIamParser, IamInterface::GetGroupParser, RightAws::RdsInterface::DescribeDBEngineVersionsParser, RightAws::RdsInterface::DescribeDbInstancesParser, RightAws::RdsInterface::DescribeDbParameterGroupsParser, RightAws::RdsInterface::DescribeDbParametersParser, RightAws::RdsInterface::DescribeDbSecurityGroupsParser, RightAws::RdsInterface::DescribeDbSnapshotsParser, RightAws::RdsInterface::DescribeEventsParser, RightAws::RdsInterface::DescribeOrderableDBInstanceOptionsParser, RightAws::RdsInterface::DescribeReservedDBInstancesOfferingsParser, RightAws::RdsInterface::DescribeReservedDBInstancesParser, RightBoolResponseParser, RightErrorResponseParser, RightHttp2xxParser, RightAws::Route53Interface::GetChangeParser, RightAws::Route53Interface::GetHostedZoneParser, RightAws::Route53Interface::ListHostedZonesParser, RightAws::Route53Interface::ListResourceRecordSetsParser, S3Interface::S3AclParser, S3Interface::S3BucketLocationParser, S3Interface::S3CopyParser, S3Interface::S3ImprovedListBucketParser, S3Interface::S3ListAllMyBucketsParser, S3Interface::S3ListBucketParser, S3Interface::S3LoggingParser, SdbInterface::QSdbGenericParser, SdbInterface::QSdbGetAttributesParser, SdbInterface::QSdbListDomainParser, SdbInterface::QSdbQueryParser, SdbInterface::QSdbQueryWithAttributesParser, SdbInterface::QSdbSelectParser, SdbInterface::QSdbSimpleParser, SnsInterface::SnsConfirmSubscriptionParser, SnsInterface::SnsCreateTopicParser, SnsInterface::SnsGetTopicAttributesParser, SnsInterface::SnsListSubscriptionsParser, SnsInterface::SnsListTopicsParser, SnsInterface::SnsPublishParser, SnsInterface::SnsSubscribeParser, 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
-
#full_tag_name ⇒ Object
readonly
Returns the value of attribute full_tag_name.
-
#result ⇒ Object
Returns the value of attribute result.
-
#tag ⇒ Object
readonly
Returns the value of attribute tag.
-
#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.
1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 |
# File 'lib/awsbase/right_awsbase.rb', line 1197 def initialize(params={}) @xmlpath = '' @full_tag_name = '' @result = false @text = '' @tag = '' @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
1281 1282 1283 1284 1285 1286 1287 1288 |
# File 'lib/awsbase/right_awsbase.rb', line 1281 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
#full_tag_name ⇒ Object (readonly)
Returns the value of attribute full_tag_name.
1194 1195 1196 |
# File 'lib/awsbase/right_awsbase.rb', line 1194 def full_tag_name @full_tag_name end |
#result ⇒ Object
Returns the value of attribute result.
1191 1192 1193 |
# File 'lib/awsbase/right_awsbase.rb', line 1191 def result @result end |
#tag ⇒ Object (readonly)
Returns the value of attribute tag.
1195 1196 1197 |
# File 'lib/awsbase/right_awsbase.rb', line 1195 def tag @tag end |
#xml_lib ⇒ Object
Returns the value of attribute xml_lib.
1193 1194 1195 |
# File 'lib/awsbase/right_awsbase.rb', line 1193 def xml_lib @xml_lib end |
#xmlpath ⇒ Object (readonly)
Returns the value of attribute xmlpath.
1192 1193 1194 |
# File 'lib/awsbase/right_awsbase.rb', line 1192 def xmlpath @xmlpath end |
Class Method Details
.xml_lib ⇒ Object
1184 1185 1186 |
# File 'lib/awsbase/right_awsbase.rb', line 1184 def self.xml_lib @@xml_lib end |
.xml_lib=(new_lib_name) ⇒ Object
1187 1188 1189 |
# File 'lib/awsbase/right_awsbase.rb', line 1187 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'
1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 |
# File 'lib/awsbase/right_awsbase.rb', line 1227 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' # Setup SaxParserCallback if XML::Parser::VERSION >= '0.5.1' && XML::Parser::VERSION < '0.9.7' 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' if XML::Parser::VERSION >= '0.9.9' # avoid warning on every usage xml = XML::SaxParser.string(xml_text) else xml = XML::SaxParser.new xml.string = xml_text end # check libxml-ruby version if XML::Parser::VERSION >= '0.9.7' xml.callbacks = RightSaxParserCallbackNs.new(self) elsif XML::Parser::VERSION >= '0.5.1' 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)
1290 |
# File 'lib/awsbase/right_awsbase.rb', line 1290 def reset ; end |
#tag_end(name) ⇒ Object
1214 1215 1216 1217 1218 |
# File 'lib/awsbase/right_awsbase.rb', line 1214 def tag_end(name) @xmlpath = @full_tag_name[/^(.*?)\/?#{name}$/] && $1 tagend(name) @full_tag_name = @xmlpath end |
#tag_start(name, attributes) ⇒ Object
1207 1208 1209 1210 1211 1212 1213 |
# File 'lib/awsbase/right_awsbase.rb', line 1207 def tag_start(name, attributes) @text = '' @tag = name @full_tag_name += @full_tag_name.empty? ? name : "/#{name}" (name, attributes) @xmlpath = @full_tag_name end |
#tagend(name) ⇒ Object
1292 |
# File 'lib/awsbase/right_awsbase.rb', line 1292 def tagend(name) ; end |
#tagstart(name, attributes) ⇒ Object
1291 |
# File 'lib/awsbase/right_awsbase.rb', line 1291 def (name, attributes); end |
#tagtext(text) ⇒ Object
1293 |
# File 'lib/awsbase/right_awsbase.rb', line 1293 def tagtext(text) ; end |
#text(text) ⇒ Object
1219 1220 1221 1222 |
# File 'lib/awsbase/right_awsbase.rb', line 1219 def text(text) @text += text tagtext(text) end |