class Hash

Public Instance Methods

key_details(k) click to toggle source

CASE

admin@dev,prod:
   username: abc
   password

returns

scopes  : [dev, prod]
sub_key : admin
admin:
   username: abc

CASE: dev:

url:  abc

returns

scopes: [dev]
subkey: nil

CASE:

url@dev: abc

returns:

scopes: [dev]
subkey: url

CASE:

dev:
    url:  abc
# File lib/rake/pro/hashex.rb, line 74
def key_details(k)
  subkey = scopes = nil
  sk = k.to_s
  skp = sk.split('@')
  subkey = skp.shift.to_sym if (skp.length > 1)
  scopes = skp[0].split(/\s*[&,\|]\s*/)
  [scopes.map { |scope| scope.to_sym }, subkey]
end
match(strings) click to toggle source
# File lib/rake/pro/hashex.rb, line 26
def match strings
  select { |key,val|
    is_match = false
    strings.each { |findstr|
      is_match ||= key.downcase.include?(findstr) || val.downcase.include?(findstr)
    }
    is_match
  }
end
promote_key(pk) click to toggle source
# File lib/rake/pro/hashex.rb, line 83
def promote_key pk
  pk = pk.to_sym
  coh = {}
  promoted = false
  self.each_pair { |k, v|
    scopes, subkey = key_details(k)
    if (scopes.include?(pk))
      promoted = true
      if subkey.nil?
        v.each_pair { |sk, sv|
          coh[sk] = sv
        }
        coh[k] = v
      else
        coh[subkey] =v
      end
    else
      if v.is_a?(Hash)
        coh[k], subpromo = v.promote_key(pk)
        promoted |= subpromo
      else
        coh[k] = v
      end
    end
  }
  [coh, promoted]
end
prune_keys(pks) click to toggle source
# File lib/rake/pro/hashex.rb, line 111
def prune_keys pks
  coh = {}
  self.each_pair { |k, v|
    scopes, subkey = key_details(k)
    prune = false
    scopes.each { |scope| prune |= pks.include?(scope) }
    if prune
      scopes.each { |scope|
        if !pks.include?(scope)
          if (subkey.nil?)
            coh[scope] = v
          else
            coh[scope] = {}
            coh[scope][subkey] = v
          end
        end
      }
    else
      coh[k] = v.is_a?(Hash) ? v.prune_keys(pks) : v
    end
  }
  coh
end
recursive_merge(new_hash) click to toggle source
# File lib/rake/pro/hashex.rb, line 2
def recursive_merge(new_hash)
  self.merge(new_hash) do |k, old_val, new_val|
    if new_val.respond_to?(:blank) && new_val.blank?
      old_val
    elsif (old_val.kind_of?(Hash) and new_val.kind_of?(Hash))
      old_val.recursive_merge(new_val)
    else
      new_val
    end
  end
end
recursive_merge!(new_hash) click to toggle source
# File lib/rake/pro/hashex.rb, line 14
def recursive_merge!(new_hash)
  self.merge!(new_hash) do |k, old_val, new_val|
    if new_val.respond_to?(:blank) && new_val.blank?
      old_val
    elsif (old_val.kind_of?(Hash) and new_val.kind_of?(Hash))
      old_val.recursive_merge!(new_val)
    else
      new_val
    end
  end
end
symbolize_keys() click to toggle source
# File lib/rake/pro/hashex.rb, line 36
def symbolize_keys
  inject({}) { |memo,(k,v)| 
    memo[k.to_sym] = v.is_a?(Hash) ? v.symbolize_keys : v;
    memo
  }
end