facets 2.1.3 → 2.2.0
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 +14 -12
- data/CHANGES +45 -2
- data/NOTES +9 -7
- data/lib/core/facets/1stclassmethod.rb +15 -11
- data/lib/core/facets/array.rb +0 -1
- data/lib/core/facets/array/conjoin.rb +40 -8
- data/lib/core/facets/array/delete.rb +8 -2
- data/lib/core/facets/array/indexable.rb +30 -3
- data/lib/core/facets/array/merge.rb +11 -0
- data/lib/core/facets/array/only.rb +3 -3
- data/lib/core/facets/array/pad.rb +4 -46
- data/lib/core/facets/array/rotate.rb +4 -4
- data/lib/core/facets/array/select.rb +2 -0
- data/lib/core/facets/array/splice.rb +16 -2
- data/lib/core/facets/array/stackable.rb +6 -40
- data/lib/core/facets/binding.rb +3 -0
- data/lib/core/facets/binding/cflow.rb +10 -64
- data/lib/core/facets/binding/defined.rb +10 -0
- data/lib/core/facets/binding/eval.rb +10 -76
- data/lib/core/facets/binding/here.rb +9 -0
- data/lib/core/facets/binding/self.rb +10 -0
- data/lib/core/facets/binding/vars.rb +0 -45
- data/lib/core/facets/boolean.rb +31 -103
- data/lib/core/facets/class/descendents.rb +17 -44
- data/lib/core/facets/comparable/bound.rb +8 -70
- data/lib/core/facets/comparable/cmp.rb +12 -92
- data/lib/core/facets/conversion.rb +122 -321
- data/lib/core/facets/dir/multiglob.rb +0 -13
- data/lib/core/facets/dir/traverse.rb +61 -111
- data/lib/core/facets/enumerable.rb +4 -2
- data/lib/core/facets/enumerable/cartesian.rb +36 -85
- data/lib/core/facets/enumerable/collect.rb +64 -152
- data/lib/core/facets/enumerable/combination.rb +40 -42
- data/lib/core/facets/enumerable/count.rb +99 -174
- data/lib/core/facets/enumerable/each.rb +86 -0
- data/lib/core/facets/enumerable/mash.rb +58 -0
- data/lib/core/facets/enumerable/permutation.rb +39 -44
- data/lib/core/facets/enumerable/probability.rb +16 -90
- data/lib/core/facets/enumerable/split.rb +113 -0
- data/lib/core/facets/exception/detail.rb +1 -2
- data/lib/core/facets/facets.rb +3 -2
- data/lib/core/facets/file/read.rb +4 -59
- data/lib/core/facets/file/topath.rb +8 -96
- data/lib/core/facets/file/write.rb +21 -49
- data/lib/core/facets/filetest/root.rb +4 -3
- data/lib/core/facets/functor.rb +5 -43
- data/lib/core/facets/hash/at.rb +7 -37
- data/lib/core/facets/hash/delete.rb +9 -58
- data/lib/core/facets/hash/has_keys.rb +4 -43
- data/lib/core/facets/hash/insert.rb +5 -38
- data/lib/core/facets/hash/inverse.rb +2 -41
- data/lib/core/facets/hash/iterate.rb +4 -45
- data/lib/core/facets/hash/keyize.rb +24 -92
- data/lib/core/facets/hash/merge.rb +4 -38
- data/lib/core/facets/hash/new.rb +5 -38
- data/lib/core/facets/hash/op.rb +20 -66
- data/lib/core/facets/hash/rekey.rb +9 -87
- data/lib/core/facets/hash/select.rb +1 -1
- data/lib/core/facets/hash/slice.rb +42 -0
- data/lib/core/facets/hash/traverse.rb +6 -46
- data/lib/core/facets/hash/update.rb +27 -67
- data/lib/core/facets/hash/weave.rb +22 -42
- data/lib/core/facets/indexable.rb +42 -14
- data/lib/core/facets/integer/bitmask.rb +69 -106
- data/lib/core/facets/integer/factorial.rb +1 -44
- data/lib/core/facets/integer/multiples.rb +27 -22
- data/lib/core/facets/integer/of.rb +1 -33
- data/lib/core/facets/kernel.rb +4 -2
- data/lib/core/facets/kernel/ask.rb +15 -3
- data/lib/core/facets/kernel/callstack.rb +38 -69
- data/lib/core/facets/kernel/constant.rb +2 -38
- data/lib/core/facets/kernel/deepcopy.rb +3 -55
- data/lib/core/facets/kernel/dir.rb +2 -0
- data/lib/core/facets/kernel/ergo.rb +2 -2
- data/lib/core/facets/kernel/instance.rb +51 -120
- data/lib/core/facets/kernel/metaid.rb +35 -73
- data/lib/core/facets/kernel/object.rb +14 -39
- data/lib/core/facets/kernel/op_esc.rb +24 -2
- data/lib/core/facets/kernel/populate.rb +6 -69
- data/lib/core/facets/kernel/report.rb +28 -33
- data/lib/core/facets/kernel/require.rb +7 -21
- data/lib/core/facets/kernel/respond.rb +11 -1
- data/lib/core/facets/kernel/returning.rb +50 -0
- data/lib/core/facets/kernel/silence.rb +12 -24
- data/lib/core/facets/kernel/super.rb +12 -76
- data/lib/core/facets/kernel/tap.rb +25 -107
- data/lib/core/facets/kernel/val.rb +7 -46
- data/lib/core/facets/kernel/withattr.rb +6 -64
- data/lib/core/facets/matchdata/matchset.rb +8 -50
- data/lib/core/facets/module.rb +3 -1
- data/lib/core/facets/module/abstract.rb +9 -47
- data/lib/core/facets/module/alias.rb +11 -68
- data/lib/core/facets/module/attr.rb +36 -15
- data/lib/core/facets/module/cattr.rb +8 -76
- data/lib/core/facets/module/clone.rb +15 -66
- data/lib/core/facets/module/include.rb +54 -114
- data/lib/core/facets/module/methods.rb +15 -13
- data/lib/core/facets/module/modify.rb +20 -206
- data/lib/core/facets/module/name.rb +19 -83
- data/lib/core/facets/module/require.rb +48 -53
- data/lib/core/facets/module/traits.rb +74 -33
- data/lib/core/facets/nilclass/status.rb +25 -2
- data/lib/core/facets/numeric/round.rb +24 -89
- data/lib/core/facets/proc/bind.rb +16 -59
- data/lib/core/facets/proc/compose.rb +6 -40
- data/lib/core/facets/proc/fn.rb +2 -0
- data/lib/core/facets/range/combine.rb +15 -51
- data/lib/core/facets/range/overlap.rb +8 -64
- data/lib/core/facets/regexp/arity.rb +6 -41
- data/lib/core/facets/stackable.rb +43 -4
- data/lib/core/facets/string.rb +2 -0
- data/lib/core/facets/string/align.rb +45 -55
- data/lib/core/facets/string/blank.rb +2 -46
- data/lib/core/facets/string/bracket.rb +14 -87
- data/lib/core/facets/string/case.rb +45 -32
- data/lib/core/facets/string/crypt.rb +3 -40
- data/lib/core/facets/string/filter.rb +7 -49
- data/lib/core/facets/string/format.rb +24 -126
- data/lib/core/facets/string/indexable.rb +50 -133
- data/lib/core/facets/string/interpolate.rb +24 -59
- data/lib/core/facets/string/natcmp.rb +5 -39
- data/lib/core/facets/string/nchar.rb +37 -45
- data/lib/core/facets/string/op.rb +13 -0
- data/lib/core/facets/string/partitions.rb +38 -99
- data/lib/core/facets/string/range.rb +8 -49
- data/lib/core/facets/string/regesc.rb +9 -42
- data/lib/core/facets/string/scan.rb +6 -52
- data/lib/core/facets/string/splice.rb +8 -13
- data/lib/core/facets/string/tabs.rb +16 -153
- data/lib/core/facets/symbol.rb +3 -1
- data/lib/core/facets/symbol/chomp.rb +11 -29
- data/lib/core/facets/symbol/generate.rb +4 -43
- data/lib/core/facets/symbol/not.rb +13 -25
- data/lib/core/facets/symbol/shadow.rb +2 -40
- data/lib/core/facets/symbol/succ.rb +14 -13
- data/lib/core/facets/symbol/to_proc.rb +33 -28
- data/lib/core/facets/time.rb +1 -0
- data/lib/core/facets/time/change.rb +5 -38
- data/lib/core/facets/time/elapse.rb +2 -41
- data/lib/core/facets/time/stamp.rb +47 -0
- data/lib/core/facets/unboundmethod.rb +3 -0
- data/lib/core/facets/unboundmethod/arguments.rb +27 -4
- data/lib/core/facets/unboundmethod/name.rb +21 -7
- data/lib/methods/facets/enumerable/cluster_by.rb +1 -1
- data/lib/methods/facets/enumerable/collate.rb +1 -0
- data/lib/methods/facets/enumerable/divide.rb +1 -1
- data/lib/methods/facets/enumerable/each_by.rb +1 -1
- data/lib/methods/facets/enumerable/each_pair.rb +1 -1
- data/lib/methods/facets/enumerable/eachn.rb +1 -1
- data/lib/methods/facets/enumerable/graph.rb +1 -1
- data/lib/methods/facets/enumerable/group_by.rb +1 -1
- data/lib/methods/facets/enumerable/inject.rb +1 -0
- data/lib/methods/facets/enumerable/map_send.rb +1 -0
- data/lib/methods/facets/enumerable/modulate.rb +1 -0
- data/lib/methods/facets/enumerable/partition_by.rb +1 -1
- data/lib/methods/facets/hash/collate.rb +1 -1
- data/lib/methods/facets/hash/except.rb +1 -0
- data/lib/methods/facets/hash/graph.rb +1 -1
- data/lib/methods/facets/hash/mash.rb +1 -0
- data/lib/methods/facets/kernel/Bit.rb +1 -0
- data/lib/methods/facets/kernel/complete.rb +1 -1
- data/lib/methods/facets/kernel/here.rb +1 -1
- data/lib/methods/facets/kernel/non_nil.rb +1 -0
- data/lib/methods/facets/kernel/respond_with_value.rb +1 -0
- data/lib/methods/facets/kernel/with.rb +1 -1
- data/lib/methods/facets/module/class_def.rb +1 -0
- data/lib/methods/facets/string/camelcase.rb +1 -0
- data/lib/methods/facets/string/op_minus.rb +1 -0
- data/lib/methods/facets/string/snakecase.rb +1 -0
- data/lib/more/facets/attributes.rb +5 -5
- data/lib/more/facets/basicobject.rb +0 -62
- data/lib/{core/facets/continuation/create.rb → more/facets/continuation.rb} +4 -21
- data/lib/more/facets/duration.rb +534 -0
- data/lib/more/facets/lazy.rb +3 -3
- data/lib/more/facets/namespace.rb +23 -71
- data/lib/more/facets/rbsystem.rb +42 -8
- data/lib/more/facets/stylize.rb +6 -3
- data/lib/more/facets/thread.rb +55 -0
- data/meta/MANIFEST +49 -18
- data/meta/ROLLRC +1 -1
- data/meta/project.yaml +2 -2
- data/task/install +1 -1
- data/task/test/general +8 -2
- data/test/unit/array/test_pad.rb +30 -45
- data/test/unit/array/test_stackable.rb +14 -28
- data/test/unit/binding/test_cflow.rb +34 -49
- data/test/unit/binding/test_defined.rb +17 -0
- data/test/unit/binding/test_eval.rb +11 -39
- data/test/unit/binding/test_here.rb +17 -0
- data/test/unit/binding/test_self.rb +17 -0
- data/test/unit/binding/test_vars.rb +22 -37
- data/test/unit/class/test_descendents.rb +15 -30
- data/test/unit/class/test_initializer.rb +1 -8
- data/test/unit/comparable/test_bound.rb +38 -53
- data/test/unit/comparable/test_cmp.rb +45 -60
- data/test/unit/dir/test_traverse.rb +56 -0
- data/test/unit/enumerable/test_cartesian.rb +34 -47
- data/test/unit/enumerable/test_collect.rb +16 -125
- data/test/unit/enumerable/test_combination.rb +1 -8
- data/test/unit/enumerable/test_count.rb +51 -66
- data/test/unit/enumerable/test_each.rb +77 -0
- data/test/unit/enumerable/test_mash.rb +51 -0
- data/test/unit/enumerable/test_permutation.rb +1 -7
- data/test/unit/enumerable/test_probability.rb +42 -55
- data/test/unit/enumerable/test_split.rb +52 -0
- data/test/unit/exception/test_detail.rb +19 -0
- data/test/unit/file/test_read.rb +34 -0
- data/test/unit/file/test_topath.rb +17 -25
- data/test/unit/file/test_write.rb +6 -12
- data/test/unit/filetest/test_root.rb +14 -0
- data/test/unit/hash/test_at.rb +9 -21
- data/test/unit/hash/test_delete.rb +22 -37
- data/test/unit/hash/test_has_keys.rb +13 -28
- data/test/unit/hash/test_insert.rb +9 -23
- data/test/unit/hash/test_inverse.rb +11 -26
- data/test/unit/hash/test_iterate.rb +16 -31
- data/test/unit/hash/test_keyize.rb +40 -55
- data/test/unit/hash/test_merge.rb +10 -25
- data/test/unit/hash/test_new.rb +9 -24
- data/test/unit/hash/test_op.rb +1 -7
- data/test/unit/hash/test_rekey.rb +47 -62
- data/test/unit/hash/test_traverse.rb +17 -32
- data/test/unit/hash/test_update.rb +30 -45
- data/test/unit/hash/test_weave.rb +10 -23
- data/test/unit/integer/test_bitmask.rb +48 -44
- data/test/unit/integer/test_factorial.rb +11 -26
- data/test/unit/integer/test_multiples.rb +1 -5
- data/test/unit/integer/test_of.rb +14 -29
- data/test/unit/kernel/test_callstack.rb +13 -28
- data/test/unit/kernel/test_constant.rb +14 -28
- data/test/unit/kernel/test_deepcopy.rb +20 -35
- data/test/unit/kernel/test_instance.rb +46 -61
- data/test/unit/kernel/test_metaid.rb +42 -57
- data/test/unit/kernel/test_object.rb +14 -29
- data/test/unit/kernel/test_populate.rb +38 -53
- data/test/unit/kernel/test_report.rb +1 -7
- data/test/unit/kernel/test_returning.rb +16 -0
- data/test/unit/kernel/test_silence.rb +8 -23
- data/test/unit/kernel/test_super.rb +41 -56
- data/test/unit/kernel/test_tap.rb +15 -39
- data/test/unit/kernel/test_val.rb +7 -20
- data/test/unit/kernel/test_withattr.rb +29 -44
- data/test/unit/matchdata/test_matchset.rb +20 -35
- data/test/unit/module/test_abstract.rb +15 -30
- data/test/unit/module/test_alias.rb +32 -45
- data/test/unit/module/test_cattr.rb +39 -54
- data/test/unit/module/test_clone.rb +31 -43
- data/test/unit/module/test_include.rb +1 -35
- data/test/unit/module/test_modify.rb +102 -114
- data/test/unit/module/test_name.rb +1 -7
- data/test/unit/numeric/test_round.rb +46 -61
- data/test/unit/proc/test_bind.rb +29 -44
- data/test/unit/proc/test_compose.rb +20 -35
- data/test/unit/range/test_combine.rb +14 -29
- data/test/unit/range/test_overlap.rb +34 -51
- data/test/unit/regexp/test_arity.rb +14 -29
- data/test/unit/string/test_align.rb +13 -27
- data/test/unit/string/test_blank.rb +12 -27
- data/test/unit/string/test_bracket.rb +52 -67
- data/test/unit/string/test_case.rb +19 -38
- data/test/unit/string/test_crypt.rb +10 -25
- data/test/unit/string/test_filter.rb +1 -7
- data/test/unit/string/test_format.rb +2 -7
- data/test/unit/string/test_indexable.rb +54 -69
- data/test/unit/string/test_interpolate.rb +8 -21
- data/test/unit/string/test_natcmp.rb +11 -26
- data/test/unit/string/test_nchar.rb +1 -14
- data/test/unit/string/test_op.rb +14 -0
- data/test/unit/string/test_partitions.rb +39 -54
- data/test/unit/string/test_range.rb +17 -32
- data/test/unit/string/test_regesc.rb +1 -7
- data/test/unit/string/test_scan.rb +23 -38
- data/test/unit/string/test_stackable.rb +79 -98
- data/test/unit/string/test_tabs.rb +1 -7
- data/test/unit/symbol/test_chomp.rb +10 -21
- data/test/unit/symbol/test_generate.rb +7 -22
- data/test/unit/symbol/test_not.rb +10 -25
- data/test/unit/symbol/test_shadow.rb +8 -23
- data/test/unit/symbol/test_succ.rb +1 -7
- data/test/unit/symbol/test_to_proc.rb +1 -7
- data/test/unit/test_attributes.rb +1 -1
- data/test/unit/test_continuation.rb +13 -0
- data/test/unit/test_conversion.rb +1 -14
- data/test/unit/test_namespace.rb +30 -3
- data/test/unit/test_thread.rb +23 -0
- data/test/unit/time/test_change.rb +11 -26
- data/test/unit/time/test_elapse.rb +10 -25
- data/test/unit/time/test_stamp.rb +28 -0
- metadata +65 -25
- data/lib/core/facets/array/unzip.rb +0 -14
- data/lib/core/facets/continuation.rb +0 -1
- data/lib/core/facets/enumerable/collate.rb +0 -104
- data/lib/core/facets/kernel/require_esc.rb +0 -44
- data/lib/more/facets/mapsend.rb +0 -98
- data/lib/more/facets/pp_s.rb +0 -30
- data/log/history.rd +0 -38
- data/log/todo.rd +0 -4
- data/task/special/quickopts +0 -15
- data/test/unit/continuation/test_create.rb +0 -28
- data/test/unit/enumerable/test_collate.rb +0 -51
- data/test/unit/kernel/test_require_esc.rb +0 -29
- data/test/unit/test_mapsend.rb +0 -18
- data/test/unit/test_pp_s.rb +0 -17
data/lib/core/facets/facets.rb
CHANGED
@@ -3,14 +3,15 @@
|
|
3
3
|
module Facets
|
4
4
|
extend self
|
5
5
|
|
6
|
+
# REMOVED "facets/basicobject" b/c of coming 1.9.
|
7
|
+
# REMOVED "facets/continuaiton" b/c of coming 1.9.
|
8
|
+
|
6
9
|
def require_core
|
7
10
|
require "facets/array"
|
8
|
-
require "facets/basicobject"
|
9
11
|
require "facets/binding"
|
10
12
|
require "facets/boolean"
|
11
13
|
require "facets/class"
|
12
14
|
require "facets/comparable"
|
13
|
-
require "facets/continuation"
|
14
15
|
require "facets/conversion"
|
15
16
|
require "facets/curry"
|
16
17
|
require "facets/dir"
|
@@ -1,22 +1,8 @@
|
|
1
|
-
# TITLE:
|
2
|
-
#
|
3
|
-
# File Class Read Extensions
|
4
|
-
#
|
5
|
-
# DESCRIPTION:
|
6
|
-
#
|
7
|
-
# Class extensions to File for reading
|
8
|
-
# and writing.
|
9
|
-
#
|
10
|
-
# AUTHORS:
|
11
|
-
#
|
12
|
-
# CREDIT Thomas Sawyer
|
13
|
-
# CREDIT George Moschovitis
|
14
|
-
# CREDIT Jeffrey Schwab
|
15
|
-
|
16
|
-
#
|
17
1
|
class File
|
18
2
|
|
19
3
|
# Read in a file as binary data.
|
4
|
+
#
|
5
|
+
# CREDIT: George Moschovitis
|
20
6
|
|
21
7
|
def self.read_binary(fname)
|
22
8
|
open(fname, 'rb') {|f|
|
@@ -27,6 +13,8 @@ class File
|
|
27
13
|
# Reads in a file, removes blank lines and remarks
|
28
14
|
# (lines starting with '#') and then returns
|
29
15
|
# an array of all the remaining lines.
|
16
|
+
#
|
17
|
+
# CREDIT: Trans
|
30
18
|
|
31
19
|
def self.read_list(filepath, chomp_string='')
|
32
20
|
farr = nil
|
@@ -39,46 +27,3 @@ class File
|
|
39
27
|
end
|
40
28
|
|
41
29
|
end
|
42
|
-
|
43
|
-
|
44
|
-
# _____ _
|
45
|
-
# |_ _|__ ___| |_
|
46
|
-
# | |/ _ \/ __| __|
|
47
|
-
# | | __/\__ \ |_
|
48
|
-
# |_|\___||___/\__|
|
49
|
-
#
|
50
|
-
# TODO This isn't right. I'm not to clear on how to do File class-level Mocks.
|
51
|
-
|
52
|
-
=begin #test
|
53
|
-
|
54
|
-
require 'test/unit'
|
55
|
-
|
56
|
-
class TestFileRead < Test::Unit::TestCase
|
57
|
-
|
58
|
-
class MockFile < ::File
|
59
|
-
def open( fname, mode, &blk )
|
60
|
-
blk.call(self)
|
61
|
-
end
|
62
|
-
def read( fname=nil )
|
63
|
-
@mock_content.clone
|
64
|
-
end
|
65
|
-
def write( str )
|
66
|
-
@mock_content = str
|
67
|
-
end
|
68
|
-
def <<( str )
|
69
|
-
(@mock_content ||="") << str
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
File = MockFile.new
|
74
|
-
|
75
|
-
def test_read_list
|
76
|
-
f = File.write("A\nB\nC")
|
77
|
-
s = File.read_list( f )
|
78
|
-
r = ['A','B','C']
|
79
|
-
assert_equal( r, s )
|
80
|
-
end
|
81
|
-
|
82
|
-
end
|
83
|
-
|
84
|
-
=end
|
@@ -1,23 +1,9 @@
|
|
1
|
-
# TITLE:
|
2
|
-
#
|
3
|
-
# Path Extensions
|
4
|
-
#
|
5
|
-
# DESCRIPTION:
|
6
|
-
#
|
7
|
-
# Path-related extensions.
|
8
|
-
#
|
9
|
-
# AUTHORS:
|
10
|
-
#
|
11
|
-
# CREDIT Thomas Sawyer
|
12
|
-
# CREDIT Daniel Berger
|
13
|
-
|
14
|
-
#
|
15
1
|
class File
|
16
2
|
|
17
|
-
# CREDIT Daniel Burger
|
18
|
-
|
19
3
|
# Platform dependent null device.
|
20
4
|
#
|
5
|
+
# CREDIT: Daniel Burger
|
6
|
+
|
21
7
|
def self.null
|
22
8
|
case RUBY_PLATFORM
|
23
9
|
when /mswin/i
|
@@ -38,6 +24,8 @@ class File
|
|
38
24
|
# File.rootname('/jump.rb') #=> '/'
|
39
25
|
# File.rootname('jump.rb') #=> '.'
|
40
26
|
#
|
27
|
+
# CREDIT: Trans
|
28
|
+
|
41
29
|
def self.rootname( file_name )
|
42
30
|
i = file_name.index('/')
|
43
31
|
if i
|
@@ -54,6 +42,8 @@ class File
|
|
54
42
|
#
|
55
43
|
# File.split_all("a/b/c") => ['a', 'b', 'c']
|
56
44
|
#
|
45
|
+
# CREDIT: Trans
|
46
|
+
|
57
47
|
def self.split_all(path)
|
58
48
|
head, tail = File.split(path)
|
59
49
|
return [tail] if head == '.' || tail == '/'
|
@@ -63,6 +53,8 @@ class File
|
|
63
53
|
|
64
54
|
# Cleans up a filename to ensure it will work on filesystem.
|
65
55
|
#
|
56
|
+
# CREDIT: George Moschovitis
|
57
|
+
|
66
58
|
def self.sanitize(filename)
|
67
59
|
filename = File.basename(filename.gsub("\\", "/")) # work-around for IE
|
68
60
|
filename.gsub!(/[^a-zA-Z0-9\.\-\+_]/,"_")
|
@@ -71,83 +63,3 @@ class File
|
|
71
63
|
end
|
72
64
|
|
73
65
|
end
|
74
|
-
|
75
|
-
module FileTest
|
76
|
-
# CREDIT Jeffrey Schwab
|
77
|
-
|
78
|
-
# Is the specified directory the root directory?
|
79
|
-
def self.root?(dir)
|
80
|
-
pth = File.expand_path(dir)
|
81
|
-
return true if pth == '/'
|
82
|
-
return true if pth =~ /^(\w:)?\/$/
|
83
|
-
false
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
# _____ _
|
90
|
-
# |_ _|__ ___| |_
|
91
|
-
# | |/ _ \/ __| __|
|
92
|
-
# | | __/\__ \ |_
|
93
|
-
# |_|\___||___/\__|
|
94
|
-
#
|
95
|
-
=begin test
|
96
|
-
|
97
|
-
require 'test/unit'
|
98
|
-
|
99
|
-
# mock file
|
100
|
-
|
101
|
-
class File
|
102
|
-
def self.open( fname, mode, &blk )
|
103
|
-
blk.call(self)
|
104
|
-
end
|
105
|
-
def self.read( fname=nil )
|
106
|
-
@mock_content.clone
|
107
|
-
end
|
108
|
-
def self.write( str )
|
109
|
-
@mock_content = str
|
110
|
-
end
|
111
|
-
def self.<<( str )
|
112
|
-
(@mock_content ||="") << str
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
# tests
|
117
|
-
|
118
|
-
class TestFile < Test::Unit::TestCase
|
119
|
-
|
120
|
-
# TODO Write file identity tests.
|
121
|
-
|
122
|
-
def test_sanitize_01
|
123
|
-
assert_equal( "This_is_a_test", File.sanitize('This is a test') )
|
124
|
-
end
|
125
|
-
|
126
|
-
def test_sanitize_02
|
127
|
-
assert_equal( "test", File.sanitize('This\is\test') )
|
128
|
-
end
|
129
|
-
|
130
|
-
def test_sanitize_03
|
131
|
-
assert_equal( "test", File.sanitize('This/is/test') )
|
132
|
-
end
|
133
|
-
|
134
|
-
def test_sanitize_04
|
135
|
-
assert_equal( "te_____st", File.sanitize('This/te#$#@!st') )
|
136
|
-
end
|
137
|
-
|
138
|
-
def test_sanitize_05
|
139
|
-
assert_equal( "_.", File.sanitize('.') )
|
140
|
-
end
|
141
|
-
|
142
|
-
def test_sanitize_06
|
143
|
-
assert_equal( "_....", File.sanitize('....') )
|
144
|
-
end
|
145
|
-
|
146
|
-
def test_split_all
|
147
|
-
fp = "this/is/test"
|
148
|
-
assert_equal( ['this', 'is', 'test'], File.split_all(fp) )
|
149
|
-
end
|
150
|
-
|
151
|
-
end
|
152
|
-
|
153
|
-
=end
|
@@ -1,30 +1,8 @@
|
|
1
|
-
# TITLE:
|
2
|
-
#
|
3
|
-
# File Class Write Extensions
|
4
|
-
#
|
5
|
-
# DESCRIPTION:
|
6
|
-
#
|
7
|
-
# Class extensions to File for reading
|
8
|
-
# and writing.
|
9
|
-
#
|
10
|
-
# AUTHORS:
|
11
|
-
#
|
12
|
-
# CREDIT Thomas Sawyer
|
13
|
-
# CREDIT George Moschovitis
|
14
|
-
# CREDIT Jeffrey Schwab
|
15
|
-
#
|
16
|
-
# LOG:
|
17
|
-
#
|
18
|
-
# - 2007.10.31 Trans
|
19
|
-
# Added 'b' option to all write methods. Is this okay for Windows?
|
20
|
-
#
|
21
|
-
# - 2007.10.31 Trans
|
22
|
-
# Added writelines method.
|
23
|
-
|
24
|
-
#
|
25
1
|
class File
|
26
2
|
|
27
3
|
# Append to a file.
|
4
|
+
#
|
5
|
+
# CREDIT: George Moschovitis
|
28
6
|
|
29
7
|
def self.append( file, str )
|
30
8
|
File.open( file, 'ab' ) { |f|
|
@@ -32,8 +10,6 @@ class File
|
|
32
10
|
}
|
33
11
|
end
|
34
12
|
|
35
|
-
# CREDIT George Moschovitis
|
36
|
-
|
37
13
|
# Creates a new file, or overwrites an existing file,
|
38
14
|
# and writes a string into it. Can also take a block
|
39
15
|
# just like File#open, which is yielded _after_ the
|
@@ -41,34 +17,29 @@ class File
|
|
41
17
|
#
|
42
18
|
# str = 'The content for the file'
|
43
19
|
# File.create('myfile.txt', str)
|
20
|
+
#
|
21
|
+
# CREDIT: George Moschovitis
|
44
22
|
|
45
23
|
def self.create(path, str='', &blk)
|
46
|
-
File.open(path, 'wb')
|
24
|
+
File.open(path, 'wb') do |f|
|
47
25
|
f << str
|
48
26
|
blk.call(f) if blk
|
49
|
-
|
27
|
+
end
|
50
28
|
end
|
51
29
|
|
52
|
-
#
|
30
|
+
# Writes the given data to the given path and closes the file. This is
|
31
|
+
# done in binary mode, complementing <tt>IO.read</tt> in standard Ruby.
|
32
|
+
#
|
33
|
+
# Returns the number of bytes written.
|
34
|
+
#
|
35
|
+
# CREDIT: Gavin Sinclair
|
53
36
|
|
54
37
|
def self.write(path, data)
|
55
|
-
File.open(path,
|
38
|
+
File.open(path, "wb") do |file|
|
39
|
+
return file.write(data)
|
40
|
+
end
|
56
41
|
end
|
57
42
|
|
58
|
-
# # Writes the given data to the given path and closes the file. This is
|
59
|
-
# # done in binary mode, complementing <tt>IO.read</tt> in standard Ruby.
|
60
|
-
# #
|
61
|
-
# # Returns the number of bytes written.
|
62
|
-
# #
|
63
|
-
# # CREDIT Noah Gibbs
|
64
|
-
# # CREDIT Gavin Sinclair
|
65
|
-
#
|
66
|
-
# def self.write(path, data)
|
67
|
-
# File.open(path, "wb") do |file|
|
68
|
-
# return file.write(data)
|
69
|
-
# end
|
70
|
-
# end
|
71
|
-
|
72
43
|
# Writes the given array of data to the given path and closes the file.
|
73
44
|
# This is done in binary mode, complementing <tt>IO.readlines</tt> in
|
74
45
|
# standard Ruby.
|
@@ -76,12 +47,12 @@ class File
|
|
76
47
|
# Note that +readlines+ (the standard Ruby method) returns an array of lines
|
77
48
|
# <em>with newlines intact</em>, whereas +writelines+ uses +puts+, and so
|
78
49
|
# appends newlines if necessary. In this small way, +readlines+ and
|
79
|
-
# +writelines+ are not exact opposites.
|
50
|
+
# +writelines+ are not exact opposites.
|
80
51
|
#
|
81
52
|
# Returns +nil+.
|
82
53
|
#
|
83
|
-
# CREDIT Noah Gibbs
|
84
|
-
# CREDIT Gavin Sinclair
|
54
|
+
# CREDIT: Noah Gibbs
|
55
|
+
# CREDIT: Gavin Sinclair
|
85
56
|
|
86
57
|
def self.writelines(path, data)
|
87
58
|
File.open(path, "wb") do |file|
|
@@ -103,11 +74,12 @@ class File
|
|
103
74
|
# done) or to append to it.
|
104
75
|
#
|
105
76
|
# # Reverse contents of "message"
|
106
|
-
# File.
|
77
|
+
# File.rewrite("message") { |str| str.reverse! }
|
107
78
|
#
|
108
79
|
# # Replace "foo" by "bar" in "binary"
|
109
|
-
# File.
|
80
|
+
# File.rewrite("binary", "b") { |str| str.gsub!("foo", "bar") }
|
110
81
|
#
|
82
|
+
# CREDIT: George Moschovitis
|
111
83
|
#--
|
112
84
|
# TODO Should it be in-place modification like this? Or would it be better
|
113
85
|
# if whatever the block returns is written to the file instead?
|
@@ -1,12 +1,13 @@
|
|
1
|
-
|
2
1
|
module FileTest
|
3
2
|
|
4
3
|
module_function
|
5
4
|
|
6
|
-
# Is
|
5
|
+
# Is the specified directory the root directory?
|
6
|
+
#
|
7
|
+
# CREDIT: Jeffrey Schwab
|
7
8
|
|
8
9
|
def root?(dir=nil)
|
9
|
-
pth = File.expand_path(dir||
|
10
|
+
pth = File.expand_path(dir||Dir.pwd)
|
10
11
|
return true if pth == '/'
|
11
12
|
return true if pth =~ /^(\w:)?\/$/
|
12
13
|
false
|
data/lib/core/facets/functor.rb
CHANGED
@@ -14,16 +14,16 @@
|
|
14
14
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
15
15
|
# FOR A PARTICULAR PURPOSE.
|
16
16
|
#
|
17
|
-
#
|
18
|
-
# - Consider renaming Functor to Dispatch or Dispatcher, or Func ?
|
19
|
-
#
|
20
|
-
# CREDIT:
|
17
|
+
# AUTHORS:
|
21
18
|
# - Thomas Sawyer
|
22
19
|
#
|
23
20
|
# LOG:
|
24
21
|
# - 2006-11-04 trans Deprecated #self. Call #self on the #binding instead.
|
25
22
|
# - 2006-11-04 trans Deprecated #functor_function, renamed to #to_proc.
|
26
23
|
# - 2006-11-04 trans All methods are now private except #binding and operators.
|
24
|
+
#
|
25
|
+
# TODO:
|
26
|
+
# - Consider renaming Functor to Dispatch or Dispatcher ?
|
27
27
|
|
28
28
|
# = Functor
|
29
29
|
#
|
@@ -46,7 +46,7 @@
|
|
46
46
|
class Functor
|
47
47
|
|
48
48
|
# Privatize all methods except vital methods, #binding and operators.
|
49
|
-
private
|
49
|
+
private(*instance_methods.select { |m| m !~ /(^__|^\W|^binding$)/ })
|
50
50
|
|
51
51
|
def initialize(&function)
|
52
52
|
@function = function
|
@@ -62,41 +62,3 @@ class Functor
|
|
62
62
|
end
|
63
63
|
|
64
64
|
end
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
# _____ _
|
69
|
-
# |_ _|__ ___| |_
|
70
|
-
# | |/ _ \/ __| __|
|
71
|
-
# | | __/\__ \ |_
|
72
|
-
# |_|\___||___/\__|
|
73
|
-
#
|
74
|
-
|
75
|
-
=begin testing
|
76
|
-
|
77
|
-
require 'test/unit'
|
78
|
-
|
79
|
-
class TC_Functor < Test::Unit::TestCase
|
80
|
-
|
81
|
-
def test_function
|
82
|
-
f = Functor.new { |op, x| x.send(op, x) }
|
83
|
-
assert_equal( 2, f + 1 ) #=> 2
|
84
|
-
assert_equal( 4, f + 2 ) #=> 4
|
85
|
-
assert_equal( 6, f + 3 ) #=> 6
|
86
|
-
assert_equal( 1, f * 1 ) #=> 1
|
87
|
-
assert_equal( 4, f * 2 ) #=> 4
|
88
|
-
assert_equal( 9, f * 3 ) #=> 9
|
89
|
-
end
|
90
|
-
|
91
|
-
def test_decoration
|
92
|
-
a = 'A'
|
93
|
-
f = Functor.new{ |op, x| x.send(op, a + x) }
|
94
|
-
assert_equal( 'BAB', f + 'B' )
|
95
|
-
assert_equal( 'CAC', f + 'C' )
|
96
|
-
assert_equal( 'DAD', f + 'D' )
|
97
|
-
end
|
98
|
-
|
99
|
-
end
|
100
|
-
|
101
|
-
=end
|
102
|
-
|