ruby_extend 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -12,4 +12,12 @@ Extend Hash with to_sorted_array : Recursively sorted array from hash
12
12
  Extend Array with #to_hash : Recursively convert array to hash
13
13
  array = [["user", [["adress", [["street", "rue de Quimper"], ["town", "Paris"]]], ["age", 12], ["name", "toto"]]]]
14
14
  array.to_hash
15
- # =>{"user"=> {"name"=>"toto", "adress"=>{"street"=>"rue de Quimper", "town"=>"Paris"}, "age"=>12}}
15
+ # =>{"user"=> {"name"=>"toto", "adress"=>{"street"=>"rue de Quimper", "town"=>"Paris"}, "age"=>12}}
16
+
17
+ === Release 2
18
+ Array#move(from,to)
19
+ Array#included_in?(array)
20
+ Array#duplicates
21
+ Array#map_with_index
22
+ Array#average
23
+ Array#longest
data/lib/ruby_extend.rb CHANGED
@@ -1,17 +1,17 @@
1
1
  class Hash
2
-
2
+
3
3
  # Return array from hash recursively sorted
4
4
  def to_sorted_array block=nil
5
-
6
5
  sort(&block).inject([]) do |array, (key, value)|
7
- array << [key, value.is_a?(Hash) ? value.to_sorted_array : value]
6
+ value = value.is_a?(Hash) ? value.to_sorted_array : value
7
+ array << [key, value]
8
8
  end
9
9
  end
10
10
 
11
11
  end
12
12
 
13
13
  class Array
14
-
14
+ require 'set'
15
15
  # Recursively convert array to hash
16
16
  def to_hash
17
17
  inject({}) do |hash, (key, value)|
@@ -20,4 +20,38 @@ class Array
20
20
  end
21
21
  end
22
22
 
23
+ def move(from, to)
24
+ insert(to, delete_at(from))
25
+ self
26
+ end
27
+
28
+ def included_in? array
29
+ array.to_set.superset?(self.to_set)
30
+ end
31
+
32
+ def duplicates
33
+ uniq.map { |element| diff = (self.size - (self-[element]).size); (diff > 1) ? [element, diff] : nil}.compact
34
+ end
35
+
36
+ def map_with_index
37
+ result = []
38
+ each_with_index do |element, index|
39
+ result << yield(element, index)
40
+ end
41
+ result
42
+ end
43
+
44
+ def average
45
+ if self.respond_to?(:sum)
46
+ sum.to_f / self.count
47
+ else
48
+ self.inject(:+).to_f / self.count
49
+ end
50
+ end
51
+
52
+ def longest
53
+ max = group_by(&:size).max
54
+ max.last.pop if max
55
+ end
56
+
23
57
  end
@@ -1,5 +1,5 @@
1
1
  require 'test/unit'
2
- require File.join(File.dirname(__FILE__),'../lib/ruby_extensions')
2
+ require File.join(File.dirname(__FILE__),'../lib/ruby_extend')
3
3
 
4
4
 
5
5
  class TestRubyExtensions < Test::Unit::TestCase
@@ -25,6 +25,35 @@ class TestRubyExtensions < Test::Unit::TestCase
25
25
  expected = {"user"=> {"name"=>"toto", "adress"=>{"street"=>"rue de Quimper", "town"=>"Paris"}, "age"=>12}}
26
26
  assert_equal expected, array.to_hash
27
27
  end
28
-
28
+
29
+ def test_array_included_in
30
+ assert [1, 3, 766, 9].included_in?([1, 3, 766, 9])
31
+ assert [1, 3, 766, 9].included_in?([1, 3, 766, 9,10])
32
+ assert ![1, 3, 4, 9].included_in?([1, 3, 766, 9])
33
+ end
34
+
35
+ def test_move_an_element_of_an_array
36
+ a = [1, 2, 3, 4]
37
+ assert_equal [2, 3, 4, 1], a.move(0, 3)
38
+ end
39
+
40
+ def test_duplicates
41
+ assert_equal [[2, 2], [3, 3]], [1, 2, 4, 2, 3, 6, 3, 3].duplicates
42
+ assert_equal [], [1, 2, 3, 4].duplicates
43
+ end
44
+
45
+ def test_map_with_index
46
+ [1, 2, 3, 4].map_with_index do |n, index|
47
+ assert_equal n, index + 1
48
+ end
49
+ end
50
+
51
+ def test_average
52
+ assert_equal 10, [0, 20].average
53
+ end
54
+
55
+ def test_longest
56
+ assert_equal "hello", ["hello", "how", "are", "you"].longest
57
+ end
29
58
 
30
59
  end
metadata CHANGED
@@ -1,69 +1,49 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
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
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Philippe Cantin
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2010-10-16 00:00:00 +02:00
19
- default_executable:
12
+ date: 2012-06-23 00:00:00.000000000Z
20
13
  dependencies: []
21
-
22
- description: "Extend some ruby core classes "
14
+ description: Extend some ruby core classes
23
15
  email:
24
16
  executables: []
25
-
26
17
  extensions: []
27
-
28
- extra_rdoc_files:
18
+ extra_rdoc_files:
29
19
  - README.rdoc
30
- files:
20
+ files:
31
21
  - lib/ruby_extend.rb
32
22
  - README.rdoc
33
23
  - test/test_ruby_extensions.rb
34
- has_rdoc: true
35
24
  homepage: http://github.com/anoiaque/ruby_extensions
36
25
  licenses: []
37
-
38
26
  post_install_message:
39
27
  rdoc_options: []
40
-
41
- require_paths:
28
+ require_paths:
42
29
  - lib
43
- required_ruby_version: !ruby/object:Gem::Requirement
30
+ required_ruby_version: !ruby/object:Gem::Requirement
44
31
  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
32
+ requirements:
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
37
  none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- hash: 3
58
- segments:
59
- - 0
60
- version: "0"
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
61
42
  requirements: []
62
-
63
43
  rubyforge_project:
64
- rubygems_version: 1.3.7
44
+ rubygems_version: 1.8.16
65
45
  signing_key:
66
46
  specification_version: 3
67
47
  summary: Extend some ruby core classes
68
- test_files:
48
+ test_files:
69
49
  - test/test_ruby_extensions.rb