Sha256: d9ed27fcd9ab5f79781613bd8ed7aa0ca651836988323e8a17d214525fc4a10b

Contents?: true

Size: 1.42 KB

Versions: 41

Compression:

Stored size: 1.42 KB

Contents

# Based on https://github.com/emancu/toml-rb/blob/master/lib/toml/dumper.rb
module TOML
  class PvcDumper
    attr_reader :toml_str

    def initialize(hash)
      @toml_str = ''

      visit(hash, '')
    end

    private

    def visit(hash, prefix, level = 0)
      nested_pairs = []
      simple_pairs = []
      indent_prefix = ' '*[level-1,0].max*2
      indent_values = ' '*([level-1, 0].max*2+2)

      if level == 1
        @toml_str += "\n" unless @toml_str.empty?
        @toml_str += "################################################################################\n"
        @toml_str += "#  === #{prefix} ===\n"
        @toml_str += "################################################################################\n"
      end

      hash.keys.sort.each do |key|
        val = hash[key]
        (val.is_a?(Hash) ? nested_pairs : simple_pairs) << [key, val]
      end

      @toml_str += "\n#{indent_prefix}[#{prefix}]\n" unless prefix.empty? || simple_pairs.empty?

      # First add simple pairs, under the prefix
      simple_pairs.each do |key, val|
        @toml_str << "#{indent_values}#{key.to_s} = #{to_toml(val)}\n"
      end

      nested_pairs.each do |key, val|
        visit(val, prefix.empty? ? key.to_s : [prefix, key].join('.'), level+1)
      end
    end

    def to_toml(obj)
      case
        when obj.is_a?(Time)
          obj.strftime('%Y-%m-%dT%H:%M:%SZ')
        else
          obj.inspect
      end
    end
  end
end

Version data entries

41 entries across 41 versions & 1 rubygems

Version Path
pvcglue-0.9.6 lib/pvcglue/toml_pvc_dumper.rb
pvcglue-0.9.5 lib/pvcglue/toml_pvc_dumper.rb
pvcglue-0.9.4 lib/pvcglue/toml_pvc_dumper.rb
pvcglue-0.9.3 lib/pvcglue/toml_pvc_dumper.rb
pvcglue-0.9.2 lib/pvcglue/toml_pvc_dumper.rb
pvcglue-0.9.1 lib/pvcglue/toml_pvc_dumper.rb
pvcglue-0.9.0 lib/pvcglue/toml_pvc_dumper.rb
pvcglue-0.1.39 lib/pvcglue/toml_pvc_dumper.rb
pvcglue-0.1.38 lib/pvcglue/toml_pvc_dumper.rb
pvcglue-0.1.37 lib/pvcglue/toml_pvc_dumper.rb
pvcglue-0.1.36 lib/pvcglue/toml_pvc_dumper.rb
pvcglue-0.1.35 lib/pvcglue/toml_pvc_dumper.rb
pvcglue-0.1.34 lib/pvcglue/toml_pvc_dumper.rb
pvcglue-0.1.33 lib/pvcglue/toml_pvc_dumper.rb
pvcglue-0.1.32 lib/pvcglue/toml_pvc_dumper.rb
pvcglue-0.1.31 lib/pvcglue/toml_pvc_dumper.rb
pvcglue-0.1.30 lib/pvcglue/toml_pvc_dumper.rb
pvcglue-0.1.29 lib/pvcglue/toml_pvc_dumper.rb
pvcglue-0.1.28 lib/pvcglue/toml_pvc_dumper.rb
pvcglue-0.1.27 lib/pvcglue/toml_pvc_dumper.rb