class Object

Public Instance Methods

drill(obj, target) click to toggle source
# File lib/dig-deep.rb, line 26
def drill(obj, target)
  if is_object?(obj)
    acc = (obj.is_a?(Hash) && obj.key?(target)) \
      ? obj[target].is_a?(Array) ? ["#{obj[target]}"] : [ obj[target] ] \
      : []

    obj.reduce(acc) do |acc, val|
      val.is_a?(Hash) \
        ? ( val.key?(target) \
              ? acc << (val[target].is_a?(Array) ? "#{val[target]}" : val[target]) \
              : acc << val.values.reduce([]){|acc,v| drill(v,target)} )
        : ( val.is_a?(Array) \
              ? acc << val.reduce([]){|acc, v| drill(v, target) if is_object?(v) } \
              : acc )
    end.flatten(1)
  end
end
is_object?(obj) click to toggle source
# File lib/dig-deep.rb, line 44
def is_object?(obj)
  obj.class == Hash || obj.class == Array
end
serialize_for(obj, target) click to toggle source
# File lib/dig-deep.rb, line 20
def serialize_for(obj, target)
  drill(obj, target).map do |m|
    string_to_array(m) ? string_to_array(m) : m
  end.compact
end
string_to_array(val) click to toggle source
# File lib/dig-deep.rb, line 48
def string_to_array(val)
  begin
    JSON.parse(val)
  rescue
    nil
  end
end