module K::Replace::Keys

Public Instance Methods

chain_properties(text) click to toggle source
# File lib/k/replace/keys.rb, line 14
def chain_properties(text)
  keys, obj = find_all(text), Hash.new
  obj.tap do |it|
    keys.each do |i|
      it.merge!(chain_property(i)) do |k, ov, nv|
        if ov.kind_of?(Array) && nv.kind_of?(Array)
          ov.concat(nv).uniq
        elsif ov.kind_of?(Array) && !nv.kind_of?(Array)
          ov.<<(nv).uniq
        else
          [ ov, nv ]
        end
      end
    end
  end
end
chain_property(property) click to toggle source
# File lib/k/replace/keys.rb, line 31
def chain_property(property)
  Hash.new.tap do |hash|
    hash.merge!(array_chain(property.split('.'))) do |k, ov, nv|
      if ov.kind_of?(Array) && nv.kind_of?(Array)
        ov.concat(nv).uniq
      else
        ov << nv if ov.kind_of?(Array)
      end
    end
  end
end
find_all(text) { |match| ... } click to toggle source
# File lib/k/replace/keys.rb, line 5
def find_all(text)
  [].tap do |arr|
    text.scan(kreplace.key_pattern) do |match|
      yield match[0] if block_given?
      arr << match[0]
    end
  end.flatten.compact
end

Private Instance Methods

array_chain(chains) click to toggle source
# File lib/k/replace/keys.rb, line 49
def array_chain(chains)
  return chains[0] if chains.size == 1
  chained = Hash.new
  chained.tap{|c| c["#{chains.shift}".downcase.to_sym] = array_chain(chains)}
end
kreplace() click to toggle source
# File lib/k/replace/keys.rb, line 45
def kreplace
  @kreplace ||= Replace.config
end