class Object

Constants

DEFAULT_KEY
DIMENSIONS
ENCRYPTION_ALGO
FEET_TO_METRES_CONVERSION
IMPERIAL_UNITS
KEY_LENGTH
METRIC_PREFIXES

Public Instance Methods

deep_slice(*allowed_keys) click to toggle source
# File lib/housing_misc/slice_helper.rb, line 8
def deep_slice(*allowed_keys)
  sliced = {}
  allowed_keys.each do |allowed_key|
    if allowed_key.is_a?(Hash)
      allowed_key.each do |allowed_subkey, allowed_subkey_values|
        allowed_subkey_org , allowed_subkey_to_replace = find_orig_and_swap_key(allowed_subkey)
        if (has_key?(allowed_subkey_org) | has_key?(allowed_subkey_org.to_sym))
          value = has_key?(allowed_subkey_org) ? self[allowed_subkey_org] : self[allowed_subkey_org.to_sym]
          if value.is_a?(Hash)
            sliced[allowed_subkey_to_replace] = value.deep_slice(*Array.wrap(allowed_subkey_values))
          elsif value.is_a?(Array)
            temp_array_slice = []
            value.each do |val|
              temp_array_slice << val.deep_slice(*Array.wrap(allowed_subkey_values))
            end
            sliced[allowed_subkey_to_replace] = temp_array_slice
          else
            raise ArgumentError, "can only deep-slice hash values, but value for #{allowed_subkey.inspect} was of type #{value.class.name}"
          end
        end
      end
    else
      Array.wrap(allowed_key).each do |k|
        k_org, k_to_replace = find_orig_and_swap_key(k)
        if has_key?(k_org)
          sliced[k_to_replace] = self[k_org]
        elsif has_key?(k_org.to_sym)
          sliced[k_to_replace] = self[k_org.to_sym]
        end    
      end
    end
  end
  return sliced
end
find_orig_and_swap_key(key) click to toggle source
# File lib/housing_misc/slice_helper.rb, line 1
def find_orig_and_swap_key(key)
  keys = key.split(",")
  return keys[0], keys[1] if keys.size > 1
  return key, key
end