facets 2.8.0 → 2.8.1
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/AUTHORS +6 -0
- data/MANIFEST +10 -6
- data/lib/core/facets.rb +6 -3
- data/lib/core/facets/class/descendants.rb +48 -0
- data/lib/core/facets/class/descendents.rb +1 -34
- data/lib/core/facets/denumerable.rb +2 -2
- data/lib/core/facets/enumerable/collect_with_index.rb +2 -0
- data/lib/core/facets/enumerable/compact_map.rb +2 -3
- data/lib/core/facets/enumerable/defer.rb +0 -4
- data/lib/core/facets/kernel/extend.rb +1 -0
- data/lib/core/facets/numeric/length.rb +10 -0
- data/lib/core/facets/numeric/size.rb +10 -0
- data/lib/core/facets/string/expand_tab.rb +4 -4
- data/lib/core/facets/string/indent.rb +0 -82
- data/lib/core/facets/string/tab.rb +1 -4
- data/lib/more/facets/date.rb +1 -1
- data/lib/more/facets/duration.rb +1 -1
- data/lib/more/facets/filelist.rb +4 -4
- data/lib/more/facets/pathname.rb +57 -43
- data/meta/{suite → collection} +0 -0
- data/meta/{abstract → description} +0 -0
- data/meta/{package → name} +0 -0
- data/meta/version +1 -1
- data/test/core/enumerable/{test_collect.rb → test_compact_map.rb} +3 -10
- data/test/core/enumerable/test_map_with_index.rb +11 -0
- data/test/core/string/test_expand_tabs.rb +67 -0
- data/test/core/string/test_tab.rb +0 -60
- metadata +15 -10
- data/lib/core/facets/integer/length.rb +0 -16
- data/test/more/test_recorder.rb +0 -30
data/AUTHORS
CHANGED
@@ -9,6 +9,9 @@
|
|
9
9
|
The following developers have recently contributed to the development of Facets.
|
10
10
|
They are held in the highest regard for their efforts.
|
11
11
|
|
12
|
+
* Roger Pack Added generational depth to Class#descendants.
|
13
|
+
* Marco Otte-Witte Fixed return value of Kernel#extend.
|
14
|
+
* Mauro Tortonesi Fixed issues with duration.rb and date.rb.
|
12
15
|
* Sandor Szücs Fixes for String#align_right and #align_left.
|
13
16
|
* Tyler Rick Fixed bug in Time#hence and #ago.
|
14
17
|
* Brian Candler Provided Enumerator::Filter.
|
@@ -64,6 +67,8 @@ All of their hard work is greatly appreciated.
|
|
64
67
|
* Jan Molic
|
65
68
|
* George Moschovitis
|
66
69
|
* Michael Neumann
|
70
|
+
* Marco Otte-Witte
|
71
|
+
* Roger Pack
|
67
72
|
* Tim Pease
|
68
73
|
* Jonas Pfenniger
|
69
74
|
* Ryan Platte
|
@@ -75,6 +80,7 @@ All of their hard work is greatly appreciated.
|
|
75
80
|
* Gavin Sinclair
|
76
81
|
* Tilo Sloboda
|
77
82
|
* Phil Tomson
|
83
|
+
* Mauro Tortonesi
|
78
84
|
* Peter Vanbroekhoven
|
79
85
|
* Jim Weirich
|
80
86
|
* Jeff Wood
|
data/MANIFEST
CHANGED
@@ -37,6 +37,7 @@ lib/core/facets/class/cattr.rb
|
|
37
37
|
lib/core/facets/class/cattr_accessor.rb
|
38
38
|
lib/core/facets/class/cattr_reader.rb
|
39
39
|
lib/core/facets/class/cattr_writer.rb
|
40
|
+
lib/core/facets/class/descendants.rb
|
40
41
|
lib/core/facets/class/descendents.rb
|
41
42
|
lib/core/facets/class/methodize.rb
|
42
43
|
lib/core/facets/class/pathize.rb
|
@@ -63,6 +64,7 @@ lib/core/facets/duplicable.rb
|
|
63
64
|
lib/core/facets/enumerable/accumulate.rb
|
64
65
|
lib/core/facets/enumerable/cluster_by.rb
|
65
66
|
lib/core/facets/enumerable/collect.rb
|
67
|
+
lib/core/facets/enumerable/collect_with_index.rb
|
66
68
|
lib/core/facets/enumerable/commonality.rb
|
67
69
|
lib/core/facets/enumerable/compact_map.rb
|
68
70
|
lib/core/facets/enumerable/count.rb
|
@@ -164,7 +166,6 @@ lib/core/facets/hash.rb
|
|
164
166
|
lib/core/facets/indexable.rb
|
165
167
|
lib/core/facets/integer/even.rb
|
166
168
|
lib/core/facets/integer/factorial.rb
|
167
|
-
lib/core/facets/integer/length.rb
|
168
169
|
lib/core/facets/integer/multiple.rb
|
169
170
|
lib/core/facets/integer/odd.rb
|
170
171
|
lib/core/facets/integer/of.rb
|
@@ -270,7 +271,9 @@ lib/core/facets/nilclass/to_f.rb
|
|
270
271
|
lib/core/facets/nilclass.rb
|
271
272
|
lib/core/facets/numeric/approx.rb
|
272
273
|
lib/core/facets/numeric/distance.rb
|
274
|
+
lib/core/facets/numeric/length.rb
|
273
275
|
lib/core/facets/numeric/round.rb
|
276
|
+
lib/core/facets/numeric/size.rb
|
274
277
|
lib/core/facets/numeric.rb
|
275
278
|
lib/core/facets/objectspace/classes.rb
|
276
279
|
lib/core/facets/objectspace/op_fetch.rb
|
@@ -467,20 +470,20 @@ lib/more/facets/uri.rb
|
|
467
470
|
lib/more/facets/version.rb
|
468
471
|
lib/more/facets/yaml.rb
|
469
472
|
lib/more/facets/zlib.rb
|
470
|
-
meta/abstract
|
471
473
|
meta/authors
|
474
|
+
meta/collection
|
472
475
|
meta/contact
|
473
476
|
meta/contributors
|
474
477
|
meta/created
|
478
|
+
meta/description
|
475
479
|
meta/homepage
|
476
480
|
meta/license
|
477
481
|
meta/loadpath
|
478
|
-
meta/
|
482
|
+
meta/name
|
479
483
|
meta/released
|
480
484
|
meta/repository
|
481
485
|
meta/sitemap
|
482
486
|
meta/slogan
|
483
|
-
meta/suite
|
484
487
|
meta/summary
|
485
488
|
meta/version
|
486
489
|
script/conflicts
|
@@ -519,8 +522,8 @@ test/core/dir/test_multiglob.rb
|
|
519
522
|
test/core/dir/test_parent.rb
|
520
523
|
test/core/dir/test_recurse.rb
|
521
524
|
test/core/enumerable/test_cluster_by.rb
|
522
|
-
test/core/enumerable/test_collect.rb
|
523
525
|
test/core/enumerable/test_commonality.rb
|
526
|
+
test/core/enumerable/test_compact_map.rb
|
524
527
|
test/core/enumerable/test_count.rb
|
525
528
|
test/core/enumerable/test_defer.rb
|
526
529
|
test/core/enumerable/test_each_by.rb
|
@@ -531,6 +534,7 @@ test/core/enumerable/test_frequency.rb
|
|
531
534
|
test/core/enumerable/test_group_by.rb
|
532
535
|
test/core/enumerable/test_inject.rb
|
533
536
|
test/core/enumerable/test_map_detect.rb
|
537
|
+
test/core/enumerable/test_map_with_index.rb
|
534
538
|
test/core/enumerable/test_mash.rb
|
535
539
|
test/core/enumerable/test_modulate.rb
|
536
540
|
test/core/enumerable/test_none.rb
|
@@ -659,6 +663,7 @@ test/core/string/test_divide.rb
|
|
659
663
|
test/core/string/test_each_char.rb
|
660
664
|
test/core/string/test_each_word.rb
|
661
665
|
test/core/string/test_end_with.rb
|
666
|
+
test/core/string/test_expand_tabs.rb
|
662
667
|
test/core/string/test_fold.rb
|
663
668
|
test/core/string/test_indent.rb
|
664
669
|
test/core/string/test_interpolate.rb
|
@@ -737,7 +742,6 @@ test/more/test_openobject.rb
|
|
737
742
|
test/more/test_ostruct.rb
|
738
743
|
test/more/test_partial.rb
|
739
744
|
test/more/test_random.rb
|
740
|
-
test/more/test_recorder.rb
|
741
745
|
test/more/test_shellwords.rb
|
742
746
|
test/more/test_succ.rb
|
743
747
|
test/more/test_thread.rb
|
data/lib/core/facets.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
# Generated @
|
2
|
-
#:till+
|
1
|
+
# Generated @ Fri Dec 25 11:47:16 -0500 2009 #:till: ^@ <%= Time.now %>
|
2
|
+
#:till+380: <%= Dir['facets/**/*.rb'].map{ |f| %[require "#{f}"] }.sort.join("\n") %>
|
3
3
|
require "facets/array.rb"
|
4
4
|
require "facets/array/combination.rb"
|
5
5
|
require "facets/array/conjoin.rb"
|
@@ -37,6 +37,7 @@ require "facets/class/cattr.rb"
|
|
37
37
|
require "facets/class/cattr_accessor.rb"
|
38
38
|
require "facets/class/cattr_reader.rb"
|
39
39
|
require "facets/class/cattr_writer.rb"
|
40
|
+
require "facets/class/descendants.rb"
|
40
41
|
require "facets/class/descendents.rb"
|
41
42
|
require "facets/class/methodize.rb"
|
42
43
|
require "facets/class/pathize.rb"
|
@@ -63,6 +64,7 @@ require "facets/enumerable.rb"
|
|
63
64
|
require "facets/enumerable/accumulate.rb"
|
64
65
|
require "facets/enumerable/cluster_by.rb"
|
65
66
|
require "facets/enumerable/collect.rb"
|
67
|
+
require "facets/enumerable/collect_with_index.rb"
|
66
68
|
require "facets/enumerable/commonality.rb"
|
67
69
|
require "facets/enumerable/compact_map.rb"
|
68
70
|
require "facets/enumerable/count.rb"
|
@@ -164,7 +166,6 @@ require "facets/indexable.rb"
|
|
164
166
|
require "facets/integer.rb"
|
165
167
|
require "facets/integer/even.rb"
|
166
168
|
require "facets/integer/factorial.rb"
|
167
|
-
require "facets/integer/length.rb"
|
168
169
|
require "facets/integer/multiple.rb"
|
169
170
|
require "facets/integer/odd.rb"
|
170
171
|
require "facets/integer/of.rb"
|
@@ -270,7 +271,9 @@ require "facets/nilclass/to_f.rb"
|
|
270
271
|
require "facets/numeric.rb"
|
271
272
|
require "facets/numeric/approx.rb"
|
272
273
|
require "facets/numeric/distance.rb"
|
274
|
+
require "facets/numeric/length.rb"
|
273
275
|
require "facets/numeric/round.rb"
|
276
|
+
require "facets/numeric/size.rb"
|
274
277
|
require "facets/objectspace.rb"
|
275
278
|
require "facets/objectspace/classes.rb"
|
276
279
|
require "facets/objectspace/op_fetch.rb"
|
@@ -0,0 +1,48 @@
|
|
1
|
+
class Class
|
2
|
+
|
3
|
+
# List all descedents of this class.
|
4
|
+
#
|
5
|
+
# class X ; end
|
6
|
+
# class A < X; end
|
7
|
+
# class B < X; end
|
8
|
+
# X.descendents #=> [A,B]
|
9
|
+
#
|
10
|
+
# You may also limit the generational distance
|
11
|
+
# the subclass may be from the parent class.
|
12
|
+
#
|
13
|
+
# class X ; end
|
14
|
+
# class A < X; end
|
15
|
+
# class B < A; end
|
16
|
+
# X.descendents #=> [A, B]
|
17
|
+
# X.descendents(1) #=> [A]
|
18
|
+
#
|
19
|
+
# NOTE: This is a intensive operation. Do not
|
20
|
+
# expect it to be super fast.
|
21
|
+
|
22
|
+
def descendants(generations=nil)
|
23
|
+
subclass = []
|
24
|
+
ObjectSpace.each_object(Class) do |c|
|
25
|
+
ancestors = c.ancestors[0..(generations || -1)]
|
26
|
+
if ancestors.include?(self) and self != c
|
27
|
+
subclass << c
|
28
|
+
end
|
29
|
+
end
|
30
|
+
return subclass
|
31
|
+
end
|
32
|
+
|
33
|
+
#
|
34
|
+
alias_method :descendents, :descendants
|
35
|
+
|
36
|
+
unless defined?(::ActiveSupport)
|
37
|
+
|
38
|
+
# Obvious alias for descendants.
|
39
|
+
#
|
40
|
+
# NOTE: ActiveSupport returns string names rather
|
41
|
+
# then actual classes, so this is excluded
|
42
|
+
# if ActiveSupport has already been loaded.
|
43
|
+
alias_method :subclasses, :descendants
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
@@ -1,34 +1 @@
|
|
1
|
-
class
|
2
|
-
|
3
|
-
# List all descedents of this class.
|
4
|
-
#
|
5
|
-
# class X ; end
|
6
|
-
# class A < X; end
|
7
|
-
# class B < X; end
|
8
|
-
# X.descendents #=> [A,B]
|
9
|
-
#
|
10
|
-
# NOTE: This is a intesive operation. Do not
|
11
|
-
# expect it to be super fast.
|
12
|
-
def descendents
|
13
|
-
subclass = []
|
14
|
-
ObjectSpace.each_object( Class ) do |c|
|
15
|
-
if c.ancestors.include?( self ) and self != c
|
16
|
-
subclass << c
|
17
|
-
end
|
18
|
-
end
|
19
|
-
return subclass
|
20
|
-
end
|
21
|
-
|
22
|
-
unless defined?(::ActiveSupport)
|
23
|
-
|
24
|
-
# Obvious alias for descendents.
|
25
|
-
#
|
26
|
-
# NOTE: ActiveSupport returns string names rather
|
27
|
-
# then actual classes, so this is excluded
|
28
|
-
# if ActiveSupport has already been loaded.
|
29
|
-
alias_method :subclasses, :descendents
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
|
1
|
+
require 'facets/class/descendants'
|
@@ -3,8 +3,8 @@ require 'facets/enumerator'
|
|
3
3
|
|
4
4
|
# = Denumerable
|
5
5
|
#
|
6
|
-
# Classes which include
|
7
|
-
# of map, select etc. which return a
|
6
|
+
# Classes which include Denumerable will get versions
|
7
|
+
# of map, select etc. which return a Denumerator, so that they work
|
8
8
|
# horizontally without creating intermediate arrays.
|
9
9
|
#
|
10
10
|
module Denumerable
|
@@ -3,7 +3,7 @@ module Enumerable
|
|
3
3
|
# A more versitle #compact method. It can be used to
|
4
4
|
# collect and filter items out in one single step.
|
5
5
|
#
|
6
|
-
#
|
6
|
+
# (1..3).compact_map do |n|
|
7
7
|
# n < 1 ? nil : n
|
8
8
|
# end
|
9
9
|
#
|
@@ -11,8 +11,6 @@ module Enumerable
|
|
11
11
|
#
|
12
12
|
# [2,3]
|
13
13
|
#
|
14
|
-
# NOTE: Perhaps nicer to have as added functionality for #compact.
|
15
|
-
#
|
16
14
|
# CREDIT: Trans
|
17
15
|
|
18
16
|
def compact_map(trash=nil, &block)
|
@@ -31,5 +29,6 @@ module Enumerable
|
|
31
29
|
end
|
32
30
|
|
33
31
|
alias_method :compact_collect, :compact_map
|
32
|
+
|
34
33
|
end
|
35
34
|
|
@@ -23,10 +23,6 @@ module Enumerable
|
|
23
23
|
# take(10).
|
24
24
|
# each { |i| puts i }
|
25
25
|
#
|
26
|
-
# Using with a block, defer(&b), is equivalent to:
|
27
|
-
#
|
28
|
-
# defer.filter(&b)
|
29
|
-
#
|
30
26
|
# Use a method like to_a or to_h at the end of the chain when you want an
|
31
27
|
# Array or Hash built with the results, or each{...} if you just want
|
32
28
|
# to output each result and discard it.
|
@@ -4,10 +4,13 @@ class String
|
|
4
4
|
# then tabs are simply removed. Raises an exception if +n+
|
5
5
|
# is negative.
|
6
6
|
#
|
7
|
-
# "\t\tHey".
|
7
|
+
# "\t\tHey".expand_tabs(2) #=> " Hey"
|
8
8
|
#
|
9
9
|
# Thanks to GGaramuno for a more efficient algorithm. Very nice.
|
10
10
|
#
|
11
|
+
# TODO: Don't much care for the name String#expand_tab.
|
12
|
+
# What about a more concise name like #detab?
|
13
|
+
#
|
11
14
|
# CREDIT: Gavin Sinclair, Noah Gibbs, GGaramuno
|
12
15
|
|
13
16
|
def expand_tab(n=8)
|
@@ -28,8 +31,5 @@ class String
|
|
28
31
|
# Pluralized form of #expand_tab.
|
29
32
|
alias_method :expand_tabs, :expand_tab
|
30
33
|
|
31
|
-
# NOTE: Don't much care for the name String#expand_tab.
|
32
|
-
# What about a more concise name like #detab?
|
33
|
-
|
34
34
|
end
|
35
35
|
|
@@ -23,85 +23,3 @@ class String
|
|
23
23
|
|
24
24
|
end
|
25
25
|
|
26
|
-
|
27
|
-
# _____ _
|
28
|
-
# |_ _|__ ___| |_
|
29
|
-
# | |/ _ \/ __| __|
|
30
|
-
# | | __/\__ \ |_
|
31
|
-
# |_|\___||___/\__|
|
32
|
-
#
|
33
|
-
=begin test
|
34
|
-
require 'test/unit'
|
35
|
-
|
36
|
-
class TC_String_Indent < Test::Unit::TestCase
|
37
|
-
|
38
|
-
def test_positive_indent
|
39
|
-
assert_equal ' xyz', "xyz". indent(4)
|
40
|
-
assert_equal ' xyz', " xyz".indent(2)
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_multi_line_positive_indent
|
44
|
-
assert_equal " abc\n" +
|
45
|
-
" xyz" ,
|
46
|
-
("abc\n" +
|
47
|
-
"xyz" ).indent(2)
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_0_indent
|
51
|
-
assert_equal 'xyz', 'xyz'.indent(0)
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_negative_indent
|
55
|
-
assert_equal ' xyz', ' xyz'.indent(-2)
|
56
|
-
assert_equal 'xyz', ' xyz'. indent(-2)
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_multi_line_negative_indent
|
60
|
-
assert_equal " abc\n" +
|
61
|
-
" xyz" ,
|
62
|
-
(" abc\n" +
|
63
|
-
" xyz" ).indent(-2)
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_outdent_is_alias_for_negative_indent
|
67
|
-
assert_equal 'xyz', ' xyz'.outdent(2)
|
68
|
-
end
|
69
|
-
|
70
|
-
def test_negative_indent_more_than_is_possible
|
71
|
-
assert_equal 'xyz', ' xyz'.indent(-3)
|
72
|
-
end
|
73
|
-
|
74
|
-
#-----------------------------------
|
75
|
-
# Using a character other than space
|
76
|
-
|
77
|
-
def test_nonspace_positive__indent
|
78
|
-
assert_equal '----xyz', "xyz".indent(4, '-')
|
79
|
-
end
|
80
|
-
|
81
|
-
def test_nonspace_0_indent
|
82
|
-
assert_equal 'xyz', 'xyz'.indent(0, '-')
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_nonspace_negative_indent_nonmatching_character
|
86
|
-
assert_equal ' xyz', ' xyz'.indent(-2, '-')
|
87
|
-
assert_equal ' xyz', ' xyz'. indent(-2, '-')
|
88
|
-
end
|
89
|
-
|
90
|
-
def test_nonspace_negative_indent
|
91
|
-
assert_equal '--xyz', '----xyz'.indent(-2, '-')
|
92
|
-
assert_equal 'xyz', '--xyz'.indent(-2, '-')
|
93
|
-
end
|
94
|
-
|
95
|
-
def test_special_regexp_characters_are_escaped
|
96
|
-
# make sure . is treated as a literal '.' and not an "any character" wildcard
|
97
|
-
assert_equal ' xyz', ' xyz'.indent(-2, '.')
|
98
|
-
assert_equal 'xyz', '..xyz'.indent(-2, '.')
|
99
|
-
|
100
|
-
assert_equal ' xyz', ' xyz'.indent(-2, '^')
|
101
|
-
assert_equal 'xyz', '^^xyz'.indent(-2, '^')
|
102
|
-
|
103
|
-
assert_equal ' xyz', ' xyz'.indent(-2, '*')
|
104
|
-
assert_equal 'xyz', '**xyz'.indent(-2, '*')
|
105
|
-
end
|
106
|
-
end
|
107
|
-
=end
|
@@ -1,7 +1,4 @@
|
|
1
1
|
require 'facets/string/tabto'
|
2
|
-
require 'facets/string/margin'
|
3
|
-
require 'facets/string/indent'
|
4
|
-
require 'facets/string/expand_tab'
|
5
2
|
|
6
3
|
class String
|
7
4
|
|
@@ -13,7 +10,7 @@ class String
|
|
13
10
|
gsub(/^ */, ' ' * n)
|
14
11
|
end
|
15
12
|
|
16
|
-
#
|
13
|
+
# NOTE: Deprecated #taballto which was an alias for #tab.
|
17
14
|
#alias_method :taballto, :tab
|
18
15
|
|
19
16
|
end
|
data/lib/more/facets/date.rb
CHANGED
@@ -208,7 +208,7 @@ class DateTime
|
|
208
208
|
# self will just be returned unaltered, since there's no clean way
|
209
209
|
# to map it to a Time
|
210
210
|
def to_time
|
211
|
-
self.offset == 0 ? ::Time.
|
211
|
+
self.offset == 0 ? ::Time.utc(year, month, day, hour, min, sec) : self
|
212
212
|
end
|
213
213
|
|
214
214
|
# To be able to keep Times, Dates and DateTimes interchangeable on conversions
|
data/lib/more/facets/duration.rb
CHANGED
data/lib/more/facets/filelist.rb
CHANGED
@@ -113,14 +113,14 @@ class FileList
|
|
113
113
|
|
114
114
|
# List of array methods (that are not in +Object+) that need to be
|
115
115
|
# delegated.
|
116
|
-
ARRAY_METHODS = (Array.instance_methods - Object.instance_methods).map(&:
|
116
|
+
ARRAY_METHODS = (Array.instance_methods - Object.instance_methods).map(&:to_s)
|
117
117
|
|
118
118
|
# List of additional methods that must be delegated.
|
119
|
-
MUST_DEFINE = %w[to_a inspect].map(&:
|
119
|
+
MUST_DEFINE = %w[to_a inspect].map(&:to_s)
|
120
120
|
|
121
121
|
# List of methods that should not be delegated here (we define
|
122
122
|
# special versions of them explicitly below).
|
123
|
-
MUST_NOT_DEFINE = %w[to_a to_ary partition *].map(&:
|
123
|
+
MUST_NOT_DEFINE = %w[to_a to_ary partition *].map(&:to_s)
|
124
124
|
|
125
125
|
# List of delegated methods that return new array values which
|
126
126
|
# need wrapping.
|
@@ -128,7 +128,7 @@ class FileList
|
|
128
128
|
map collect sort sort_by select find_all reject grep
|
129
129
|
compact flatten uniq values_at
|
130
130
|
+ - & |
|
131
|
-
].map(&:
|
131
|
+
].map(&:to_s)
|
132
132
|
|
133
133
|
DELEGATING_METHODS = (ARRAY_METHODS + MUST_DEFINE - MUST_NOT_DEFINE).sort.uniq
|
134
134
|
|
data/lib/more/facets/pathname.rb
CHANGED
@@ -86,59 +86,40 @@ class Pathname
|
|
86
86
|
self.class.new(File.rootname(to_s))
|
87
87
|
end
|
88
88
|
|
89
|
-
# # Already included in 1.8.4+ version of Ruby (except for inclusion flag)
|
90
|
-
# if not instance_methods.include?(:ascend)
|
91
|
-
#
|
92
|
-
# # Calls the _block_ for every successive parent directory of the
|
93
|
-
# # directory path until the root (absolute path) or +.+ (relative path)
|
94
|
-
# # is reached.
|
95
|
-
# def ascend(inclusive=false,&block) # :yield:
|
96
|
-
# cur_dir = self
|
97
|
-
# yield( cur_dir.cleanpath ) if inclusive
|
98
|
-
# until cur_dir.root? or cur_dir == Pathname.new(".")
|
99
|
-
# cur_dir = cur_dir.parent
|
100
|
-
# yield cur_dir
|
101
|
-
# end
|
102
|
-
# end
|
103
|
-
#
|
104
|
-
# end
|
105
|
-
#
|
106
|
-
# # Already included in 1.8.4+ version of Ruby
|
107
|
-
# if ! instance_methods.include?(:descend)
|
108
|
-
#
|
109
|
-
# # Calls the _block_ for every successive subdirectory of the
|
110
|
-
# # directory path from the root (absolute path) until +.+
|
111
|
-
# # (relative path) is reached.
|
112
|
-
# def descend()
|
113
|
-
# @path.scan(%r{[^/]*/?})[0...-1].inject('') do |path, dir|
|
114
|
-
# yield Pathname.new(path << dir)
|
115
|
-
# path
|
116
|
-
# end
|
117
|
-
# end
|
118
|
-
#
|
119
|
-
# end
|
120
|
-
|
121
89
|
#
|
122
90
|
def split_root
|
123
91
|
head, tail = *::File.split_root(to_s)
|
124
92
|
[self.class.new(head), self.class.new(tail)]
|
125
93
|
end
|
126
94
|
|
127
|
-
#
|
95
|
+
# Glob pathnames.
|
128
96
|
def glob(match, *opts)
|
129
|
-
flags =
|
130
|
-
opts.each do |opt|
|
131
|
-
case opt when Symbol, String
|
132
|
-
flags += ::File.const_get("FNM_#{opt}".upcase)
|
133
|
-
else
|
134
|
-
flags += opt
|
135
|
-
end
|
136
|
-
end
|
97
|
+
flags = glob_flags(opts)
|
137
98
|
Dir.glob(::File.join(self.to_s, match), flags).collect{ |m| self.class.new(m) }
|
138
99
|
end
|
139
100
|
|
101
|
+
# Return the first glob match.
|
140
102
|
#
|
103
|
+
# DEPRECATE: While slightly faster then glob().first, not really worth it
|
104
|
+
# unless this can be rewritten to shortcut on first match (using fnmatch?).
|
105
|
+
# In wich case, is there a better name for this method?
|
141
106
|
def glob_first(match, *opts)
|
107
|
+
flags = glob_flags(opts)
|
108
|
+
file = ::Dir.glob(::File.join(self.to_s, match), flags).first
|
109
|
+
file ? self.class.new(file) : nil
|
110
|
+
end
|
111
|
+
|
112
|
+
# Return globbed matches with pathnames relative to the current pathname.
|
113
|
+
def glob_relative(match, *opts)
|
114
|
+
flags = glob_flags(opts)
|
115
|
+
files = Dir.glob(::File.join(self.to_s, match), flags)
|
116
|
+
files = files.map{ |f| f.sub(self.to_s.chomp('/') + '/', '') }
|
117
|
+
files.collect{ |m| self.class.new(m) }
|
118
|
+
end
|
119
|
+
|
120
|
+
private
|
121
|
+
|
122
|
+
def glob_flags(opts)
|
142
123
|
flags = 0
|
143
124
|
opts.each do |opt|
|
144
125
|
case opt when Symbol, String
|
@@ -147,10 +128,11 @@ class Pathname
|
|
147
128
|
flags += opt
|
148
129
|
end
|
149
130
|
end
|
150
|
-
|
151
|
-
file ? self.class.new(file) : nil
|
131
|
+
flags
|
152
132
|
end
|
153
133
|
|
134
|
+
public
|
135
|
+
|
154
136
|
#
|
155
137
|
def empty?
|
156
138
|
Dir.glob(::File.join(self.to_s, '*')).empty?
|
@@ -166,6 +148,38 @@ class Pathname
|
|
166
148
|
::FileUtils.outofdate?(to_s, sources.flatten)
|
167
149
|
end
|
168
150
|
|
151
|
+
# # Already included in 1.8.4+ version of Ruby (except for inclusion flag)
|
152
|
+
# if not instance_methods.include?(:ascend)
|
153
|
+
#
|
154
|
+
# # Calls the _block_ for every successive parent directory of the
|
155
|
+
# # directory path until the root (absolute path) or +.+ (relative path)
|
156
|
+
# # is reached.
|
157
|
+
# def ascend(inclusive=false,&block) # :yield:
|
158
|
+
# cur_dir = self
|
159
|
+
# yield( cur_dir.cleanpath ) if inclusive
|
160
|
+
# until cur_dir.root? or cur_dir == Pathname.new(".")
|
161
|
+
# cur_dir = cur_dir.parent
|
162
|
+
# yield cur_dir
|
163
|
+
# end
|
164
|
+
# end
|
165
|
+
#
|
166
|
+
# end
|
167
|
+
#
|
168
|
+
# # Already included in 1.8.4+ version of Ruby
|
169
|
+
# if ! instance_methods.include?(:descend)
|
170
|
+
#
|
171
|
+
# # Calls the _block_ for every successive subdirectory of the
|
172
|
+
# # directory path from the root (absolute path) until +.+
|
173
|
+
# # (relative path) is reached.
|
174
|
+
# def descend()
|
175
|
+
# @path.scan(%r{[^/]*/?})[0...-1].inject('') do |path, dir|
|
176
|
+
# yield Pathname.new(path << dir)
|
177
|
+
# path
|
178
|
+
# end
|
179
|
+
# end
|
180
|
+
#
|
181
|
+
# end
|
182
|
+
|
169
183
|
end
|
170
184
|
|
171
185
|
class NilClass
|
data/meta/{suite → collection}
RENAMED
File without changes
|
File without changes
|
data/meta/{package → name}
RENAMED
File without changes
|
data/meta/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.8.
|
1
|
+
2.8.1
|
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'facets/enumerable/collect.rb'
|
1
|
+
require 'facets/enumerable/compact_map.rb'
|
4
2
|
require 'test/unit'
|
5
3
|
|
6
4
|
class TestEnumerable < Test::Unit::TestCase
|
@@ -14,16 +12,11 @@ class TestEnumerable < Test::Unit::TestCase
|
|
14
12
|
# assert_equal( e, a )
|
15
13
|
#end
|
16
14
|
|
17
|
-
def
|
18
|
-
a = [1,2,nil,4].
|
15
|
+
def test_compact_map
|
16
|
+
a = [1,2,nil,4].compact_map { |e| e }
|
19
17
|
assert_equal( [1,2,4], a )
|
20
18
|
end
|
21
19
|
|
22
|
-
def test_collect_with_index
|
23
|
-
a = [1,2,3].collect_with_index{ |e,i| e*i }
|
24
|
-
assert_equal( [0,2,6], a )
|
25
|
-
end
|
26
|
-
|
27
20
|
=begin
|
28
21
|
def test_map_send
|
29
22
|
r = [1,2,3].map_send(:+, 1)
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'facets/string/expand_tab'
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
class TC_String_Expand_Tab < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@tabs = <<-EOF
|
8
|
+
|
9
|
+
\tOne tab
|
10
|
+
\tOne space and one tab
|
11
|
+
\t Six spaces, a tab, and a space
|
12
|
+
EOF
|
13
|
+
end # def setup
|
14
|
+
|
15
|
+
def test_expand_tabs_1
|
16
|
+
expected = <<-EOF
|
17
|
+
|
18
|
+
One tab
|
19
|
+
One space and one tab
|
20
|
+
Six spaces, a tab, and a space
|
21
|
+
EOF
|
22
|
+
assert_equal(expected, @tabs.expand_tabs)
|
23
|
+
assert_equal(expected, @tabs.expand_tabs(8))
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_expand_tabs_2
|
27
|
+
expected = <<-EOF
|
28
|
+
|
29
|
+
One tab
|
30
|
+
One space and one tab
|
31
|
+
Six spaces, a tab, and a space
|
32
|
+
EOF
|
33
|
+
assert_equal(expected, @tabs.expand_tabs(4))
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_expand_tabs_3
|
37
|
+
expected = <<-EOF
|
38
|
+
|
39
|
+
One tab
|
40
|
+
One space and one tab
|
41
|
+
Six spaces, a tab, and a space
|
42
|
+
EOF
|
43
|
+
assert_equal(expected, @tabs.expand_tabs(16))
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_expand_tabs_4
|
47
|
+
expected = <<-EOF
|
48
|
+
|
49
|
+
One tab
|
50
|
+
One space and one tab
|
51
|
+
Six spaces, a tab, and a space
|
52
|
+
EOF
|
53
|
+
assert_equal(expected, @tabs.expand_tabs(1))
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_expand_tabs_5
|
57
|
+
expected = <<-EOF
|
58
|
+
|
59
|
+
One tab
|
60
|
+
One space and one tab
|
61
|
+
Six spaces, a tab, and a space
|
62
|
+
EOF
|
63
|
+
assert_equal(expected, @tabs.expand_tabs(0))
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
@@ -3,71 +3,11 @@ require 'test/unit'
|
|
3
3
|
|
4
4
|
class TC_String_Tab < Test::Unit::TestCase
|
5
5
|
|
6
|
-
def setup
|
7
|
-
@tabs = <<-EOF
|
8
|
-
|
9
|
-
\tOne tab
|
10
|
-
\tOne space and one tab
|
11
|
-
\t Six spaces, a tab, and a space
|
12
|
-
EOF
|
13
|
-
end # def setup
|
14
|
-
|
15
6
|
def test_tab
|
16
7
|
a = "xyz".tab(4)
|
17
8
|
assert_equal( ' ', a[0..3] )
|
18
9
|
# Need to expand on this
|
19
10
|
end
|
20
11
|
|
21
|
-
def test_expand_tabs_1
|
22
|
-
expected = <<-EOF
|
23
|
-
|
24
|
-
One tab
|
25
|
-
One space and one tab
|
26
|
-
Six spaces, a tab, and a space
|
27
|
-
EOF
|
28
|
-
assert_equal(expected, @tabs.expand_tabs)
|
29
|
-
assert_equal(expected, @tabs.expand_tabs(8))
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_expand_tabs_2
|
33
|
-
expected = <<-EOF
|
34
|
-
|
35
|
-
One tab
|
36
|
-
One space and one tab
|
37
|
-
Six spaces, a tab, and a space
|
38
|
-
EOF
|
39
|
-
assert_equal(expected, @tabs.expand_tabs(4))
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_expand_tabs_3
|
43
|
-
expected = <<-EOF
|
44
|
-
|
45
|
-
One tab
|
46
|
-
One space and one tab
|
47
|
-
Six spaces, a tab, and a space
|
48
|
-
EOF
|
49
|
-
assert_equal(expected, @tabs.expand_tabs(16))
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_expand_tabs_4
|
53
|
-
expected = <<-EOF
|
54
|
-
|
55
|
-
One tab
|
56
|
-
One space and one tab
|
57
|
-
Six spaces, a tab, and a space
|
58
|
-
EOF
|
59
|
-
assert_equal(expected, @tabs.expand_tabs(1))
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_expand_tabs_5
|
63
|
-
expected = <<-EOF
|
64
|
-
|
65
|
-
One tab
|
66
|
-
One space and one tab
|
67
|
-
Six spaces, a tab, and a space
|
68
|
-
EOF
|
69
|
-
assert_equal(expected, @tabs.expand_tabs(0))
|
70
|
-
end
|
71
|
-
|
72
12
|
end
|
73
13
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: facets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.8.
|
4
|
+
version: 2.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Sawyer <transfire@gmail.com>
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-12-25 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -79,6 +79,7 @@ files:
|
|
79
79
|
- lib/core/facets/class/cattr_accessor.rb
|
80
80
|
- lib/core/facets/class/cattr_reader.rb
|
81
81
|
- lib/core/facets/class/cattr_writer.rb
|
82
|
+
- lib/core/facets/class/descendants.rb
|
82
83
|
- lib/core/facets/class/descendents.rb
|
83
84
|
- lib/core/facets/class/methodize.rb
|
84
85
|
- lib/core/facets/class/pathize.rb
|
@@ -105,6 +106,7 @@ files:
|
|
105
106
|
- lib/core/facets/enumerable/accumulate.rb
|
106
107
|
- lib/core/facets/enumerable/cluster_by.rb
|
107
108
|
- lib/core/facets/enumerable/collect.rb
|
109
|
+
- lib/core/facets/enumerable/collect_with_index.rb
|
108
110
|
- lib/core/facets/enumerable/commonality.rb
|
109
111
|
- lib/core/facets/enumerable/compact_map.rb
|
110
112
|
- lib/core/facets/enumerable/count.rb
|
@@ -206,7 +208,6 @@ files:
|
|
206
208
|
- lib/core/facets/indexable.rb
|
207
209
|
- lib/core/facets/integer/even.rb
|
208
210
|
- lib/core/facets/integer/factorial.rb
|
209
|
-
- lib/core/facets/integer/length.rb
|
210
211
|
- lib/core/facets/integer/multiple.rb
|
211
212
|
- lib/core/facets/integer/odd.rb
|
212
213
|
- lib/core/facets/integer/of.rb
|
@@ -312,7 +313,9 @@ files:
|
|
312
313
|
- lib/core/facets/nilclass.rb
|
313
314
|
- lib/core/facets/numeric/approx.rb
|
314
315
|
- lib/core/facets/numeric/distance.rb
|
316
|
+
- lib/core/facets/numeric/length.rb
|
315
317
|
- lib/core/facets/numeric/round.rb
|
318
|
+
- lib/core/facets/numeric/size.rb
|
316
319
|
- lib/core/facets/numeric.rb
|
317
320
|
- lib/core/facets/objectspace/classes.rb
|
318
321
|
- lib/core/facets/objectspace/op_fetch.rb
|
@@ -509,20 +512,20 @@ files:
|
|
509
512
|
- lib/more/facets/version.rb
|
510
513
|
- lib/more/facets/yaml.rb
|
511
514
|
- lib/more/facets/zlib.rb
|
512
|
-
- meta/abstract
|
513
515
|
- meta/authors
|
516
|
+
- meta/collection
|
514
517
|
- meta/contact
|
515
518
|
- meta/contributors
|
516
519
|
- meta/created
|
520
|
+
- meta/description
|
517
521
|
- meta/homepage
|
518
522
|
- meta/license
|
519
523
|
- meta/loadpath
|
520
|
-
- meta/
|
524
|
+
- meta/name
|
521
525
|
- meta/released
|
522
526
|
- meta/repository
|
523
527
|
- meta/sitemap
|
524
528
|
- meta/slogan
|
525
|
-
- meta/suite
|
526
529
|
- meta/summary
|
527
530
|
- meta/version
|
528
531
|
- script/conflicts
|
@@ -561,8 +564,8 @@ files:
|
|
561
564
|
- test/core/dir/test_parent.rb
|
562
565
|
- test/core/dir/test_recurse.rb
|
563
566
|
- test/core/enumerable/test_cluster_by.rb
|
564
|
-
- test/core/enumerable/test_collect.rb
|
565
567
|
- test/core/enumerable/test_commonality.rb
|
568
|
+
- test/core/enumerable/test_compact_map.rb
|
566
569
|
- test/core/enumerable/test_count.rb
|
567
570
|
- test/core/enumerable/test_defer.rb
|
568
571
|
- test/core/enumerable/test_each_by.rb
|
@@ -573,6 +576,7 @@ files:
|
|
573
576
|
- test/core/enumerable/test_group_by.rb
|
574
577
|
- test/core/enumerable/test_inject.rb
|
575
578
|
- test/core/enumerable/test_map_detect.rb
|
579
|
+
- test/core/enumerable/test_map_with_index.rb
|
576
580
|
- test/core/enumerable/test_mash.rb
|
577
581
|
- test/core/enumerable/test_modulate.rb
|
578
582
|
- test/core/enumerable/test_none.rb
|
@@ -701,6 +705,7 @@ files:
|
|
701
705
|
- test/core/string/test_each_char.rb
|
702
706
|
- test/core/string/test_each_word.rb
|
703
707
|
- test/core/string/test_end_with.rb
|
708
|
+
- test/core/string/test_expand_tabs.rb
|
704
709
|
- test/core/string/test_fold.rb
|
705
710
|
- test/core/string/test_indent.rb
|
706
711
|
- test/core/string/test_interpolate.rb
|
@@ -779,7 +784,6 @@ files:
|
|
779
784
|
- test/more/test_ostruct.rb
|
780
785
|
- test/more/test_partial.rb
|
781
786
|
- test/more/test_random.rb
|
782
|
-
- test/more/test_recorder.rb
|
783
787
|
- test/more/test_shellwords.rb
|
784
788
|
- test/more/test_succ.rb
|
785
789
|
- test/more/test_thread.rb
|
@@ -860,8 +864,8 @@ test_files:
|
|
860
864
|
- test/core/dir/test_parent.rb
|
861
865
|
- test/core/dir/test_recurse.rb
|
862
866
|
- test/core/enumerable/test_cluster_by.rb
|
863
|
-
- test/core/enumerable/test_collect.rb
|
864
867
|
- test/core/enumerable/test_commonality.rb
|
868
|
+
- test/core/enumerable/test_compact_map.rb
|
865
869
|
- test/core/enumerable/test_count.rb
|
866
870
|
- test/core/enumerable/test_defer.rb
|
867
871
|
- test/core/enumerable/test_each_by.rb
|
@@ -872,6 +876,7 @@ test_files:
|
|
872
876
|
- test/core/enumerable/test_group_by.rb
|
873
877
|
- test/core/enumerable/test_inject.rb
|
874
878
|
- test/core/enumerable/test_map_detect.rb
|
879
|
+
- test/core/enumerable/test_map_with_index.rb
|
875
880
|
- test/core/enumerable/test_mash.rb
|
876
881
|
- test/core/enumerable/test_modulate.rb
|
877
882
|
- test/core/enumerable/test_none.rb
|
@@ -1000,6 +1005,7 @@ test_files:
|
|
1000
1005
|
- test/core/string/test_each_char.rb
|
1001
1006
|
- test/core/string/test_each_word.rb
|
1002
1007
|
- test/core/string/test_end_with.rb
|
1008
|
+
- test/core/string/test_expand_tabs.rb
|
1003
1009
|
- test/core/string/test_fold.rb
|
1004
1010
|
- test/core/string/test_indent.rb
|
1005
1011
|
- test/core/string/test_interpolate.rb
|
@@ -1078,7 +1084,6 @@ test_files:
|
|
1078
1084
|
- test/more/test_ostruct.rb
|
1079
1085
|
- test/more/test_partial.rb
|
1080
1086
|
- test/more/test_random.rb
|
1081
|
-
- test/more/test_recorder.rb
|
1082
1087
|
- test/more/test_shellwords.rb
|
1083
1088
|
- test/more/test_succ.rb
|
1084
1089
|
- test/more/test_thread.rb
|
@@ -1,16 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Calculate the number of digits in an integer.
|
3
|
-
#
|
4
|
-
# 1.length #=> 1
|
5
|
-
# 10.length #=> 2
|
6
|
-
# 100.length #=> 3
|
7
|
-
#
|
8
|
-
# CREDIT: Victor H. Goff III
|
9
|
-
|
10
|
-
class Integer
|
11
|
-
# Returns the length of an integer as an integer.
|
12
|
-
def length
|
13
|
-
to_s.length
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
data/test/more/test_recorder.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
# Test facets/recorder.rb
|
2
|
-
|
3
|
-
require 'facets/recorder.rb'
|
4
|
-
require 'test/unit'
|
5
|
-
|
6
|
-
#class Object
|
7
|
-
# def &(o)
|
8
|
-
# self && o
|
9
|
-
# end
|
10
|
-
#end
|
11
|
-
|
12
|
-
class TCRecorder < Test::Unit::TestCase
|
13
|
-
|
14
|
-
class Z
|
15
|
-
def name ; 'George' ; end
|
16
|
-
def age ; 12 ; end
|
17
|
-
end
|
18
|
-
|
19
|
-
def setup
|
20
|
-
@z = Z.new
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_001
|
24
|
-
r = Recorder.new
|
25
|
-
q = proc { |x| (x.name == 'George') & (x.age > 10) }
|
26
|
-
x = q[r]
|
27
|
-
assert( x.__call__(@z) )
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|