amiel-collapse 0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
|