webget-enumerable_extend 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,154 @@
1
+ # = Enumerable Extensions
2
+ #
3
+ # Author:: Joel Parker Henderson, joelparkerhenderson@gmail.com
4
+ # Copyright:: Copyright (c) 2006-2008 Joel Parker Henderson
5
+ # License:: CreativeCommons License, Non-commercial Share Alike
6
+ # License:: LGPL, GNU Lesser General Public License
7
+ #
8
+ # Ruby Enumerable base class extensions.
9
+ #
10
+ ##
11
+
12
+ module Enumerable
13
+
14
+
15
+ ########################################################################
16
+ #
17
+ # map
18
+ #
19
+ ########################################################################
20
+
21
+ # map item => item.id
22
+ def map_id
23
+ map{|x| x.id}
24
+ end
25
+
26
+
27
+ # map item => item.to_sym
28
+ def map_to_sym
29
+ map{|x| x.to_sym}
30
+ end
31
+
32
+
33
+ ########################################################################
34
+ #
35
+ # select
36
+ #
37
+ ########################################################################
38
+
39
+
40
+ # enum.select_while {|obj| block } => array
41
+ # Returns an array containing the leading elements for which block is not false or nil.
42
+ def select_while
43
+ a = []
44
+ each{|x| yield(x) ? (a << x) : break}
45
+ return a
46
+ end
47
+
48
+
49
+ # enum.select_until {|obj| block } => array
50
+ # Returns an array containing the leading elements for which block is false or nil.
51
+ def select_until
52
+ a = []
53
+ each{|x| yield(x) ? break : (a << x)}
54
+ return a
55
+ end
56
+
57
+
58
+ # enum.select_with_index {|obj,i| block } => array
59
+ # Calls block with two arguments, the item and its index, for each item in enum.
60
+ # Returns an array containing the leading elements for which block is not false or nil.
61
+ def select_with_index
62
+ i = 0
63
+ a = []
64
+ each{|x|
65
+ if yield(x,i)
66
+ a << x
67
+ i+=1
68
+ else
69
+ break
70
+ end
71
+ }
72
+ return a
73
+ end
74
+
75
+
76
+ ########################################################################
77
+ #
78
+ # nitems
79
+ #
80
+ ########################################################################
81
+
82
+
83
+ # enum.nitems_while {| obj | block } => number of items
84
+ # Returns the number of leading elements for which block is not false or nil.
85
+ def nitems_while
86
+ n = 0
87
+ each{|x| yield(x) ? (n+=1) : break}
88
+ return n
89
+ end
90
+
91
+
92
+ # enum.nitems_until {| obj | block } => number of items
93
+ # Returns the number of leading elements for which block is false.
94
+ def nitems_until
95
+ n = 0
96
+ each{|x|
97
+ if yield(x)
98
+ break
99
+ else
100
+ n+=1
101
+ end
102
+ }
103
+ return n
104
+ irb
105
+ end
106
+
107
+
108
+ # enum.nitems_with_index {|obj,i| block } => number of items
109
+ # Calls block with two arguments, the item and its index, for each item in enum.
110
+ # Returns the number of leading elements for which block is true.
111
+ def nitems_with_index
112
+ i = 0
113
+ each{|x| yield(x,i) ? (i+=1) : break}
114
+ return i
115
+ end
116
+
117
+
118
+ # Concatenate the items into a string.
119
+ #
120
+ # ==Example
121
+ # arr=['anne','beth','cate']
122
+ # arr.cat => "annebethcate"
123
+ #
124
+ # You can optionally provide a prefix and suffix.
125
+ #
126
+ # ==Example
127
+ # arr.cat("+") => "+anne+beth+cate"
128
+ # arr.cat("+","-") => "+anne-+beth-+cate-"
129
+ #
130
+ # You can easily wrap items in HTML tags.
131
+ #
132
+ # ==Example
133
+ # arr=['anne','beth','cate']
134
+ # arr.cat("<li>","</li>\n")
135
+ # =>
136
+ # <li>anne</li>
137
+ # <li>beth</li>
138
+ # <li>cate</li>
139
+
140
+ def cat(prefix=nil,suffix=nil)
141
+ if prefix
142
+ if suffix
143
+ inject(""){|sum,s| sum += prefix + s.to_s + suffix}
144
+ else
145
+ inject(""){|sum,s| sum += prefix + s.to_s }
146
+ end
147
+ else
148
+ inject(""){|sum,s| sum += s.to_s }
149
+ end
150
+ end
151
+
152
+
153
+
154
+ end
@@ -0,0 +1,117 @@
1
+ require 'test/unit'
2
+ require 'enumerable_extensions'
3
+
4
+ class EnumerableExtensionsTest < Test::Unit::TestCase
5
+
6
+ ITEMS = ['a','b','c']
7
+
8
+
9
+ ########################################################################
10
+ #
11
+ # map
12
+ #
13
+ ########################################################################
14
+
15
+ class Mock
16
+ attr_accessor :id
17
+ def initialize(id)
18
+ @id=id
19
+ end
20
+ end
21
+
22
+ A = Mock.new('a')
23
+ B = Mock.new('b')
24
+ C = Mock.new('c')
25
+
26
+ def test_map_id
27
+ assert_equal(['a','b','c'],[A,B,C].map_id)
28
+ end
29
+
30
+ def test_map_to_sym
31
+ assert_equal([:a,:b,:c],ITEMS.map_to_sym)
32
+ end
33
+
34
+
35
+ ########################################################################
36
+ #
37
+ # select
38
+ #
39
+ ########################################################################
40
+
41
+
42
+ def test_select_while
43
+ assert_equal([ ],ITEMS.select_while{|x| x < 'a' },'< a')
44
+ assert_equal(['a' ],ITEMS.select_while{|x| x < 'b' },'< b')
45
+ assert_equal(['a','b' ],ITEMS.select_while{|x| x < 'c' },'< c')
46
+ assert_equal(['a','b','c'],ITEMS.select_while{|x| x < 'd' },'< d')
47
+ assert_equal(['a','b','c'],ITEMS.select_while{|x| x < 'e' },'< e')
48
+ end
49
+
50
+ def test_select_until_condition
51
+ assert_equal([ ],ITEMS.select_until{|x| x == 'a' },'a')
52
+ assert_equal(['a' ],ITEMS.select_until{|x| x == 'b' },'b')
53
+ assert_equal(['a','b' ],ITEMS.select_until{|x| x == 'c' },'c')
54
+ assert_equal(['a','b','c'],ITEMS.select_until{|x| x == 'd' },'d')
55
+ assert_equal(['a','b','c'],ITEMS.select_until{|x| x == 'e' },'e')
56
+ end
57
+
58
+ def test_select_with_index
59
+ assert_equal([ ],ITEMS.select_with_index{|x,i| i < 0 },'i < 0')
60
+ assert_equal(['a' ],ITEMS.select_with_index{|x,i| i < 1 },'i < 1')
61
+ assert_equal(['a','b' ],ITEMS.select_with_index{|x,i| i < 2 },'i < 2')
62
+ assert_equal(['a','b','c'],ITEMS.select_with_index{|x,i| i < 3 },'i < 3')
63
+ assert_equal(['a','b','c'],ITEMS.select_with_index{|x,i| i < 4 },'i < 4')
64
+ end
65
+
66
+
67
+ ########################################################################
68
+ #
69
+ # nitems
70
+ #
71
+ ########################################################################
72
+
73
+
74
+ def test_nitems_while
75
+ assert_equal(0,ITEMS.nitems_while{|x| x < 'a' },'< a')
76
+ assert_equal(1,ITEMS.nitems_while{|x| x < 'b' },'< b')
77
+ assert_equal(2,ITEMS.nitems_while{|x| x < 'c' },'< c')
78
+ assert_equal(3,ITEMS.nitems_while{|x| x < 'd' },'< d')
79
+ assert_equal(3,ITEMS.nitems_while{|x| x < 'e' },'< e')
80
+ end
81
+
82
+ def test_nitems_until
83
+ assert_equal(0,ITEMS.nitems_until{|x| x == 'a' },'a')
84
+ assert_equal(1,ITEMS.nitems_until{|x| x == 'b' },'b')
85
+ assert_equal(2,ITEMS.nitems_until{|x| x == 'c' },'c')
86
+ assert_equal(3,ITEMS.nitems_until{|x| x == 'd' },'d')
87
+ assert_equal(3,ITEMS.nitems_until{|x| x == 'e' },'e')
88
+ end
89
+
90
+ def test_nitems_with_index
91
+ assert_equal(0,ITEMS.nitems_with_index{|x,i| i < 0 },'i < 0')
92
+ assert_equal(1,ITEMS.nitems_with_index{|x,i| i < 1 },'i < 1')
93
+ assert_equal(2,ITEMS.nitems_with_index{|x,i| i < 2 },'i < 2')
94
+ assert_equal(3,ITEMS.nitems_with_index{|x,i| i < 3 },'i < 3')
95
+ assert_equal(3,ITEMS.nitems_with_index{|x,i| i < 4 },'i < 4')
96
+ end
97
+
98
+
99
+ ########################################################################
100
+ #
101
+ # strings
102
+ #
103
+ ########################################################################
104
+
105
+
106
+ def test_cat
107
+ a=['anne','beth','cate']
108
+ assert_equal("annebethcate",a.cat,"cat()")
109
+ assert_equal("+anne+beth+cate",a.cat('+'),"cat('+')")
110
+ assert_equal("+anne-+beth-+cate-",a.cat("+","-"),"cat('+','-')")
111
+ end
112
+
113
+ end
114
+
115
+
116
+
117
+
metadata ADDED
@@ -0,0 +1,53 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: webget-enumerable_extend
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.2
5
+ platform: ruby
6
+ authors:
7
+ - WebGet
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-02-05 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: webget@webget.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - lib/enumerable_extensions.rb
26
+ has_rdoc: true
27
+ homepage: http://webget.com/
28
+ post_install_message:
29
+ rdoc_options: []
30
+
31
+ require_paths:
32
+ - lib
33
+ required_ruby_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: "0"
38
+ version:
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
45
+ requirements: []
46
+
47
+ rubyforge_project:
48
+ rubygems_version: 1.2.0
49
+ signing_key:
50
+ specification_version: 2
51
+ summary: Ruby Enumerable base class extensions
52
+ test_files:
53
+ - test/unit/enumerable_extensions_test.rb