amiel-collapse 0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,10 @@
1
+ require "rubygems"
2
+ require "rake/testtask"
3
+
4
+ task :default => :test
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.libs << "test"
8
+ t.test_files = FileList["test/test_*.rb"]
9
+ t.verbose = true
10
+ end
@@ -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
@@ -0,0 +1,3 @@
1
+ require File.join(File.dirname(__FILE__), *%w{.. lib collapse})
2
+ require 'test/unit'
3
+
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
+