lib/vagrant-invade/extend.rb in vagrant-invade-0.7.0 vs lib/vagrant-invade/extend.rb in vagrant-invade-0.8.0
- old
+ new
@@ -1,21 +1,68 @@
+class Object
+
+ def present?
+ !blank?
+ end
+
+ def presence
+ self if present?
+ end
+
+ def blank?
+ respond_to?(:empty?) ? !!empty? : !self
+ end
+end
+
class Hash
def depth
a = self.to_a
d = 1
while (a.flatten!(1).map! {|e| (e.is_a? Hash) ? e.to_a.flatten(1) : (e.is_a? Array) ? e : nil}.compact!.size > 0)
d += 1
end
d
end
- def compact(opts={})
+ def compact
+ self.select { |_, value| !value.nil? }
+ end
+
+ def compact!
+ self.reject! { |_, value| value.nil? }
+ end
+
+ def deep_compact(options = {})
inject({}) do |new_hash, (k,v)|
- if !v.nil?
- new_hash[k] = opts[:recurse] && v.class == Hash ? v.compact(opts) : v
+ result = options[:exclude_blank] ? v.blank? : v.nil?
+ if !result
+ new_value = v.is_a?(Hash) ? v.deep_compact(options).presence : v
+ new_hash[k] = new_value if new_value
end
new_hash
end
+ end
+
+ def deep_merge(other_hash, &block)
+ dup.deep_merge!(other_hash, &block)
+ end
+
+ def deep_merge!(other_hash, &block)
+ other_hash.each_pair do |current_key, other_value|
+ this_value = self[current_key]
+
+ self[current_key] = if this_value.is_a?(Hash) && other_value.is_a?(Hash)
+ this_value.deep_merge(other_value, &block)
+ else
+ if block_given? && key?(current_key)
+ block.call(current_key, this_value, other_value)
+ else
+ other_value
+ end
+ end
+ end
+
+ self
end
end
class Array
def depth