ruby_extend 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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