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/module.rb
CHANGED
@@ -7,5 +7,7 @@ require 'facets/module/traits.rb'
|
|
7
7
|
require 'facets/module/modify.rb'
|
8
8
|
require 'facets/module/alias.rb'
|
9
9
|
require 'facets/module/attr.rb'
|
10
|
-
require 'facets/module/require.rb'
|
11
10
|
require 'facets/module/methods.rb'
|
11
|
+
|
12
|
+
# remove for 1.9
|
13
|
+
require 'facets/module/require.rb'
|
@@ -1,30 +1,17 @@
|
|
1
|
-
# TITLE:
|
2
|
-
#
|
3
|
-
# Abstract method.
|
4
|
-
#
|
5
|
-
# SUMMARY:
|
6
|
-
#
|
7
|
-
# Create an abstrct method. If it is not overriden it will raise
|
8
|
-
# an exception when called.
|
9
|
-
#
|
10
|
-
# AUTHORS:
|
11
|
-
#
|
12
|
-
# - Thomas Sawyer
|
13
|
-
|
14
|
-
#
|
15
1
|
class Module
|
16
2
|
|
17
|
-
#
|
18
|
-
#
|
19
|
-
# will be raised.
|
3
|
+
# Create an abstract method. If it is not overridden, it will
|
4
|
+
# raise a TypeError when called.
|
20
5
|
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
6
|
+
# class C
|
7
|
+
# abstract :a
|
8
|
+
# end
|
24
9
|
#
|
25
|
-
#
|
26
|
-
#
|
10
|
+
# c = C.new
|
11
|
+
# c.a #=> Error: undefined abstraction #a
|
27
12
|
#
|
13
|
+
# CREDIT: Trans
|
14
|
+
|
28
15
|
def abstract( *sym )
|
29
16
|
sym.each { |s|
|
30
17
|
define_method( s ) { raise TypeError, "undefined abstraction ##{s}" }
|
@@ -32,28 +19,3 @@ class Module
|
|
32
19
|
end
|
33
20
|
|
34
21
|
end
|
35
|
-
|
36
|
-
|
37
|
-
=begin test
|
38
|
-
|
39
|
-
require 'test/unit'
|
40
|
-
|
41
|
-
class TestAttrTester < Test::Unit::TestCase
|
42
|
-
|
43
|
-
class Aq
|
44
|
-
abstract :q
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_abstract_01
|
48
|
-
ac = Aq.new
|
49
|
-
assert_raises( TypeError ) { ac.q }
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_abstract_02
|
53
|
-
ac = Class.new { abstract :q }.new
|
54
|
-
assert_raises( TypeError ) { ac.q }
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
=end
|
@@ -13,12 +13,6 @@
|
|
13
13
|
# AUTHORS:
|
14
14
|
#
|
15
15
|
# CREDIT Thomas Saywer
|
16
|
-
#
|
17
|
-
# LOG:
|
18
|
-
#
|
19
|
-
# - 2007.10.31 trans
|
20
|
-
# Made #alias_method_chain compatible with current ActiveSupport version.
|
21
|
-
|
22
16
|
class Module
|
23
17
|
|
24
18
|
private
|
@@ -42,6 +36,7 @@ class Module
|
|
42
36
|
end
|
43
37
|
|
44
38
|
# As with alias_accessor, but just for the reader.
|
39
|
+
# This is basically the same as alias_method.
|
45
40
|
|
46
41
|
def alias_reader(*args)
|
47
42
|
orig = args.last
|
@@ -61,17 +56,18 @@ class Module
|
|
61
56
|
end
|
62
57
|
end
|
63
58
|
|
64
|
-
# Like
|
65
|
-
# public rather than private.
|
66
|
-
#
|
59
|
+
# Like module_function but makes the instance method
|
60
|
+
# public rather than private.
|
61
|
+
#
|
62
|
+
# NOTE: This does not work as a sectional modifier.
|
67
63
|
|
68
|
-
def module_method
|
69
|
-
module_function
|
70
|
-
public
|
64
|
+
def module_method(*meth)
|
65
|
+
module_function(*meth)
|
66
|
+
public(*meth)
|
71
67
|
end
|
72
68
|
|
73
69
|
# Alias a module function so that the alias is also
|
74
|
-
# a module function. The typical #alias_method
|
70
|
+
# a module function. The typical #alias_method
|
75
71
|
# does not do this.
|
76
72
|
#
|
77
73
|
# module Demo
|
@@ -116,8 +112,8 @@ class Module
|
|
116
112
|
#
|
117
113
|
# so you can safely chain foo, foo?, and foo! with the same feature.
|
118
114
|
#
|
119
|
-
# CREDIT Bitsweat
|
120
|
-
|
115
|
+
# CREDIT: Bitsweat
|
116
|
+
# CREDIT: Rails Team
|
121
117
|
|
122
118
|
def alias_method_chain(target, feature)
|
123
119
|
# Strip out punctuation on predicates or bang methods since
|
@@ -141,56 +137,3 @@ class Module
|
|
141
137
|
end
|
142
138
|
|
143
139
|
end
|
144
|
-
|
145
|
-
|
146
|
-
# _____ _
|
147
|
-
# |_ _|__ ___| |_
|
148
|
-
# | |/ _ \/ __| __|
|
149
|
-
# | | __/\__ \ |_
|
150
|
-
# |_|\___||___/\__|
|
151
|
-
#
|
152
|
-
=begin test
|
153
|
-
|
154
|
-
require 'test/unit'
|
155
|
-
|
156
|
-
class TCModule < Test::Unit::TestCase
|
157
|
-
|
158
|
-
module MockModule
|
159
|
-
# for alias_module_method
|
160
|
-
def x ; 33 ; end
|
161
|
-
module_function :x
|
162
|
-
alias_module_function :y, :x
|
163
|
-
end
|
164
|
-
|
165
|
-
def test_alias_module_function
|
166
|
-
assert_equal( 33, MockModule.y )
|
167
|
-
#assert_equal( 33, @m.send(:y) ) # use send b/c private
|
168
|
-
end
|
169
|
-
|
170
|
-
module X
|
171
|
-
def self.included(base)
|
172
|
-
base.module_eval {
|
173
|
-
alias_method_chain :foo, :feature
|
174
|
-
}
|
175
|
-
end
|
176
|
-
def foo_with_feature
|
177
|
-
foo_without_feature + '!'
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
class Y
|
182
|
-
def foo
|
183
|
-
"FOO"
|
184
|
-
end
|
185
|
-
include X
|
186
|
-
#alias_method_chain :foo, :feature
|
187
|
-
end
|
188
|
-
|
189
|
-
def test_001
|
190
|
-
y = Y.new
|
191
|
-
assert_equal( "FOO!", y.foo )
|
192
|
-
end
|
193
|
-
|
194
|
-
end
|
195
|
-
|
196
|
-
=end
|
@@ -1,20 +1,9 @@
|
|
1
|
-
# TITLE:
|
2
|
-
#
|
3
|
-
# Extra Attributes Methods
|
4
|
-
#
|
5
|
-
# SUMMARY:
|
6
|
-
#
|
7
|
-
# Module attribute extensions.
|
8
|
-
#
|
9
|
-
# AUTHORS:
|
10
|
-
#
|
11
|
-
# - Thomas Sawyer
|
12
|
-
|
13
|
-
#
|
14
1
|
class Module
|
15
2
|
|
16
3
|
# Like attr_writer, but the writer method validates the
|
17
4
|
# setting against the given block.
|
5
|
+
#
|
6
|
+
# CREDIT: ?
|
18
7
|
|
19
8
|
def attr_validator(*symbols, &validator)
|
20
9
|
made = []
|
@@ -30,11 +19,13 @@ class Module
|
|
30
19
|
made
|
31
20
|
end
|
32
21
|
|
22
|
+
# Create aliases for validators.
|
23
|
+
|
33
24
|
def alias_validator(*args)
|
34
25
|
orig = args.last
|
35
26
|
args = args - [orig]
|
36
27
|
args.each do |name|
|
37
|
-
alias_method(name, orig)
|
28
|
+
#alias_method(name, orig)
|
38
29
|
alias_method("#{name}=", "#{orig}=")
|
39
30
|
end
|
40
31
|
end
|
@@ -57,6 +48,8 @@ class Module
|
|
57
48
|
# end
|
58
49
|
# end
|
59
50
|
#
|
51
|
+
# CREDIT: Trans
|
52
|
+
|
60
53
|
def attr_setter(*args)
|
61
54
|
code, made = '', []
|
62
55
|
args.each do |a|
|
@@ -71,6 +64,20 @@ class Module
|
|
71
64
|
made
|
72
65
|
end
|
73
66
|
|
67
|
+
# Alias an accessor. This create an alias for
|
68
|
+
# both a reader and a writer.
|
69
|
+
#
|
70
|
+
# class X
|
71
|
+
# attr_accessor :a
|
72
|
+
# alias_accessor :b, :a
|
73
|
+
# end
|
74
|
+
#
|
75
|
+
# x = X.new
|
76
|
+
# x.b = 1
|
77
|
+
# x.a #=> 1
|
78
|
+
#
|
79
|
+
# CREDIT: Trans
|
80
|
+
|
74
81
|
def alias_setter(*args)
|
75
82
|
args = args - [orig]
|
76
83
|
args.each do |name|
|
@@ -94,6 +101,8 @@ class Module
|
|
94
101
|
# @a = value
|
95
102
|
# self
|
96
103
|
# end
|
104
|
+
#
|
105
|
+
# CREDIT: Trans
|
97
106
|
|
98
107
|
def attr_accessor!(*args)
|
99
108
|
attr_reader!(*args) + attr_writer!(*args)
|
@@ -101,6 +110,10 @@ class Module
|
|
101
110
|
alias_method :attr_switcher, :attr_accessor!
|
102
111
|
alias_method :attr_toggler, :attr_accessor!
|
103
112
|
|
113
|
+
# Create aliases for flag accessors.
|
114
|
+
#
|
115
|
+
# CREDIT: Trans
|
116
|
+
|
104
117
|
def alias_accessor!(*args)
|
105
118
|
orig = args.last
|
106
119
|
args = args - [orig]
|
@@ -112,7 +125,7 @@ class Module
|
|
112
125
|
alias_method :alias_switcher, :alias_accessor!
|
113
126
|
alias_method :alias_toggler, :alias_accessor!
|
114
127
|
|
115
|
-
# Create an tester attribute. This creates a single
|
128
|
+
# Create an tester attribute. This creates a single method
|
116
129
|
# used to test the attribute for truth.
|
117
130
|
#
|
118
131
|
# attr_reader! :a
|
@@ -139,6 +152,10 @@ class Module
|
|
139
152
|
alias_method :attr_reader?, :attr_reader!
|
140
153
|
alias_method :attr_tester, :attr_reader!
|
141
154
|
|
155
|
+
# Create aliases for flag reader.
|
156
|
+
#
|
157
|
+
# CREDIT: Trans
|
158
|
+
|
142
159
|
def alias_reader!(*args)
|
143
160
|
orig = args.last
|
144
161
|
args = args - [orig]
|
@@ -176,6 +193,10 @@ class Module
|
|
176
193
|
made
|
177
194
|
end
|
178
195
|
|
196
|
+
# Create aliases for flag writer.
|
197
|
+
#
|
198
|
+
# CREDIT: Trans
|
199
|
+
|
179
200
|
def alias_writer!(*args)
|
180
201
|
orig = args.last
|
181
202
|
args = args - [orig]
|
@@ -1,20 +1,3 @@
|
|
1
|
-
# TITLE:
|
2
|
-
#
|
3
|
-
# Class Attributes
|
4
|
-
#
|
5
|
-
# FILE:
|
6
|
-
#
|
7
|
-
# cattr.rb
|
8
|
-
#
|
9
|
-
# DESCRIPTION:
|
10
|
-
#
|
11
|
-
# Class attributes with instance level access.
|
12
|
-
#
|
13
|
-
# AUTHORS:
|
14
|
-
#
|
15
|
-
# CREDIT David Heinemeier Hansson
|
16
|
-
|
17
|
-
#
|
18
1
|
class Class
|
19
2
|
|
20
3
|
# Creates a class-variable attribute that can
|
@@ -25,6 +8,8 @@ class Class
|
|
25
8
|
# method is not carried along. So the are now just class
|
26
9
|
# methods. Accordingly, #mattr will eventually be deprecated
|
27
10
|
# so use #cattr instead.
|
11
|
+
#
|
12
|
+
# CREDIT: David Heinemeier Hansson
|
28
13
|
|
29
14
|
def cattr( *syms )
|
30
15
|
accessors, readers = syms.flatten.partition { |a| a.to_s =~ /=$/ }
|
@@ -48,6 +33,8 @@ class Class
|
|
48
33
|
# MyClass.a #=> 10
|
49
34
|
# MyClass.new.a #=> 10
|
50
35
|
#
|
36
|
+
# CREDIT: David Heinemeier Hansson
|
37
|
+
|
51
38
|
def cattr_reader( *syms )
|
52
39
|
syms.flatten.each do |sym|
|
53
40
|
class_eval(<<-EOS, __FILE__, __LINE__)
|
@@ -79,6 +66,8 @@ class Class
|
|
79
66
|
# MyClass.new.a = 29
|
80
67
|
# MyClass.a #=> 29
|
81
68
|
#
|
69
|
+
# CREDIT: David Heinemeier Hansson
|
70
|
+
|
82
71
|
def cattr_writer(*syms)
|
83
72
|
syms.flatten.each do |sym|
|
84
73
|
class_eval(<<-EOS, __FILE__, __LINE__)
|
@@ -107,6 +96,8 @@ class Class
|
|
107
96
|
# mc = MyClass.new
|
108
97
|
# mc.a #=> 10
|
109
98
|
#
|
99
|
+
# CREDIT: David Heinemeier Hansson
|
100
|
+
|
110
101
|
def cattr_accessor(*syms)
|
111
102
|
m = []
|
112
103
|
m.concat( cattr_reader(*syms) )
|
@@ -117,62 +108,3 @@ class Class
|
|
117
108
|
alias_method :mattr_accessor, :cattr_accessor # deprecate
|
118
109
|
|
119
110
|
end
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
# _____ _
|
124
|
-
# |_ _|__ ___| |_
|
125
|
-
# | |/ _ \/ __| __|
|
126
|
-
# | | __/\__ \ |_
|
127
|
-
# |_|\___||___/\__|
|
128
|
-
#
|
129
|
-
=begin test
|
130
|
-
|
131
|
-
require 'test/unit'
|
132
|
-
|
133
|
-
class TCModule < Test::Unit::TestCase
|
134
|
-
|
135
|
-
class MockObject
|
136
|
-
def initialize
|
137
|
-
@@a = 10
|
138
|
-
end
|
139
|
-
def b ; @@b ; end
|
140
|
-
end
|
141
|
-
|
142
|
-
def test_cattr
|
143
|
-
assert_nothing_raised {
|
144
|
-
MockObject.class_eval { cattr :a }
|
145
|
-
}
|
146
|
-
t = MockObject.new
|
147
|
-
assert_equal( 10, t.a )
|
148
|
-
end
|
149
|
-
|
150
|
-
def test_cattr_reader
|
151
|
-
assert_nothing_raised {
|
152
|
-
MockObject.class_eval { cattr_reader :a }
|
153
|
-
}
|
154
|
-
t = MockObject.new
|
155
|
-
assert_equal( 10, t.a )
|
156
|
-
end
|
157
|
-
|
158
|
-
def test_cattr_writer
|
159
|
-
assert_nothing_raised {
|
160
|
-
MockObject.class_eval { cattr_writer :b }
|
161
|
-
}
|
162
|
-
t = MockObject.new
|
163
|
-
t.b = 5
|
164
|
-
assert_equal( 5, t.b )
|
165
|
-
end
|
166
|
-
|
167
|
-
def test_cattr_accessor
|
168
|
-
assert_nothing_raised {
|
169
|
-
MockObject.class_eval { cattr_accessor :c }
|
170
|
-
}
|
171
|
-
t = MockObject.new
|
172
|
-
t.c = 50
|
173
|
-
assert_equal( 50, t.c )
|
174
|
-
end
|
175
|
-
|
176
|
-
end
|
177
|
-
|
178
|
-
=end
|
@@ -1,22 +1,12 @@
|
|
1
|
-
# TITLE:
|
2
|
-
#
|
3
|
-
# Module Clone and Augment
|
4
|
-
#
|
5
|
-
# SUMMARY:
|
6
|
-
#
|
7
|
-
# Module extensions for cloning and augmenting a module.
|
8
|
-
# These will *probably* be fully usurped by Traits in
|
9
|
-
# the long run.
|
10
|
-
#
|
11
|
-
# CREDITS:
|
12
|
-
#
|
13
|
-
# - Thomas Sawyer
|
14
|
-
|
15
|
-
#
|
16
1
|
class Module
|
17
2
|
|
18
3
|
# Returns an anonymous module with the specified methods
|
19
4
|
# of the receiving module renamed.
|
5
|
+
#
|
6
|
+
# NOTE: These is likely to be usurped by traits.rb.
|
7
|
+
#
|
8
|
+
# CREDIT: Trans
|
9
|
+
|
20
10
|
def clone_renaming( pairs )
|
21
11
|
mod = self.dup
|
22
12
|
pairs.each_pair{ |to_sym, from_sym|
|
@@ -30,6 +20,11 @@ class Module
|
|
30
20
|
|
31
21
|
# Returns an anonymous module with the specified methods
|
32
22
|
# of the receiving module removed.
|
23
|
+
#
|
24
|
+
# NOTE: These is likely to be usurped by traits.rb.
|
25
|
+
#
|
26
|
+
# CREDIT: Trans
|
27
|
+
|
33
28
|
def clone_removing( *meths )
|
34
29
|
mod = self.dup
|
35
30
|
methods_to_remove = meths
|
@@ -39,6 +34,11 @@ class Module
|
|
39
34
|
|
40
35
|
# Returns an anonymous module with only the specified methods
|
41
36
|
# of the receiving module intact.
|
37
|
+
#
|
38
|
+
# NOTE: These is likely to be usurped by traits.rb.
|
39
|
+
#
|
40
|
+
# CREDIT: Trans
|
41
|
+
|
42
42
|
def clone_using( *methods )
|
43
43
|
methods.collect!{ |m| m.to_s }
|
44
44
|
methods_to_remove = instance_methods - methods
|
@@ -48,54 +48,3 @@ class Module
|
|
48
48
|
end
|
49
49
|
|
50
50
|
end
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
# _____ _
|
55
|
-
# |_ _|__ ___| |_
|
56
|
-
# | |/ _ \/ __| __|
|
57
|
-
# | | __/\__ \ |_
|
58
|
-
# |_|\___||___/\__|
|
59
|
-
#
|
60
|
-
=begin test
|
61
|
-
|
62
|
-
require 'test/unit'
|
63
|
-
|
64
|
-
class TestModuleClone < Test::Unit::TestCase
|
65
|
-
|
66
|
-
module M
|
67
|
-
def f; 1; end
|
68
|
-
def g; 2; end
|
69
|
-
end
|
70
|
-
|
71
|
-
class Remove
|
72
|
-
include M.clone_removing( :g )
|
73
|
-
end
|
74
|
-
|
75
|
-
class Rename
|
76
|
-
include M.clone_renaming( :q => :g )
|
77
|
-
end
|
78
|
-
|
79
|
-
class Use
|
80
|
-
include M.clone_using( :f )
|
81
|
-
end
|
82
|
-
|
83
|
-
def test_removing
|
84
|
-
assert( Remove.method_defined?(:f) )
|
85
|
-
assert( ! Remove.method_defined?(:g) )
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_renaming
|
89
|
-
assert( ! Rename.method_defined?(:g) )
|
90
|
-
assert( Rename.method_defined?(:f) )
|
91
|
-
assert( Rename.method_defined?(:q) )
|
92
|
-
end
|
93
|
-
|
94
|
-
def test_using_2
|
95
|
-
assert( ! Use.method_defined?(:g) )
|
96
|
-
assert( Use.method_defined?(:f) )
|
97
|
-
end
|
98
|
-
|
99
|
-
end
|
100
|
-
|
101
|
-
=end
|