Sha256: c8e871776163ddab880a18953033b64acab8e172b590e7372ae514f94a4ba902

Contents?: true

Size: 1.18 KB

Versions: 6

Compression:

Stored size: 1.18 KB

Contents

require 'diffy'

module Applb
  class Utils
    class << self
      def normalize_hash(hash)
        hash.dup.each do |k, v|
          if v.kind_of?(Array)
            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.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
applb-0.1.5.beta1 lib/applb/utils.rb
applb-0.1.4 lib/applb/utils.rb
applb-0.1.3 lib/applb/utils.rb
applb-0.1.2 lib/applb/utils.rb
applb-0.1.1 lib/applb/utils.rb
applb-0.1.0 lib/applb/utils.rb