summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--ext/psych/lib/psych/visitors/yaml_tree.rb15
-rw-r--r--test/psych/test_psych.rb20
3 files changed, 41 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 0901df6c46..dce4d8c985 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Thu Jul 8 08:16:57 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb (push): adding version
+ and header emit options.
+
+ * test/psych/test_psych.rb: corresponding test.
+
Thu Jul 8 08:01:03 2010 Aaron Patterson <aaron@tenderlovemaking.com>
* ext/psych/emitter.c: updating documentation about emit options
diff --git a/ext/psych/lib/psych/visitors/yaml_tree.rb b/ext/psych/lib/psych/visitors/yaml_tree.rb
index 5f757e9e1b..8a12086458 100644
--- a/ext/psych/lib/psych/visitors/yaml_tree.rb
+++ b/ext/psych/lib/psych/visitors/yaml_tree.rb
@@ -13,6 +13,7 @@ module Psych
@emitter = emitter
@st = {}
@ss = ScalarScanner.new
+ @options = options
@dispatch_cache = Hash.new do |h,klass|
method = "visit_#{(klass.name || '').split('::').join('_')}"
@@ -43,7 +44,19 @@ module Psych
def push object
start unless started?
- @emitter.start_document [], [], false
+ version = []
+ version = [1,1] if @options[:header]
+
+ case @options[:version]
+ when Array
+ version = @options[:version]
+ when String
+ version = @options[:version].split('.').map { |x| x.to_i }
+ else
+ version = [1,1]
+ end if @options[:version]
+
+ @emitter.start_document version, [], false
accept object
@emitter.end_document
end
diff --git a/test/psych/test_psych.rb b/test/psych/test_psych.rb
index f3f3a531b3..42b30a0c97 100644
--- a/test/psych/test_psych.rb
+++ b/test/psych/test_psych.rb
@@ -18,6 +18,26 @@ class TestPsych < Psych::TestCase
assert_match(/\? ! "b/, yml)
end
+ def test_header
+ yml = Psych.dump({:a => {'b' => 'c'}}, {:header => true})
+ assert_match(/YAML/, yml)
+ end
+
+ def test_version_array
+ yml = Psych.dump({:a => {'b' => 'c'}}, {:version => [1,1]})
+ assert_match(/1.1/, yml)
+ end
+
+ def test_version_string
+ yml = Psych.dump({:a => {'b' => 'c'}}, {:version => '1.1'})
+ assert_match(/1.1/, yml)
+ end
+
+ def test_version_bool
+ yml = Psych.dump({:a => {'b' => 'c'}}, {:version => true})
+ assert_match(/1.1/, yml)
+ end
+
def test_load_argument_error
assert_raises(TypeError) do
Psych.load nil