From b2cf2a761e29311a5d33c6ff2761e97931667d33 Mon Sep 17 00:00:00 2001 From: elijah Date: Sat, 27 Oct 2012 15:05:03 -0700 Subject: switch to using ya2yaml --- leap_cli.gemspec | 3 ++- lib/core_ext/hash.rb | 39 --------------------------------------- lib/leap_cli/config/manager.rb | 3 +-- lib/leap_cli/config/object.rb | 11 +++++++++++ 4 files changed, 14 insertions(+), 42 deletions(-) diff --git a/leap_cli.gemspec b/leap_cli.gemspec index 94c50a7..0368e6e 100644 --- a/leap_cli.gemspec +++ b/leap_cli.gemspec @@ -53,7 +53,8 @@ spec = Gem::Specification.new do |s| #s.add_runtime_dependency('supply_drop') # misc gems - s.add_runtime_dependency('json_pure') # we use this json library for output so we can keep the keys sorted. + s.add_runtime_dependency('ya2yaml') # pure ruby yaml, so we can better control output. + s.add_runtime_dependency('json_pure') # pure ruby json, so we can better control output. s.add_runtime_dependency('gpgme') # not essential, but used for some minor stuff in adding sysadmins end diff --git a/lib/core_ext/hash.rb b/lib/core_ext/hash.rb index 15f72fc..7df33b2 100644 --- a/lib/core_ext/hash.rb +++ b/lib/core_ext/hash.rb @@ -1,44 +1,5 @@ -# -# -# We modify Hash to add a few features we need: -# -# * sorted output of keys to in yaml. -# * reference values either with hsh[key] or hsh.key -# * deep merge -# * select fields -# -# Because the json parsing code we use doesn't support setting a custom class, it is easier for us to just modify Hash. -# - -require 'yaml' - class Hash - ## - ## YAML - ## - - # - # make the type appear to be a normal Hash in yaml, even for subclasses. - # - def to_yaml_type - "!map" - end - - # - # just like Hash#to_yaml, but sorted - # - def to_yaml(opts = {}) - YAML::quick_emit(self, opts) do |out| - out.map(taguri, to_yaml_style) do |map| - keys.sort.each do |k| - v = self[k] - map.add(k, v) - end - end - end - end - ## ## CONVERTING ## diff --git a/lib/leap_cli/config/manager.rb b/lib/leap_cli/config/manager.rb index 8807cc9..246b79f 100644 --- a/lib/leap_cli/config/manager.rb +++ b/lib/leap_cli/config/manager.rb @@ -1,5 +1,4 @@ require 'json/pure' -require 'yaml' module LeapCli module Config @@ -42,7 +41,7 @@ module LeapCli @nodes.each do |name, node| filepath = "#{dir}/#{name}.yaml" updated_files << filepath - Util::write_file!(filepath, node.to_yaml) + Util::write_file!(filepath, node.dump) end (existing_files - updated_files).each do |filepath| Util::remove_file!(filepath) diff --git a/lib/leap_cli/config/object.rb b/lib/leap_cli/config/object.rb index 2ef7fe8..4f993bb 100644 --- a/lib/leap_cli/config/object.rb +++ b/lib/leap_cli/config/object.rb @@ -1,6 +1,9 @@ require 'erb' require 'json/pure' # pure ruby implementation is required for our sorted trick to work. +$KCODE = 'UTF8' +require 'ya2yaml' # pure ruby yaml + module LeapCli module Config # @@ -28,6 +31,14 @@ module LeapCli @node_list = Config::ObjectList.new end + # We use pure ruby yaml exporter ya2yaml instead of SYCK or PSYCH because it + # allows us greater compatibility regardless of installed ruby version and + # greater control over how the yaml is exported. + # + def dump + self.ya2yaml(:syck_compatible => true) + end + ## ## FETCHING VALUES ## -- cgit v1.2.3