]> gitweb.fluxo.info Git - leap/leap_cli.git/commitdiff
switch to using ya2yaml
authorelijah <elijah@riseup.net>
Sat, 27 Oct 2012 22:05:03 +0000 (15:05 -0700)
committerelijah <elijah@riseup.net>
Sat, 27 Oct 2012 22:05:03 +0000 (15:05 -0700)
leap_cli.gemspec
lib/core_ext/hash.rb
lib/leap_cli/config/manager.rb
lib/leap_cli/config/object.rb

index 94c50a793eb871decfdc5314e1e412fdb449f09d..0368e6e83d62ef7ee07879f0d57b793c8d6599cd 100644 (file)
@@ -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
index 15f72fc78b856f71c8a528cff1bf1554fac85b9b..7df33b260e4309d9a9789148713e7c775d413ecd 100644 (file)
@@ -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
   ##
index 8807cc9223a76d71f5c83fb21c4ee6629d937d31..246b79f7ab69178e2bb00d9520cced75441961b1 100644 (file)
@@ -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)
index 2ef7fe8ab87ad4d2352de955d9bb71a8f5c645da..4f993bb31106b25f8d687e7bb00e65543a59c7b1 100644 (file)
@@ -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
       ##