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 +15 -0
- data/lib/ruby_extend.rb +23 -0
- data/test/test_ruby_extensions.rb +30 -0
- metadata +69 -0
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}}
|
data/lib/ruby_extend.rb
ADDED
@@ -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
|