summaryrefslogtreecommitdiff
path: root/ruby_1_9_3/lib/yaml.rb
diff options
context:
space:
mode:
Diffstat (limited to 'ruby_1_9_3/lib/yaml.rb')
-rw-r--r--ruby_1_9_3/lib/yaml.rb76
1 files changed, 76 insertions, 0 deletions
diff --git a/ruby_1_9_3/lib/yaml.rb b/ruby_1_9_3/lib/yaml.rb
new file mode 100644
index 0000000000..ff9e1a6344
--- /dev/null
+++ b/ruby_1_9_3/lib/yaml.rb
@@ -0,0 +1,76 @@
+##
+# The YAML module allows you to use one of the two YAML engines that ship with
+# ruby. By default Psych is used but the old and unmaintained Syck may be
+# chosen.
+#
+# See Psych or Syck for usage and documentation.
+#
+# To set the YAML engine to syck:
+#
+# YAML::ENGINE.yamler = 'syck'
+#
+# To set the YAML engine back to psych:
+#
+# YAML::ENGINE.yamler = 'psych'
+
+module YAML
+ class EngineManager # :nodoc:
+ attr_reader :yamler
+
+ def initialize
+ @yamler = nil
+ end
+
+ def syck?
+ 'syck' == @yamler
+ end
+
+ def yamler= engine
+ raise(ArgumentError, "bad engine") unless %w{syck psych}.include?(engine)
+
+ require engine unless (engine == 'syck' ? Syck : Psych).const_defined?(:VERSION)
+
+ Object.class_eval <<-eorb, __FILE__, __LINE__ + 1
+ remove_const 'YAML'
+ YAML = #{engine.capitalize}
+ remove_method :to_yaml
+ alias :to_yaml :#{engine}_to_yaml
+ eorb
+
+ @yamler = engine
+ engine
+ end
+ end
+
+ ##
+ # Allows changing the current YAML engine. See YAML for details.
+
+ ENGINE = YAML::EngineManager.new
+end
+
+if defined?(Psych)
+ engine = 'psych'
+elsif defined?(Syck)
+ engine = 'syck'
+else
+ begin
+ require 'psych'
+ engine = 'psych'
+ rescue LoadError
+ warn "#{caller[0]}:"
+ warn "It seems your ruby installation is missing psych (for YAML output)."
+ warn "To eliminate this warning, please install libyaml and reinstall your ruby."
+ require 'syck'
+ engine = 'syck'
+ end
+end
+
+module Syck
+ ENGINE = YAML::ENGINE
+end
+
+module Psych
+ ENGINE = YAML::ENGINE
+end
+
+YAML::ENGINE.yamler = engine