amiel-collapse 0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +38 -0
- data/Rakefile.rb +10 -0
- data/lib/collapse.rb +16 -0
- data/test/test_collapse.rb +28 -0
- data/test/test_helper.rb +3 -0
- metadata +59 -0
data/README.textile
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
h2. Collapse
|
2
|
+
|
3
|
+
This gem adds a method @collapse!@ to Hash.
|
4
|
+
Using it merges a subhash with self while applying set union to any common arrays.
|
5
|
+
|
6
|
+
h2. Example
|
7
|
+
|
8
|
+
h3. example_config.yml
|
9
|
+
|
10
|
+
<pre>
|
11
|
+
<code>
|
12
|
+
:foo:
|
13
|
+
- a
|
14
|
+
- b
|
15
|
+
- d
|
16
|
+
:bar:
|
17
|
+
:foo:
|
18
|
+
- b
|
19
|
+
- d
|
20
|
+
- e
|
21
|
+
</code>
|
22
|
+
</pre>
|
23
|
+
|
24
|
+
h3. ruby
|
25
|
+
|
26
|
+
<pre>
|
27
|
+
<code>
|
28
|
+
tmp = YAML.load_file 'example_config.yml'
|
29
|
+
tmp.inspect # => {:foo => ['a', 'b', 'd'], :bar => {:foo => ['b', 'd', 'e']}}
|
30
|
+
tmp.collapse!
|
31
|
+
tmp.inspect # => {:foo => ['a', 'b', 'd', 'e']}
|
32
|
+
</code>
|
33
|
+
</pre>
|
34
|
+
|
35
|
+
|
36
|
+
h2. Author
|
37
|
+
|
38
|
+
Amiel Martin
|
data/Rakefile.rb
ADDED
data/lib/collapse.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
module Collapse
|
2
|
+
def collapse!(key)
|
3
|
+
other = self.delete(key)
|
4
|
+
return unless other
|
5
|
+
|
6
|
+
for k in other.keys
|
7
|
+
if other[k].is_a?(Array) and self[k] and self[k].is_a?(Array)
|
8
|
+
self[k] |= other.delete(k)
|
9
|
+
else
|
10
|
+
self[k] = other[k]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
Hash.send :include, Collapse
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class CollapseTest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@a = {
|
6
|
+
:an_array => %w(foo bar baz),
|
7
|
+
:an_element => 'a element',
|
8
|
+
:another_element => 'an a element',
|
9
|
+
:b => {
|
10
|
+
:an_array => %w(foo bat bat_country),
|
11
|
+
:an_element => 'b element',
|
12
|
+
:element_another => 'a b element',
|
13
|
+
}
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
def test_collapse
|
19
|
+
@a.collapse! :b
|
20
|
+
should = {
|
21
|
+
:an_array => %w(foo bar baz bat bat_country),
|
22
|
+
:an_element => 'b element',
|
23
|
+
:another_element => 'an a element',
|
24
|
+
:element_another => 'a b element',
|
25
|
+
}
|
26
|
+
assert_equal should, @a
|
27
|
+
end
|
28
|
+
end
|
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: amiel-collapse
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: "0.2"
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Amiel Martin
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-04-17 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Collapse allows a hash with arrays as values to merge and union common arrays instead of overwriting them.
|
17
|
+
email: amiel@tatango.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files:
|
25
|
+
- README.textile
|
26
|
+
- lib
|
27
|
+
- lib/collapse.rb
|
28
|
+
- Rakefile.rb
|
29
|
+
- test
|
30
|
+
- test/test_helper.rb
|
31
|
+
- test/test_collapse.rb
|
32
|
+
has_rdoc: false
|
33
|
+
homepage:
|
34
|
+
post_install_message:
|
35
|
+
rdoc_options: []
|
36
|
+
|
37
|
+
require_paths:
|
38
|
+
- lib
|
39
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: "0"
|
44
|
+
version:
|
45
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: "0"
|
50
|
+
version:
|
51
|
+
requirements: []
|
52
|
+
|
53
|
+
rubyforge_project:
|
54
|
+
rubygems_version: 1.2.0
|
55
|
+
signing_key:
|
56
|
+
specification_version: 2
|
57
|
+
summary: Collapse allows a hash with arrays as values to merge and union common arrays instead of overwriting them. This is handy for parsing YAML config files that have sections loaded up dynamically but have defaults.
|
58
|
+
test_files: []
|
59
|
+
|