summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-04-24 20:35:20 +0000
committertenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-04-24 20:35:20 +0000
commit2d9c05441220ec5079925994b074380a78d50d8a (patch)
treeea7ef8ea7867ddbdfec787eba8a5c00e42ae3bf3
parentd69c502c9f855a0215319516c4b0f594b4eb0606 (diff)
* ext/psych/lib/psych/deprecated.rb: adding support for deprecated
"add_private_type" function * ext/psych/lib/psych.rb: ditto * ext/psych/lib/psych/visitors/to_ruby.rb: ditto * test/psych/test_deprecated.rb: ditto git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27480 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ext/psych/lib/psych.rb7
-rw-r--r--ext/psych/lib/psych/deprecated.rb14
-rw-r--r--ext/psych/lib/psych/visitors/to_ruby.rb2
-rw-r--r--test/psych/test_deprecated.rb10
4 files changed, 25 insertions, 8 deletions
diff --git a/ext/psych/lib/psych.rb b/ext/psych/lib/psych.rb
index a582f56eb1..59f9712fcd 100644
--- a/ext/psych/lib/psych.rb
+++ b/ext/psych/lib/psych.rb
@@ -218,13 +218,6 @@ module Psych
@domain_types[key] = [key, block]
end
- def self.add_ruby_type type_tag, &block
- warn "#{caller[0]}: add_ruby_type is deprecated, use add_domain_type" if $VERBOSE && !caller[0].start_with?(File.dirname(__FILE__))
- domain = 'ruby.yaml.org,2002'
- key = ['tag', domain, type_tag].join ':'
- @domain_types[key] = [key, block]
- end
-
def self.remove_type type_tag
@domain_types.delete type_tag
end
diff --git a/ext/psych/lib/psych/deprecated.rb b/ext/psych/lib/psych/deprecated.rb
index fdff46845d..b306b85bce 100644
--- a/ext/psych/lib/psych/deprecated.rb
+++ b/ext/psych/lib/psych/deprecated.rb
@@ -36,6 +36,20 @@ module Psych
return 'null' if '' == thing
ScalarScanner.new.tokenize(thing).class.name.downcase
end
+
+ def self.add_ruby_type type_tag, &block
+ warn "#{caller[0]}: add_ruby_type is deprecated, use add_domain_type" if $VERBOSE
+ domain = 'ruby.yaml.org,2002'
+ key = ['tag', domain, type_tag].join ':'
+ @domain_types[key] = [key, block]
+ end
+
+ def self.add_private_type type_tag, &block
+ warn "#{caller[0]}: add_private_type is deprecated, use add_domain_type" if $VERBOSE
+ domain = 'x-private'
+ key = [domain, type_tag].join ':'
+ @domain_types[key] = [key, block]
+ end
end
class Object
diff --git a/ext/psych/lib/psych/visitors/to_ruby.rb b/ext/psych/lib/psych/visitors/to_ruby.rb
index bbbe9a8366..e28ac7bf87 100644
--- a/ext/psych/lib/psych/visitors/to_ruby.rb
+++ b/ext/psych/lib/psych/visitors/to_ruby.rb
@@ -17,7 +17,7 @@ module Psych
return result if @domain_types.empty? || !target.tag
key = target.tag.sub(/^[!\/]*/, '').sub(/(,\d+)\//, '\1:')
- key = "tag:#{key}" unless key.start_with?('tag:')
+ key = "tag:#{key}" unless key =~ /^(tag:|x-private)/
if @domain_types.key? key
value, block = @domain_types[key]
diff --git a/test/psych/test_deprecated.rb b/test/psych/test_deprecated.rb
index f5ff79b56d..c2c8a972c3 100644
--- a/test/psych/test_deprecated.rb
+++ b/test/psych/test_deprecated.rb
@@ -171,5 +171,15 @@ module Psych
assert_equal 'null', Psych.detect_implicit('')
assert_equal 'string', Psych.detect_implicit('foo')
end
+
+ def test_private_type
+ types = []
+ Psych.add_private_type('foo') { |*args| types << args }
+ Psych.load <<-eoyml
+- !x-private:foo bar
+ eoyml
+
+ assert_equal [["x-private:foo", "bar"]], types
+ end
end
end