Sha256: 1008ee0a5e664cd6ff6332eaf902f6e0b4101eb51834396be62679484d6123cd

Contents?: true

Size: 1.26 KB

Versions: 6

Compression:

Stored size: 1.26 KB

Contents

require 'diffy'
require 'pp'

module Kashi
  class Utils
    class << self
      def normalize_hash(hash)
        hash.dup.each do |k, v|
          if v.kind_of?(Array)
            v.sort!
            if v.first.kind_of?(Hash)
              hash[k] = v.map { |o| normalize_hash(o) }
            elsif v.first.respond_to?(:to_h)
              hash[k] = v.map { |o| normalize_hash(o.to_h) }
            end
          elsif v == nil
            hash[k] = ''
          elsif v.respond_to?(:to_h)
            hash[k] = normalize_hash(v.to_h)
          end
        end
        sort_keys(hash)
      end

      def sort_keys(hash)
        hash = Hash[hash.sort]
        hash.each do |k, v|
          if v.kind_of?(Array)
            if v.first.kind_of?(Hash)
              hash[k] = v.map { |h| sort_keys(h) }
            end
          elsif v.kind_of?(Hash)
            hash[k] = sort_keys(v)
          end
        end
        hash
      end

      def diff(obj1, obj2, options = {})
        diffy = Diffy::Diff.new(
          obj1.pretty_inspect,
          obj2.pretty_inspect,
          :diff => '-u'
        )

        out = diffy.to_s(options[:color] ? :color : :text).gsub(/\s+\z/m, '')
        out.gsub!(/^/, options[:indent]) if options[:indent]
        out
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
kashi-0.1.4 lib/kashi/utils.rb
kashi-0.1.3 lib/kashi/utils.rb
kashi-0.1.2 lib/kashi/utils.rb
kashi-0.1.1 lib/kashi/utils.rb
kashi-0.1.0 lib/kashi/utils.rb
kashi-0.1.0.beta1 lib/kashi/utils.rb