aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--leap_cli.gemspec3
-rw-r--r--lib/core_ext/hash.rb39
-rw-r--r--lib/leap_cli/config/manager.rb3
-rw-r--r--lib/leap_cli/config/object.rb11
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,45 +1,6 @@
-#
-#
-# 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
##