modalsupport 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.0
1
+ 0.9.1
@@ -1,7 +1,7 @@
1
1
  module ModalSupport
2
-
2
+
3
3
  module_function
4
-
4
+
5
5
  # Map hashes and arrays recursively. The supplied block is used to map all items (values and container).
6
6
  #
7
7
  # Examples
@@ -12,23 +12,34 @@ module ModalSupport
12
12
  # # convert hashes to OpenStructs
13
13
  # recursive_map(:a=>11, :b=>22, :c=>{:x=>100,:y=>200}){|v| v.kind_of?(Hash) ? OpenStruct.new(v) : v}
14
14
  # # => #<OpenStruct b=22, a=11, c=#<OpenStruct x=100, y=200>>
15
- def recursive_map(container, &blk)
15
+ def recursive_map(container, key=nil, &blk)
16
16
  raise ArgumentError, "recursive_map requires a block" if blk.nil?
17
17
  case container
18
18
  when Hash
19
- blk[container.map{|k,v|
20
- [k, recursive_map(v, &blk)]
21
- }.to_h]
19
+ if blk.arity==2
20
+ blk[key, container.map{|k,v|
21
+ [k, recursive_map(v, k, &blk)]
22
+ }.to_h]
23
+ else
24
+ blk[container.map{|k,v|
25
+ [k, recursive_map(v, &blk)]
26
+ }.to_h]
27
+ end
22
28
  when Array
23
- blk[container.map{|v| recursive_map(v, &blk)}]
29
+ if blk.arity==2
30
+ blk[key, container.map_with_index{|v, i| recursive_map(v, i, &blk)}]
31
+ else
32
+ blk[container.map{|v| recursive_map(v, &blk)}]
33
+ end
24
34
  else
25
- case mapped = blk[container]
35
+ mapped = blk.arity==2 ? blk[key, container] : blk[container]
36
+ case mapped
26
37
  when Hash, Array
27
- recursive_map(mapped, &blk)
38
+ recursive_map(mapped, key, &blk)
28
39
  else
29
40
  mapped
30
41
  end
31
42
  end
32
43
  end
33
-
44
+
34
45
  end
data/modalsupport.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "modalsupport"
8
- s.version = "0.9.0"
8
+ s.version = "0.9.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Javier Goizueta"]
12
- s.date = "2012-04-30"
12
+ s.date = "2012-05-14"
13
13
  s.description = "additional support extensions to ActiveSupport and HoboSupport"
14
14
  s.email = "jgoizueta@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -32,6 +32,21 @@ class TestRecursiveMap < Test::Unit::TestCase
32
32
  )
33
33
  end
34
34
 
35
+ should "process values with indices in containers" do
36
+ assert_equal(
37
+ {:a=>11, :b=>44},
38
+ ModalSupport.recursive_map(:a=>11, :b=>22){|i,v|
39
+ i==:b ? v*2 : v
40
+ }
41
+ )
42
+ assert_equal(
43
+ [11,44],
44
+ ModalSupport.recursive_map([11,22]){|i,v|
45
+ i.nil? ? v : (i+1)*v
46
+ }
47
+ )
48
+ end
49
+
35
50
  should "process values in nested containers" do
36
51
  assert_equal(
37
52
  {:a=>22, :b=>44, :c=>{:x=>200,:y=>400}, :d=>[2,4,6]},
@@ -43,6 +58,21 @@ class TestRecursiveMap < Test::Unit::TestCase
43
58
  )
44
59
  end
45
60
 
61
+ should "process values with indices in nested containers" do
62
+ assert_equal(
63
+ {:a=>11, :b=>44, :c=>{:x=>200,:y=>200}, :d=>[1,4,3]},
64
+ ModalSupport.recursive_map(:a=>11, :b=>22, :c=>{:x=>100,:y=>200}, :d=>[1,2,3]){|i,v|
65
+ [:x,:b,1].include?(i) ? v*2 : v
66
+ }
67
+ )
68
+ assert_equal(
69
+ [0, 22, {:c=>{:x=>100,:y=>200}, :d=>[0,2,6]}],
70
+ ModalSupport.recursive_map([11, 22, {:c=>{:x=>100,:y=>200}, :d=>[1,2,3]}]){|i,v|
71
+ (i.kind_of?(Numeric) && v.kind_of?(Numeric)) ? i*v : v
72
+ }
73
+ )
74
+ end
75
+
46
76
  should "process values in deeply nested containers" do
47
77
  assert_equal(
48
78
  {:a=>22, :b=>44, :c=>{:x=>200, :y=>400}, :d=>[2, 4, 6, {:zz=>[2000, 4000, {:yy=>{:xx=>6000}}]}]},
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: modalsupport
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-30 00:00:00.000000000 Z
12
+ date: 2012-05-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: shoulda