aboutsummaryrefslogtreecommitdiffstats
path: root/spec/support/data_modifier
diff options
context:
space:
mode:
Diffstat (limited to 'spec/support/data_modifier')
-rw-r--r--spec/support/data_modifier/box.rb5
-rw-r--r--spec/support/data_modifier/hash.rb16
2 files changed, 18 insertions, 3 deletions
diff --git a/spec/support/data_modifier/box.rb b/spec/support/data_modifier/box.rb
index 0fb95f743..0847b628c 100644
--- a/spec/support/data_modifier/box.rb
+++ b/spec/support/data_modifier/box.rb
@@ -1,3 +1,4 @@
+require_relative 'hash'
module Support
module DataModifier
module Box
@@ -7,9 +8,7 @@ module Support
class << self
def unbox atts
- atts.inject Hash.new do | h, (k,v) |
- h.merge(k => value_of(v))
- end
+ Hash.map_values(atts, method(:value_of))
end
def value_of v
self === v ? v.value : v
diff --git a/spec/support/data_modifier/hash.rb b/spec/support/data_modifier/hash.rb
new file mode 100644
index 000000000..05da3cf4f
--- /dev/null
+++ b/spec/support/data_modifier/hash.rb
@@ -0,0 +1,16 @@
+module Support
+ module DataModifier
+ module Hash extend self
+ def map_values hashy, f=nil, &fn
+ raise ArgumentError, "need block or function arg" unless f = fn || f
+ hashy.inject({}){ |h, (k,v)| h.merge(k => f.(v)) }
+ end
+ def first_values ary_hash
+ map_values(ary_hash, &:first)
+ end
+ def last_values ary_hash
+ map_values(ary_hash, &:last)
+ end
+ end
+ end
+end