blackwinter-ruby-nuggets 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +676 -0
- data/ChangeLog +5 -0
- data/README +60 -0
- data/Rakefile +20 -0
- data/lib/nuggets/all.rb +34 -0
- data/lib/nuggets/array/combination.rb +86 -0
- data/lib/nuggets/array/flatten_once.rb +68 -0
- data/lib/nuggets/array/format.rb +124 -0
- data/lib/nuggets/array/in_order.rb +62 -0
- data/lib/nuggets/array/monotone.rb +101 -0
- data/lib/nuggets/array/only.rb +56 -0
- data/lib/nuggets/array/rand.rb +45 -0
- data/lib/nuggets/array/shuffle.rb +133 -0
- data/lib/nuggets/array/to_hash.rb +86 -0
- data/lib/nuggets/enumerable/agrep.rb +82 -0
- data/lib/nuggets/enumerable/all_any_extended.rb +99 -0
- data/lib/nuggets/enumerable/minmax.rb +119 -0
- data/lib/nuggets/env/user_encoding.rb +53 -0
- data/lib/nuggets/env/user_home.rb +54 -0
- data/lib/nuggets/file/which.rb +74 -0
- data/lib/nuggets/hash/at.rb +87 -0
- data/lib/nuggets/hash/in_order.rb +52 -0
- data/lib/nuggets/hash/insert.rb +65 -0
- data/lib/nuggets/hash/only.rb +68 -0
- data/lib/nuggets/integer/factorial.rb +74 -0
- data/lib/nuggets/integer/to_binary_s.rb +47 -0
- data/lib/nuggets/io/agrep.rb +43 -0
- data/lib/nuggets/io/modes.rb +133 -0
- data/lib/nuggets/numeric/between.rb +2 -0
- data/lib/nuggets/numeric/duration.rb +109 -0
- data/lib/nuggets/numeric/limit.rb +70 -0
- data/lib/nuggets/numeric/signum.rb +60 -0
- data/lib/nuggets/numeric/to_multiple.rb +68 -0
- data/lib/nuggets/object/blank.rb +119 -0
- data/lib/nuggets/object/boolean.rb +69 -0
- data/lib/nuggets/object/eigenclass.rb +2 -0
- data/lib/nuggets/object/ghost_class.rb +2 -0
- data/lib/nuggets/object/metaclass.rb +2 -0
- data/lib/nuggets/object/msend.rb +55 -0
- data/lib/nuggets/object/singleton_class.rb +150 -0
- data/lib/nuggets/object/uniclass.rb +2 -0
- data/lib/nuggets/object/virtual_class.rb +2 -0
- data/lib/nuggets/proc/bind.rb +68 -0
- data/lib/nuggets/string/capitalize_first.rb +63 -0
- data/lib/nuggets/string/case.rb +104 -0
- data/lib/nuggets/string/evaluate.rb +53 -0
- data/lib/nuggets/string/msub.rb +82 -0
- data/lib/nuggets/string/nsub.rb +80 -0
- data/lib/nuggets/string/sub_with_md.rb +131 -0
- data/lib/nuggets/string/word_wrap.rb +111 -0
- data/lib/nuggets/tempfile/open.rb +54 -0
- data/lib/nuggets/uri/content_type.rb +65 -0
- data/lib/nuggets/uri/exist.rb +63 -0
- data/lib/nuggets/util/added_methods/init.rb +3 -0
- data/lib/nuggets/util/added_methods.rb +407 -0
- data/lib/nuggets/util/ansicolor2css.rb +90 -0
- data/lib/nuggets/util/content_type.rb +104 -0
- data/lib/nuggets/util/dotted_decimal.rb +66 -0
- data/lib/nuggets/util/i18n.rb +143 -0
- data/lib/nuggets/version.rb +27 -0
- data/lib/nuggets.rb +73 -0
- metadata +124 -0
@@ -0,0 +1,131 @@
|
|
1
|
+
#--
|
2
|
+
###############################################################################
|
3
|
+
# #
|
4
|
+
# A component of ruby-nuggets, some extensions to the Ruby programming #
|
5
|
+
# language. #
|
6
|
+
# #
|
7
|
+
# Copyright (C) 2007-2008 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 String
|
29
|
+
|
30
|
+
alias_method :sub_without_md, :sub
|
31
|
+
alias_method :sub_without_md!, :sub!
|
32
|
+
alias_method :gsub_without_md, :gsub
|
33
|
+
alias_method :gsub_without_md!, :gsub!
|
34
|
+
|
35
|
+
# call-seq:
|
36
|
+
# str.sub_with_md(pattern) { |match_data| ... } => new_str
|
37
|
+
#
|
38
|
+
# Just like #sub, but passes the MatchData object instead of the current
|
39
|
+
# match string to the block.
|
40
|
+
def sub_with_md(pattern, replacement = nil)
|
41
|
+
replacement ?
|
42
|
+
sub_without_md(pattern, replacement) :
|
43
|
+
(_dup = dup).sub_with_md!(pattern) { |*a| yield(*a) } || _dup
|
44
|
+
end
|
45
|
+
|
46
|
+
# call-seq:
|
47
|
+
# str.sub_with_md!(pattern) { |match_data| ... } => str or nil
|
48
|
+
#
|
49
|
+
# Destructive version of #sub_with_md.
|
50
|
+
def sub_with_md!(pattern, replacement = nil)
|
51
|
+
replacement ?
|
52
|
+
sub_without_md!(pattern, replacement) :
|
53
|
+
sub_without_md!(pattern) { |match| yield $~ }
|
54
|
+
end
|
55
|
+
|
56
|
+
# call-seq:
|
57
|
+
# str.gsub_with_md(pattern) { |match_data| ... } => new_str
|
58
|
+
#
|
59
|
+
# Just like #gsub, but passes the MatchData object instead of the current
|
60
|
+
# match string to the block.
|
61
|
+
def gsub_with_md(pattern, replacement = nil)
|
62
|
+
replacement ?
|
63
|
+
gsub_without_md(pattern, replacement) :
|
64
|
+
(_dup = dup).gsub_with_md!(pattern) { |*a| yield(*a) } || _dup
|
65
|
+
end
|
66
|
+
|
67
|
+
# call-seq:
|
68
|
+
# str.gsub_with_md!(pattern) { |match_data| ... } => str or nil
|
69
|
+
#
|
70
|
+
# Destructive version of #gsub_with_md.
|
71
|
+
def gsub_with_md!(pattern, replacement = nil)
|
72
|
+
replacement ?
|
73
|
+
gsub_without_md!(pattern, replacement) :
|
74
|
+
gsub_without_md!(pattern) { |match| yield $~ }
|
75
|
+
end
|
76
|
+
|
77
|
+
# call-seq:
|
78
|
+
# gimme_match_data!
|
79
|
+
#
|
80
|
+
# Replaces the traditional substitution methods with their MatchData passing
|
81
|
+
# equivalents. USE WITH CAUTION!
|
82
|
+
def self.gimme_match_data!
|
83
|
+
alias_method :sub, :sub_with_md
|
84
|
+
alias_method :sub!, :sub_with_md!
|
85
|
+
alias_method :gsub, :gsub_with_md
|
86
|
+
alias_method :gsub!, :gsub_with_md!
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
if $0 == __FILE__
|
92
|
+
# stupid example, but it proves the point ;-)
|
93
|
+
s = 'Foo, Bar - Baz'
|
94
|
+
p s
|
95
|
+
|
96
|
+
p s.gsub(/\w(\w+)(\W*)/) { |m|
|
97
|
+
#p m
|
98
|
+
"#{$1.gsub(/[ao]/, 'X')}#{$2}"
|
99
|
+
}
|
100
|
+
|
101
|
+
p s.gsub_with_md(/\w(\w+)(\W*)/) { |md|
|
102
|
+
#p md[0]
|
103
|
+
"#{md[1].gsub(/[ao]/, 'X')}#{md[2]}"
|
104
|
+
}
|
105
|
+
|
106
|
+
p s.gsub_with_md(/\w(\w+)(\W*)/) { |md|
|
107
|
+
#p md[0]
|
108
|
+
"#{md[1].gsub_with_md(/[ao]/) { |md2| md2[0].upcase }}#{md[2]}"
|
109
|
+
}
|
110
|
+
|
111
|
+
String.gimme_match_data!
|
112
|
+
|
113
|
+
p s.gsub(/\w(\w+)(\W*)/) { |m|
|
114
|
+
#p m
|
115
|
+
begin
|
116
|
+
"#{$1.gsub(/[ao]/, 'X')}#{$2}"
|
117
|
+
rescue NoMethodError => err
|
118
|
+
warn err
|
119
|
+
end
|
120
|
+
}
|
121
|
+
|
122
|
+
p s.gsub(/\w(\w+)(\W*)/) { |md|
|
123
|
+
#p md[0]
|
124
|
+
"#{md[1].gsub(/[ao]/, 'X')}#{md[2]}"
|
125
|
+
}
|
126
|
+
|
127
|
+
p s.gsub(/\w(\w+)(\W*)/) { |md|
|
128
|
+
#p md[0]
|
129
|
+
"#{md[1].gsub(/[ao]/) { |md2| md2[0].upcase }}#{md[2]}"
|
130
|
+
}
|
131
|
+
end
|
@@ -0,0 +1,111 @@
|
|
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 'enumerator'
|
29
|
+
|
30
|
+
class String
|
31
|
+
|
32
|
+
# call-seq:
|
33
|
+
# str.word_wrap(line_width) => new_str
|
34
|
+
#
|
35
|
+
# Word wrap a string not exceeding +line_width+. Based on the Ruby Facets
|
36
|
+
# implementation, but preserves paragraphs. Thus
|
37
|
+
# <tt>str == str.word_wrap(str.split("\n").map { |l| l.length }.max)</tt>.
|
38
|
+
def word_wrap(line_width = 80, as_array = false)
|
39
|
+
wrapped = []
|
40
|
+
|
41
|
+
split(/(\n+)/).to_enum(:each_slice, 2).each { |paragraph, linebreaks|
|
42
|
+
wrapped << paragraph.word_wrap_paragraph!(line_width) << linebreaks
|
43
|
+
}
|
44
|
+
|
45
|
+
wrapped = wrapped.join
|
46
|
+
|
47
|
+
as_array ? wrapped.split("\n") : wrapped
|
48
|
+
end
|
49
|
+
|
50
|
+
# call-seq:
|
51
|
+
# str.word_wrap!(line_width) => str
|
52
|
+
#
|
53
|
+
# As with #word_wrap, but modifies the string in place.
|
54
|
+
def word_wrap!(line_width = 80)
|
55
|
+
replace word_wrap(line_width)
|
56
|
+
end
|
57
|
+
|
58
|
+
# call-seq:
|
59
|
+
# str.word_wrap_paragraph(line_width) => new_str
|
60
|
+
#
|
61
|
+
# Similar to #word_wrap, but assumes a single paragraph.
|
62
|
+
def word_wrap_paragraph(line_width = 80)
|
63
|
+
(_dup = dup).word_wrap_paragraph!(line_width) || _dup
|
64
|
+
end
|
65
|
+
|
66
|
+
# call-seq:
|
67
|
+
# str.word_wrap_paragraph!(line_width) => str
|
68
|
+
#
|
69
|
+
# Destructive version of #word_wrap_paragraph.
|
70
|
+
def word_wrap_paragraph!(line_width = 80)
|
71
|
+
gsub!(/(.{1,#{line_width}})(?:\s+|$)/, "\\1\n")
|
72
|
+
sub!(/\n$/, '')
|
73
|
+
|
74
|
+
self
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
if $0 == __FILE__
|
80
|
+
s = <<EOT
|
81
|
+
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nullam nulla arcu,
|
82
|
+
ullamcorper non, vulputate eget, elementum quis, sapien. Quisque consequat
|
83
|
+
porta enim. Phasellus porta libero et turpis. Ut felis.
|
84
|
+
|
85
|
+
Phasellus eget est a enim rutrum accumsan. Integer nec purus. Maecenas
|
86
|
+
facilisis urna sed arcu. Suspendisse potenti.
|
87
|
+
|
88
|
+
|
89
|
+
Vestibulum lacus metus, faucibus sit amet, mattis non, mollis sed, pede. Aenean
|
90
|
+
vitae sem nec sem euismod sollicitudin. Cras rhoncus.
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
Phasellus condimentum, ante a cursus dictum, lectus ipsum convallis magna, sed
|
95
|
+
tincidunt massa eros vitae ante. Suspendisse nec sem.
|
96
|
+
In hac habitasse platea dictumst. Fusce purus leo, ullamcorper sit amet, luctus
|
97
|
+
in, mollis mollis, enim. In adipiscing erat.
|
98
|
+
EOT
|
99
|
+
puts s
|
100
|
+
|
101
|
+
puts '=' * 80
|
102
|
+
|
103
|
+
puts s.word_wrap(60)
|
104
|
+
puts '=' * 80
|
105
|
+
puts s.word_wrap(79)
|
106
|
+
|
107
|
+
puts '=' * 80
|
108
|
+
|
109
|
+
s.word_wrap!(60)
|
110
|
+
puts s
|
111
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
#--
|
2
|
+
###############################################################################
|
3
|
+
# #
|
4
|
+
# A component of ruby-nuggets, some extensions to the Ruby programming #
|
5
|
+
# language. #
|
6
|
+
# #
|
7
|
+
# Copyright (C) 2007-2008 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 'tempfile'
|
29
|
+
|
30
|
+
class Tempfile
|
31
|
+
|
32
|
+
alias_method :_nuggets_original_open, :open
|
33
|
+
|
34
|
+
# If no block is given, this is a synonym for new().
|
35
|
+
#
|
36
|
+
# If a block is given, it will be passed tempfile as an argument,
|
37
|
+
# and the tempfile will automatically be closed when the block
|
38
|
+
# terminates. In this case, open() returns tempfile -- in contrast
|
39
|
+
# to the original implementation, which returns nil.
|
40
|
+
def self.open(*args)
|
41
|
+
tempfile = new(*args)
|
42
|
+
|
43
|
+
if block_given?
|
44
|
+
begin
|
45
|
+
yield tempfile
|
46
|
+
ensure
|
47
|
+
tempfile.close
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
tempfile
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
#--
|
2
|
+
###############################################################################
|
3
|
+
# #
|
4
|
+
# A component of ruby-nuggets, some extensions to the Ruby programming #
|
5
|
+
# language. #
|
6
|
+
# #
|
7
|
+
# Copyright (C) 2007-2008 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 'socket'
|
29
|
+
require 'open-uri'
|
30
|
+
|
31
|
+
module URI
|
32
|
+
|
33
|
+
class << self
|
34
|
+
|
35
|
+
# call-seq:
|
36
|
+
# URI.content_type(uri) => aString or nil
|
37
|
+
#
|
38
|
+
# Return the content type of +uri+, or +nil+ if not found.
|
39
|
+
def content_type(uri)
|
40
|
+
open(uri.to_s).content_type
|
41
|
+
rescue OpenURI::HTTPError, SocketError, Errno::ENOENT, Errno::EHOSTUNREACH, NoMethodError
|
42
|
+
nil
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
if $0 == __FILE__
|
50
|
+
%w[
|
51
|
+
http://www.google.de
|
52
|
+
htp://www.google.de
|
53
|
+
www.google.de
|
54
|
+
http://blackwinter.de/misc/
|
55
|
+
http://blackwinter.de/misc/ww.png
|
56
|
+
http://blackwinter.de/misc/suicide_is_painless.mid
|
57
|
+
http://blackwinter.de/misc/expand_macros.pl.gz
|
58
|
+
http://blackwinter.de/misc/blanc60302523.nth
|
59
|
+
http://blackwinter.de/bla
|
60
|
+
http://blawinter.de
|
61
|
+
http://192.168.12.34/foo/bar
|
62
|
+
].each { |u|
|
63
|
+
p [u, URI.content_type(u)]
|
64
|
+
}
|
65
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
#--
|
2
|
+
###############################################################################
|
3
|
+
# #
|
4
|
+
# A component of ruby-nuggets, some extensions to the Ruby programming #
|
5
|
+
# language. #
|
6
|
+
# #
|
7
|
+
# Copyright (C) 2007-2008 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 'open-uri'
|
29
|
+
|
30
|
+
module URI
|
31
|
+
|
32
|
+
class << self
|
33
|
+
|
34
|
+
# call-seq:
|
35
|
+
# URI.exist?(uri) => true or false
|
36
|
+
#
|
37
|
+
# Return +true+ if the named URI exists.
|
38
|
+
def exist?(uri)
|
39
|
+
open(uri.to_s)
|
40
|
+
true
|
41
|
+
rescue OpenURI::HTTPError, SocketError, Errno::ENOENT
|
42
|
+
false
|
43
|
+
end
|
44
|
+
alias_method :exists?, :exist?
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
if $0 == __FILE__
|
51
|
+
%w[
|
52
|
+
http://www.google.de
|
53
|
+
htp://www.google.de
|
54
|
+
www.google.de
|
55
|
+
http://xuugle.de
|
56
|
+
http://blackwinter.de
|
57
|
+
http://blackwinter.de/bla
|
58
|
+
http://blackwinter.de/index.html
|
59
|
+
http://blackwinter.de/index.htm
|
60
|
+
].each { |u|
|
61
|
+
p [u, URI.exist?(u)]
|
62
|
+
}
|
63
|
+
end
|