ruby_extend 1.0.0

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.rdoc ADDED
@@ -0,0 +1,15 @@
1
+ === Install
2
+
3
+ sudo gem install ruby_extend
4
+
5
+ === Release 1
6
+
7
+ Extend Hash with to_sorted_array : Recursively sorted array from hash
8
+ hash = {'user' => {'adress' => {'town' => 'Paris', 'street' => "rue de Quimper"}, 'name' => 'toto', 'age' => 12}}
9
+ hash.to_sorted_array
10
+ # => [["user", [["adress", [["street", "rue de Quimper"], ["town", "Paris"]]], ["age", 12], ["name", "toto"]]]
11
+
12
+ Extend Array with #to_hash : Recursively convert array to hash
13
+ array = [["user", [["adress", [["street", "rue de Quimper"], ["town", "Paris"]]], ["age", 12], ["name", "toto"]]]]
14
+ array.to_hash
15
+ # =>{"user"=> {"name"=>"toto", "adress"=>{"street"=>"rue de Quimper", "town"=>"Paris"}, "age"=>12}}
@@ -0,0 +1,23 @@
1
+ class Hash
2
+
3
+ # Return array from hash recursively sorted
4
+ def to_sorted_array block=nil
5
+
6
+ sort(&block).inject([]) do |array, (key, value)|
7
+ array << [key, value.is_a?(Hash) ? value.to_sorted_array : value]
8
+ end
9
+ end
10
+
11
+ end
12
+
13
+ class Array
14
+
15
+ # Recursively convert array to hash
16
+ def to_hash
17
+ inject({}) do |hash, (key, value)|
18
+ value = value.to_hash if value.kind_of?(Array)
19
+ hash.merge!({key => value})
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,30 @@
1
+ require 'test/unit'
2
+ require File.join(File.dirname(__FILE__),'../lib/ruby_extensions')
3
+
4
+
5
+ class TestRubyExtensions < Test::Unit::TestCase
6
+
7
+
8
+ def test_hash_to_sorted_array_with_empty_hash
9
+ assert_equal [], {}.to_sorted_array
10
+ end
11
+
12
+ def test_hash_recursively_sorted_to_array
13
+ hash = {'user' => {'adress' => {'town' => 'Paris', 'street' => "rue de Quimper"}, 'name' => 'toto', 'age' => 12}}
14
+ expected = [["user", [["adress", [["street", "rue de Quimper"], ["town", "Paris"]]], ["age", 12], ["name", "toto"]]]]
15
+
16
+ assert_equal expected, hash.to_sorted_array
17
+ end
18
+
19
+ def test_array_to_hash_with_empty_array
20
+ assert_equal({}, [].to_hash)
21
+ end
22
+
23
+ def test_array_to_hash_recursively_extract_to_hashes
24
+ array = [["user", [["adress", [["street", "rue de Quimper"], ["town", "Paris"]]], ["age", 12], ["name", "toto"]]]]
25
+ expected = {"user"=> {"name"=>"toto", "adress"=>{"street"=>"rue de Quimper", "town"=>"Paris"}, "age"=>12}}
26
+ assert_equal expected, array.to_hash
27
+ end
28
+
29
+
30
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby_extend
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 0
10
+ version: 1.0.0
11
+ platform: ruby
12
+ authors:
13
+ - Philippe Cantin
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-10-16 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: "Extend some ruby core classes "
23
+ email:
24
+ executables: []
25
+
26
+ extensions: []
27
+
28
+ extra_rdoc_files:
29
+ - README.rdoc
30
+ files:
31
+ - lib/ruby_extend.rb
32
+ - README.rdoc
33
+ - test/test_ruby_extensions.rb
34
+ has_rdoc: true
35
+ homepage: http://github.com/anoiaque/ruby_extensions
36
+ licenses: []
37
+
38
+ post_install_message:
39
+ rdoc_options: []
40
+
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ hash: 3
49
+ segments:
50
+ - 0
51
+ version: "0"
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ requirements: []
62
+
63
+ rubyforge_project:
64
+ rubygems_version: 1.3.7
65
+ signing_key:
66
+ specification_version: 3
67
+ summary: Extend some ruby core classes
68
+ test_files:
69
+ - test/test_ruby_extensions.rb