#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
-#
-#
-# 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
##
require 'json/pure'
-require 'yaml'
module LeapCli
module Config
@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)
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
#
@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
##