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

XmlMini.rename_key emits valid xml with dasherize

This resolves issues for libraries which use '_' prefixed keys in their
attributes hash, such as Mongoid. A key like "_id" or "_type" will no
longer be converted to "<-id>" and "<-type>".

Signed-off-by: wycats <wycats@gmail.com>
This commit is contained in:
Bernerd Schaefer 2010-07-17 16:45:19 -05:00 committed by wycats
parent 4ea1753fc2
commit e87e3db200
2 changed files with 54 additions and 1 deletions

View file

@ -129,12 +129,16 @@ module ActiveSupport
camelize = options.has_key?(:camelize) && options[:camelize]
dasherize = !options.has_key?(:dasherize) || options[:dasherize]
key = key.camelize if camelize
key = key.dasherize if dasherize
key = _dasherize(key) if dasherize
key
end
protected
def _dasherize(key)
key.gsub(/(?!^[_]*)_(?![_]*$)/, '-')
end
# TODO: Add support for other encodings
def _parse_binary(bin, entity) #:nodoc:
case entity['encoding']

View file

@ -0,0 +1,49 @@
require 'abstract_unit'
require 'active_support/xml_mini'
class XmlMiniTest < Test::Unit::TestCase
def test_rename_key_dasherizes_by_default
assert_equal "my-key", ActiveSupport::XmlMini.rename_key("my_key")
end
def test_rename_key_does_nothing_with_dasherize_true
assert_equal "my-key", ActiveSupport::XmlMini.rename_key("my_key", :dasherize => true)
end
def test_rename_key_does_nothing_with_dasherize_false
assert_equal "my_key", ActiveSupport::XmlMini.rename_key("my_key", :dasherize => false)
end
def test_rename_key_camelizes_with_camelize_true
assert_equal "MyKey", ActiveSupport::XmlMini.rename_key("my_key", :camelize => true)
end
def test_rename_key_camelizes_with_camelize_true
assert_equal "MyKey", ActiveSupport::XmlMini.rename_key("my_key", :camelize => true)
end
def test_rename_key_does_not_dasherize_leading_underscores
assert_equal "_id", ActiveSupport::XmlMini.rename_key("_id")
end
def test_rename_key_with_leading_underscore_dasherizes_interior_underscores
assert_equal "_my-key", ActiveSupport::XmlMini.rename_key("_my_key")
end
def test_rename_key_does_not_dasherize_trailing_underscores
assert_equal "id_", ActiveSupport::XmlMini.rename_key("id_")
end
def test_rename_key_with_trailing_underscore_dasherizes_interior_underscores
assert_equal "my-key_", ActiveSupport::XmlMini.rename_key("my_key_")
end
def test_rename_key_does_not_dasherize_multiple_leading_underscores
assert_equal "__id", ActiveSupport::XmlMini.rename_key("__id")
end
def test_rename_key_does_not_dasherize_multiple_leading_underscores
assert_equal "id__", ActiveSupport::XmlMini.rename_key("id__")
end
end