1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

rexml: REXML::Element#[] accepts String or Symbol as attribute name

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57003 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
kou 2016-12-06 13:57:56 +00:00
parent d71b5394ac
commit b23eac6958
3 changed files with 48 additions and 0 deletions

6
NEWS
View file

@ -251,6 +251,12 @@ with all sufficient information, see the ChangeLog file or Redmine
* Readline.quoting_detection_proc and Readline.quoting_detection_proc= * Readline.quoting_detection_proc and Readline.quoting_detection_proc=
[Feature #12659] [Feature #12659]
* REXML
* REXML::Element#[]: If String or Symbol is specified, attribute
value is returned. Otherwise, Nth child is returned. This is
backward compatible change.
* set * set
* New methods: Set#compare_by_identity and Set#compare_by_identity?. * New methods: Set#compare_by_identity and Set#compare_by_identity?.

View file

@ -551,6 +551,30 @@ module REXML
# Attributes # # Attributes #
################################################# #################################################
# Fetches an attribute value or a child.
#
# If String or Symbol is specified, it's treated as attribute
# name. Attribute value as String or +nil+ is returned. This case
# is shortcut of +attributes[name]+.
#
# If Integer is specified, it's treated as the index of
# child. It returns Nth child.
#
# doc = REXML::Document.new("<a attr='1'><b/><c/></a>")
# doc.root["attr"] # => "1"
# doc.root.attributes["attr"] # => "1"
# doc.root[1] # => <c/>
def [](name_or_index)
case name_or_index
when String
attributes[name_or_index]
when Symbol
attributes[name_or_index.to_s]
else
super
end
end
def attribute( name, namespace=nil ) def attribute( name, namespace=nil )
prefix = nil prefix = nil
if namespaces.respond_to? :key if namespaces.respond_to? :key

View file

@ -0,0 +1,18 @@
# frozen_string_literal: false
require "test/unit/testcase"
require "rexml/document"
module REXMLTests
class ElementTester < Test::Unit::TestCase
def test_array_reference_string
doc = REXML::Document.new("<language name='Ruby'/>")
assert_equal("Ruby", doc.root["name"])
end
def test_array_reference_symbol
doc = REXML::Document.new("<language name='Ruby'/>")
assert_equal("Ruby", doc.root[:name])
end
end
end