ruby-nuggets 0.0.1.126

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog ADDED
@@ -0,0 +1,5 @@
1
+ = Revision history for ruby-nuggets
2
+
3
+ == x.y.z [yyyy-mm-dd]
4
+
5
+ * ...
data/HEADER ADDED
@@ -0,0 +1,27 @@
1
+ #--
2
+ ###############################################################################
3
+ # #
4
+ # A component of ruby-nuggets, some extensions to the Ruby programming #
5
+ # language. #
6
+ # #
7
+ # Copyright (C) 2007 Jens Wille #
8
+ # #
9
+ # Authors: #
10
+ # Jens Wille <jens.wille@uni-koeln.de> #
11
+ # #
12
+ # ruby-nuggets is free software; you can redistribute it and/or modify it #
13
+ # under the terms of the GNU General Public License as published by the Free #
14
+ # Software Foundation; either version 3 of the License, or (at your option) #
15
+ # any later version. #
16
+ # #
17
+ # ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT #
18
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
19
+ # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
20
+ # more details. #
21
+ # #
22
+ # You should have received a copy of the GNU General Public License along #
23
+ # with ruby-nuggets. If not, see <http://www.gnu.org/licenses/>. #
24
+ # #
25
+ ###############################################################################
26
+ #++
27
+
data/README ADDED
@@ -0,0 +1,32 @@
1
+ = ruby-nuggets - Some extensions to the Ruby programming language
2
+
3
+ == VERSION
4
+
5
+ This documentation refers to ruby-nuggets version 0.0.1
6
+
7
+
8
+ == DESCRIPTION
9
+
10
+ TODO: well, the description... ;-)
11
+
12
+
13
+ == AUTHORS
14
+
15
+ * Jens Wille <mailto:jens.wille@uni-koeln.de>
16
+
17
+
18
+ == LICENSE AND COPYRIGHT
19
+
20
+ Copyright (C) 2007 Jens Wille
21
+
22
+ ruby-nuggets is free software: you can redistribute it and/or modify it under
23
+ the terms of the GNU General Public License as published by the Free Software
24
+ Foundation, either version 3 of the License, or (at your option) any later
25
+ version.
26
+
27
+ ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT ANY
28
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
29
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
30
+
31
+ You should have received a copy of the GNU General Public License along with
32
+ ruby-nuggets. If not, see <http://www.gnu.org/licenses/>.
data/Rakefile ADDED
@@ -0,0 +1,22 @@
1
+ # Utilizes global rake-tasks: alias rake="rake -r rake -R /path/to/rakelibdir"
2
+ # (Base tasks at <http://prometheus.khi.uni-koeln.de/svn/scratch/rake-tasks/>)
3
+
4
+ require 'lib/nuggets/version'
5
+
6
+ FILES = FileList['lib/**/*.rb'].to_a
7
+ RDOCS = %w[README COPYING ChangeLog]
8
+ OTHER = FileList['[A-Z]*'].to_a
9
+
10
+ task(:doc_spec) {{
11
+ :title => 'ruby-nuggets Application documentation',
12
+ :rdoc_files => RDOCS + FILES
13
+ }}
14
+
15
+ task(:gem_spec) {{
16
+ :name => 'ruby-nuggets',
17
+ :version => Nuggets::VERSION,
18
+ :summary => 'Some extensions to the Ruby programming language',
19
+ :files => FILES + OTHER,
20
+ :require_path => 'lib',
21
+ :extra_rdoc_files => RDOCS
22
+ }}
@@ -0,0 +1,30 @@
1
+ #--
2
+ ###############################################################################
3
+ # #
4
+ # A component of ruby-nuggets, some extensions to the Ruby programming #
5
+ # language. #
6
+ # #
7
+ # Copyright (C) 2007 Jens Wille #
8
+ # #
9
+ # Authors: #
10
+ # Jens Wille <jens.wille@uni-koeln.de> #
11
+ # #
12
+ # ruby-nuggets is free software; you can redistribute it and/or modify it #
13
+ # under the terms of the GNU General Public License as published by the Free #
14
+ # Software Foundation; either version 3 of the License, or (at your option) #
15
+ # any later version. #
16
+ # #
17
+ # ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT #
18
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
19
+ # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
20
+ # more details. #
21
+ # #
22
+ # You should have received a copy of the GNU General Public License along #
23
+ # with ruby-nuggets. If not, see <http://www.gnu.org/licenses/>. #
24
+ # #
25
+ ###############################################################################
26
+ #++
27
+
28
+ Dir[__FILE__.sub(/\.rb\z/, '/**/*.rb')].sort.each { |rb|
29
+ require rb
30
+ }
@@ -0,0 +1,86 @@
1
+ #--
2
+ ###############################################################################
3
+ # #
4
+ # A component of ruby-nuggets, some extensions to the Ruby programming #
5
+ # language. #
6
+ # #
7
+ # Copyright (C) 2007 Jens Wille #
8
+ # #
9
+ # Authors: #
10
+ # Jens Wille <jens.wille@uni-koeln.de> #
11
+ # #
12
+ # ruby-nuggets is free software; you can redistribute it and/or modify it #
13
+ # under the terms of the GNU General Public License as published by the Free #
14
+ # Software Foundation; either version 3 of the License, or (at your option) #
15
+ # any later version. #
16
+ # #
17
+ # ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT #
18
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
19
+ # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
20
+ # more details. #
21
+ # #
22
+ # You should have received a copy of the GNU General Public License along #
23
+ # with ruby-nuggets. If not, see <http://www.gnu.org/licenses/>. #
24
+ # #
25
+ ###############################################################################
26
+ #++
27
+
28
+ class Array
29
+
30
+ # call-seq:
31
+ # array.comb(n, ...) => new_array
32
+ # array.comb(n, ...) { |combination| ... } => new_array
33
+ #
34
+ # Returns an array of arrays of each possible +n+-combination of _array_ for each
35
+ # given +n+. If a block is given, each +combination+ is yielded to it. Based on
36
+ # <http://blade.nagaokaut.ac.jp/~sinara/ruby/math/combinatorics/array-comb.rb>.
37
+ def comb(*sizes)
38
+ # If no sizes are given, produce all!
39
+ sizes = (0..size).to_a.reverse if sizes.empty?
40
+
41
+ # Container for our combinations
42
+ combinations = []
43
+
44
+ # Collect combinations and, optionally, yield to block.
45
+ collect_and_yield = lambda { |combination|
46
+ combinations << combination
47
+
48
+ yield(combination) if block_given?
49
+ }
50
+
51
+ sizes.each { |n|
52
+ case n
53
+ when 0 # Short-cut (breaks recursion)
54
+ collect_and_yield[[]]
55
+ when 1..size # Ignore out-of-range values
56
+ self[1..-1].comb(n - 1) { |combination|
57
+ collect_and_yield[combination.unshift(first)]
58
+ }
59
+ self[1..-1].comb(n) { |combination|
60
+ collect_and_yield[combination]
61
+ }
62
+ end
63
+ }
64
+
65
+ # Anyway, return what we've found...
66
+ combinations
67
+ end
68
+
69
+ end
70
+
71
+ if $0 == __FILE__
72
+ a = %w[a b c d]
73
+ p a
74
+
75
+ p a.comb(3)
76
+ a.comb(3) { |x|
77
+ p x
78
+ }
79
+
80
+ p a.comb(4, 2, 4)
81
+
82
+ p a.comb
83
+ a.comb { |x|
84
+ p x
85
+ }
86
+ end
@@ -0,0 +1,64 @@
1
+ #--
2
+ ###############################################################################
3
+ # #
4
+ # A component of ruby-nuggets, some extensions to the Ruby programming #
5
+ # language. #
6
+ # #
7
+ # Copyright (C) 2007 Jens Wille #
8
+ # #
9
+ # Authors: #
10
+ # Jens Wille <jens.wille@uni-koeln.de> #
11
+ # #
12
+ # ruby-nuggets is free software; you can redistribute it and/or modify it #
13
+ # under the terms of the GNU General Public License as published by the Free #
14
+ # Software Foundation; either version 3 of the License, or (at your option) #
15
+ # any later version. #
16
+ # #
17
+ # ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT #
18
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
19
+ # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
20
+ # more details. #
21
+ # #
22
+ # You should have received a copy of the GNU General Public License along #
23
+ # with ruby-nuggets. If not, see <http://www.gnu.org/licenses/>. #
24
+ # #
25
+ ###############################################################################
26
+ #++
27
+
28
+ class Array
29
+
30
+ # call-seq:
31
+ # array.flatten_once => new_array
32
+ #
33
+ # Flatten _array_ by _one_ level only.
34
+ def flatten_once
35
+ inject([]) { |flat, element|
36
+ case element
37
+ when Array
38
+ flat + element
39
+ else
40
+ flat << element
41
+ end
42
+ }
43
+ end
44
+
45
+ # call-seq:
46
+ # array.flatten_once! => array
47
+ #
48
+ # Destructive version of #flatten_once.
49
+ def flatten_once!
50
+ replace flatten_once
51
+ end
52
+
53
+ end
54
+
55
+ if $0 == __FILE__
56
+ a = [1, 2, [3, 4, 5], 6, [7, [8, 9]]]
57
+ p a
58
+
59
+ p a.flatten
60
+ p a.flatten_once
61
+
62
+ a.flatten_once!
63
+ p a
64
+ end
@@ -0,0 +1,124 @@
1
+ #--
2
+ ###############################################################################
3
+ # #
4
+ # A component of ruby-nuggets, some extensions to the Ruby programming #
5
+ # language. #
6
+ # #
7
+ # Copyright (C) 2007 Jens Wille #
8
+ # #
9
+ # Authors: #
10
+ # Jens Wille <jens.wille@uni-koeln.de> #
11
+ # #
12
+ # ruby-nuggets is free software; you can redistribute it and/or modify it #
13
+ # under the terms of the GNU General Public License as published by the Free #
14
+ # Software Foundation; either version 3 of the License, or (at your option) #
15
+ # any later version. #
16
+ # #
17
+ # ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT #
18
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
19
+ # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
20
+ # more details. #
21
+ # #
22
+ # You should have received a copy of the GNU General Public License along #
23
+ # with ruby-nuggets. If not, see <http://www.gnu.org/licenses/>. #
24
+ # #
25
+ ###############################################################################
26
+ #++
27
+
28
+ require File.join(File.dirname(__FILE__), 'combination')
29
+
30
+ class Array
31
+
32
+ # call-seq:
33
+ # array % other_array => aString
34
+ # array % str => aString
35
+ #
36
+ # Format--Uses the first string in _array_ for which the corresponding
37
+ # combination of _other_array_ does not contain blank elements as a format
38
+ # specification, and returns the result of applying it to that combination
39
+ # (cf. String#%). Returns an empty string if _other_array_ is empty.
40
+ #
41
+ # Applies to string argument accordingly: First string in _array_ applied to
42
+ # _str_; empty string if _str_ is empty.
43
+ def %(args)
44
+ opts = { :sep => ', ' }
45
+ opts.update(pop) if last.is_a?(Hash)
46
+
47
+ default = lambda { |n|
48
+ ['%s'] * n * opts[:sep]
49
+ }
50
+
51
+ case args
52
+ when String
53
+ return (first || default[1]) % args unless
54
+ args.nil? || args.empty?
55
+ when Array
56
+ i = 0
57
+ [*args].comb { |x|
58
+ return (self[i] || default[x.size]) % x unless
59
+ x.empty? || x.any? { |y|
60
+ y.nil? || y.empty?
61
+ }
62
+
63
+ i += 1
64
+ }
65
+ end
66
+
67
+ ''
68
+ end
69
+
70
+ end
71
+
72
+ if $0 == __FILE__
73
+ [[], 'string', ''].each { |x|
74
+ p x
75
+ puts '>> ' << ['"%s"'] % x
76
+ }
77
+
78
+ [ ['place', 'country'],
79
+ ['place', '' ],
80
+ ['', 'country'],
81
+ ['', '' ]
82
+ ].each { |x|
83
+ p x
84
+ puts '>> ' << ['%s, (%s)', '%s', '(%s)'] % x
85
+ }
86
+
87
+ puts '=' * 80
88
+
89
+ [ ['author', 'title', 'year'],
90
+ ['author', 'title', '' ],
91
+ ['author', '', 'year'],
92
+ ['', 'title', 'year'],
93
+ ['author', '' , '' ],
94
+ ['', 'title', '' ],
95
+ ['', '', 'year'],
96
+ ['', '', '' ]
97
+ ].each { |x|
98
+ p x
99
+ puts '>> ' << ['%s: %s (%s)', '%s: %s', '%s (%s)', '%s (%s)'] % x
100
+ }
101
+
102
+ puts '=' * 80
103
+
104
+ [ ['1', '2', '3', '4'],
105
+ ['1', '2', '3', '' ],
106
+ ['1', '2', '', '4'],
107
+ ['1', '', '3', '4'],
108
+ ['', '2', '3', '4'],
109
+ ['1', '2', '', '' ],
110
+ ['1', '', '3', '' ],
111
+ ['1', '', '', '4'],
112
+ ['', '2', '3', '' ],
113
+ ['', '2', '', '4'],
114
+ ['', '', '3', '4'],
115
+ ['1', '', '', '' ],
116
+ ['', '2', '', '' ],
117
+ ['', '', '3', '' ],
118
+ ['', '', '', '4'],
119
+ ['', '', '', '' ]
120
+ ].each { |x|
121
+ p x
122
+ puts '>> ' << [{ :sep => ':' }] % x
123
+ }
124
+ end
@@ -0,0 +1,62 @@
1
+ #--
2
+ ###############################################################################
3
+ # #
4
+ # A component of ruby-nuggets, some extensions to the Ruby programming #
5
+ # language. #
6
+ # #
7
+ # Copyright (C) 2007 Jens Wille #
8
+ # #
9
+ # Authors: #
10
+ # Jens Wille <jens.wille@uni-koeln.de> #
11
+ # #
12
+ # ruby-nuggets is free software; you can redistribute it and/or modify it #
13
+ # under the terms of the GNU General Public License as published by the Free #
14
+ # Software Foundation; either version 3 of the License, or (at your option) #
15
+ # any later version. #
16
+ # #
17
+ # ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT #
18
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
19
+ # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
20
+ # more details. #
21
+ # #
22
+ # You should have received a copy of the GNU General Public License along #
23
+ # with ruby-nuggets. If not, see <http://www.gnu.org/licenses/>. #
24
+ # #
25
+ ###############################################################################
26
+ #++
27
+
28
+ class Array
29
+
30
+ # call-seq:
31
+ # array.in_order(*ordered) => new_array
32
+ #
33
+ # Force order, but ignore non-existing and keep remaining.
34
+ #
35
+ # Examples:
36
+ # [:created_at, :email, :login, :updated_at].in_order(:login, :email) #=> [:login, :email, :created_at, :updated_at]
37
+ # [:created_at, :email, :login, :updated_at].in_order(:email, :address) #=> [:email, :created_at, :login, :updated_at]
38
+ def in_order(*ordered)
39
+ ordered &= self
40
+ ordered + (self - ordered)
41
+ end
42
+
43
+ # call-seq:
44
+ # array.in_order!(*ordered) => array
45
+ #
46
+ # Destructive version of #in_order.
47
+ def in_order!(*ordered)
48
+ replace in_order(*ordered)
49
+ end
50
+
51
+ end
52
+
53
+ if $0 == __FILE__
54
+ a = [:created_at, :email, :login, :updated_at]
55
+ p a
56
+
57
+ p a.in_order(:login, :email)
58
+ p a.in_order(:email, :address)
59
+
60
+ a.in_order!(:login, :email)
61
+ p a
62
+ end