diff options
Diffstat (limited to 'ruby_1_9_3/lib/yaml.rb')
-rw-r--r-- | ruby_1_9_3/lib/yaml.rb | 76 |
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 |