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
@@ -11,8 +11,8 @@ class Array
|
|
11
11
|
#
|
12
12
|
# [1,2,3].rotate(-1) #=> [2,3,1]
|
13
13
|
#
|
14
|
-
# CREDIT Florian Gross
|
15
|
-
# CREDIT Thomas Sawyer
|
14
|
+
# CREDIT: Florian Gross
|
15
|
+
# CREDIT: Thomas Sawyer
|
16
16
|
|
17
17
|
def rotate(n=1)
|
18
18
|
self.dup.rotate!(n)
|
@@ -24,8 +24,8 @@ class Array
|
|
24
24
|
# a.rotate!
|
25
25
|
# a #=> [3,1,2]
|
26
26
|
#
|
27
|
-
# CREDIT Florian Gross
|
28
|
-
# CREDIT Thomas Sawyer
|
27
|
+
# CREDIT: Florian Gross
|
28
|
+
# CREDIT: Thomas Sawyer
|
29
29
|
|
30
30
|
def rotate!(n=1)
|
31
31
|
n = n.to_int
|
@@ -1,9 +1,23 @@
|
|
1
1
|
class Array
|
2
2
|
|
3
|
+
# Store a value at a givne index.
|
4
|
+
# Store is an alias for #[]=.
|
5
|
+
|
3
6
|
alias_method :store, :[]=
|
4
7
|
|
5
|
-
#
|
6
|
-
#
|
8
|
+
# Splice acts a combination of #slice! and #store.
|
9
|
+
# If two arguments are given it calls #store.
|
10
|
+
# If a single argument is give it calls slice!.
|
11
|
+
#
|
12
|
+
# a = [1,2,3]
|
13
|
+
# a.splice(1) #=> 2
|
14
|
+
# a #=> [1,3]
|
15
|
+
#
|
16
|
+
# a = [1,2,3]
|
17
|
+
# a.splice(1,4) #=> 4
|
18
|
+
# a #=>[1,4,3]
|
19
|
+
#
|
20
|
+
# CREDIT: Trans
|
7
21
|
|
8
22
|
def splice(*args)
|
9
23
|
if args.size == 1
|
@@ -1,12 +1,3 @@
|
|
1
|
-
# TITLE:
|
2
|
-
# Stackable
|
3
|
-
#
|
4
|
-
# DESCRIPTION:
|
5
|
-
# Array extensions for stack maniipulation.
|
6
|
-
#
|
7
|
-
# NOTES:
|
8
|
-
# - TODO Better name than #place --top, put, or what?
|
9
|
-
|
10
1
|
require 'facets/array/splice'
|
11
2
|
require 'facets/stackable'
|
12
3
|
|
@@ -18,9 +9,11 @@ class Array
|
|
18
9
|
# It is the converse of push.
|
19
10
|
#
|
20
11
|
# a=[1,2,3]
|
21
|
-
# a.
|
22
|
-
# a
|
12
|
+
# a.poke(9) #=> [9,1,2,3]
|
13
|
+
# a #=> [9,1,2,3]
|
23
14
|
#
|
15
|
+
# CREDIT: Trans
|
16
|
+
|
24
17
|
alias_method :poke, :unshift
|
25
18
|
|
26
19
|
# Alias for shift which removes an object
|
@@ -31,34 +24,7 @@ class Array
|
|
31
24
|
# a.pull #=> 1
|
32
25
|
# a #=> [2,3]
|
33
26
|
#
|
27
|
+
# CREDIT: Trans
|
28
|
+
|
34
29
|
alias_method :pull, :shift
|
35
30
|
end
|
36
|
-
|
37
|
-
|
38
|
-
# _____ _
|
39
|
-
# |_ _|__ ___| |_
|
40
|
-
# | |/ _ \/ __| __|
|
41
|
-
# | | __/\__ \ |_
|
42
|
-
# |_|\___||___/\__|
|
43
|
-
#
|
44
|
-
=begin test
|
45
|
-
|
46
|
-
require 'test/unit'
|
47
|
-
|
48
|
-
class TestArray < Test::Unit::TestCase
|
49
|
-
|
50
|
-
def test_poke
|
51
|
-
a = [2,3]
|
52
|
-
assert_equal( [1,2,3], a.poke(1) )
|
53
|
-
assert_equal( [4,1,2,3], a.poke(4) )
|
54
|
-
end
|
55
|
-
|
56
|
-
def test_pull
|
57
|
-
a = [1,2,3]
|
58
|
-
assert_equal( 1, a.pull )
|
59
|
-
assert_equal( [2,3], a )
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
63
|
-
|
64
|
-
=end
|
data/lib/core/facets/binding.rb
CHANGED
@@ -10,27 +10,27 @@ require 'facets/kernel/callstack'
|
|
10
10
|
#
|
11
11
|
class Binding
|
12
12
|
|
13
|
-
|
14
|
-
base.send(:include, Eval)
|
15
|
-
end
|
13
|
+
# Returns line number.
|
16
14
|
|
17
|
-
# returns line number
|
18
15
|
def __LINE__
|
19
16
|
eval("__LINE__")
|
20
17
|
end
|
21
18
|
|
22
|
-
#
|
19
|
+
# Returns file name.
|
20
|
+
|
23
21
|
def __FILE__
|
24
22
|
eval("__FILE__")
|
25
23
|
end
|
26
24
|
|
27
|
-
#
|
25
|
+
# Return the directory of the file.
|
26
|
+
|
28
27
|
def __DIR__
|
29
28
|
eval("File.dirname(__FILE__)")
|
30
29
|
end
|
31
30
|
|
32
31
|
# Returns the call stack, in array format.
|
33
|
-
|
32
|
+
|
33
|
+
def call_stack(level=1)
|
34
34
|
eval( "call_stack( #{level} )" )
|
35
35
|
end
|
36
36
|
|
@@ -39,12 +39,14 @@ class Binding
|
|
39
39
|
# def tester; p called; end
|
40
40
|
# tester #=> :tester
|
41
41
|
#
|
42
|
+
|
42
43
|
def called
|
43
44
|
name = /\`([^\']+)\'/.match(caller(1).first)[1]
|
44
45
|
return name.to_sym
|
45
46
|
end
|
46
47
|
|
47
48
|
# Returns the call stack, same format as Kernel#caller()
|
49
|
+
|
48
50
|
def caller( skip=0 )
|
49
51
|
eval("caller(#{skip})")
|
50
52
|
end
|
@@ -56,66 +58,10 @@ class Binding
|
|
56
58
|
# def tester; p methodname; end
|
57
59
|
# tester #=> "tester"
|
58
60
|
#
|
61
|
+
|
59
62
|
def methodname
|
60
63
|
name = /\`([^\']+)\'/.match(caller(1).first)[1]
|
61
64
|
return name
|
62
65
|
end
|
63
66
|
|
64
67
|
end
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
# _____ _
|
69
|
-
# |_ _|__ ___| |_
|
70
|
-
# | |/ _ \/ __| __|
|
71
|
-
# | | __/\__ \ |_
|
72
|
-
# |_|\___||___/\__|
|
73
|
-
#
|
74
|
-
=begin test
|
75
|
-
|
76
|
-
require 'test/unit'
|
77
|
-
|
78
|
-
class TestBindingCallStack < Test::Unit::TestCase
|
79
|
-
|
80
|
-
def setup
|
81
|
-
a = 1
|
82
|
-
b = 2
|
83
|
-
x = "hello"
|
84
|
-
# the line number must be updated if it moves
|
85
|
-
@bind = binding; @this_line_no = __LINE__
|
86
|
-
@this_file_name = File.basename( __FILE__ ) # why does it equal basename only?
|
87
|
-
end
|
88
|
-
|
89
|
-
def test___LINE__
|
90
|
-
assert_equal( @this_line_no, @bind.__LINE__ )
|
91
|
-
end
|
92
|
-
|
93
|
-
def test___FILE__
|
94
|
-
assert_equal( @this_file_name, File.basename( @bind.__FILE__ ) )
|
95
|
-
end
|
96
|
-
|
97
|
-
def test___DIR__
|
98
|
-
assert_equal( File.dirname( @bind.__FILE__ ), @bind.__DIR__ )
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_call_stack
|
102
|
-
assert_instance_of( Array, @bind.call_stack )
|
103
|
-
end
|
104
|
-
|
105
|
-
def test_called
|
106
|
-
assert_equal( :setup, @bind.called )
|
107
|
-
end
|
108
|
-
|
109
|
-
def test_caller
|
110
|
-
# how to test?
|
111
|
-
assert_nothing_raised{ @bind.caller }
|
112
|
-
end
|
113
|
-
|
114
|
-
def test_methodname
|
115
|
-
assert_equal( 'setup', @bind.methodname )
|
116
|
-
end
|
117
|
-
|
118
|
-
end
|
119
|
-
|
120
|
-
=end
|
121
|
-
|
@@ -1,83 +1,17 @@
|
|
1
|
-
|
2
|
-
# Primary Binding Extensions
|
3
|
-
#
|
4
|
-
# SUMMARY:
|
5
|
-
# The heart of all binding extensions.
|
6
|
-
# Some of this will be standard Ruby in future version.
|
1
|
+
unless (RUBY_VERSION[0,3] == '1.9')
|
7
2
|
|
8
|
-
class Binding
|
3
|
+
class Binding
|
9
4
|
|
10
|
-
|
5
|
+
# Evaluate a Ruby source code string (or block) in the binding context.
|
11
6
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
|
-
# Returns the nature of something, nil if that thing is not defined.
|
21
|
-
|
22
|
-
def defined?(x)
|
23
|
-
eval("defined? #{x}")
|
24
|
-
end
|
25
|
-
|
26
|
-
# Returns self of the binding context.
|
27
|
-
|
28
|
-
def self()
|
29
|
-
@self ||= eval("self")
|
30
|
-
@self
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
|
36
|
-
module Kernel
|
37
|
-
# A shorthand pronoun for binding().
|
38
|
-
#
|
39
|
-
# a = 3
|
40
|
-
# b = here
|
41
|
-
# eval( "a", b ) #=> 3
|
42
|
-
#
|
43
|
-
alias_method :here, :binding
|
44
|
-
end
|
45
|
-
|
46
|
-
|
47
|
-
# _____ _
|
48
|
-
# |_ _|__ ___| |_
|
49
|
-
# | |/ _ \/ __| __|
|
50
|
-
# | | __/\__ \ |_
|
51
|
-
# |_|\___||___/\__|
|
52
|
-
#
|
53
|
-
=begin test
|
54
|
-
|
55
|
-
require 'test/unit'
|
56
|
-
|
57
|
-
class TestBindingEval < Test::Unit::TestCase
|
58
|
-
|
59
|
-
def setup
|
60
|
-
x = "hello"
|
61
|
-
@bind = binding; @this_line_no = __LINE__
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_eval
|
65
|
-
assert_equal( "hello", @bind.eval("x") )
|
66
|
-
end
|
67
|
-
|
68
|
-
def test_self
|
69
|
-
assert_equal( self, @bind.self )
|
70
|
-
end
|
71
|
-
|
72
|
-
def test_defined?
|
73
|
-
assert( @bind.defined?("x") )
|
74
|
-
end
|
75
|
-
|
76
|
-
def test_here
|
77
|
-
assert_instance_of( Binding, here )
|
7
|
+
def eval(str) #='', &blk )
|
8
|
+
#if block_given?
|
9
|
+
# Kernel.eval( self, &blk )
|
10
|
+
#elsif str
|
11
|
+
Kernel.eval(str, self)
|
12
|
+
#end
|
78
13
|
end
|
79
14
|
|
80
15
|
end
|
81
16
|
|
82
|
-
|
83
|
-
|
17
|
+
end
|
@@ -11,10 +11,6 @@ require 'facets/binding/eval.rb'
|
|
11
11
|
#
|
12
12
|
class Binding
|
13
13
|
|
14
|
-
def self.included(base) #:nodoc:
|
15
|
-
base.send(:include, Eval)
|
16
|
-
end
|
17
|
-
|
18
14
|
# Returns the local variables defined in the binding context
|
19
15
|
#
|
20
16
|
# a = 2
|
@@ -43,44 +39,3 @@ class Binding
|
|
43
39
|
end
|
44
40
|
|
45
41
|
end
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
# _____ _
|
50
|
-
# |_ _|__ ___| |_
|
51
|
-
# | |/ _ \/ __| __|
|
52
|
-
# | | __/\__ \ |_
|
53
|
-
# |_|\___||___/\__|
|
54
|
-
#
|
55
|
-
=begin test
|
56
|
-
|
57
|
-
require 'test/unit'
|
58
|
-
|
59
|
-
class TestBindingVariables < Test::Unit::TestCase
|
60
|
-
|
61
|
-
def setup
|
62
|
-
a = 1
|
63
|
-
b = 2
|
64
|
-
x = "hello"
|
65
|
-
# the line number must be updated if it moves
|
66
|
-
@bind = binding; @this_line_no = __LINE__
|
67
|
-
@this_file_name = File.basename( __FILE__ ) # why does it equal basename only?
|
68
|
-
end
|
69
|
-
|
70
|
-
def test_local_variables
|
71
|
-
assert_equal( ["a","b","x"], @bind.local_variables )
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_op_store
|
75
|
-
assert_nothing_raised{ @bind["x"] = "goodbye" }
|
76
|
-
assert_equal( "goodbye", @bind["x"] )
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_op_fetch
|
80
|
-
assert_equal( "hello", @bind["x"] )
|
81
|
-
end
|
82
|
-
|
83
|
-
end
|
84
|
-
|
85
|
-
=end
|
86
|
-
|
data/lib/core/facets/boolean.rb
CHANGED
@@ -1,7 +1,35 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
#
|
1
|
+
# = TITLE:
|
2
|
+
#
|
3
|
+
# Boolean
|
4
|
+
#
|
5
|
+
# = DESCRIPTION:
|
6
|
+
#
|
7
|
+
# Stackable mixin provides #pop, #push, #pull, etc.
|
8
|
+
# It depends on #slice, #splice and #insert.
|
9
|
+
#
|
10
|
+
# = COPYRIGHT:
|
11
|
+
#
|
12
|
+
# Copyright (c) 2006 Thomas Sawyer
|
13
|
+
#
|
14
|
+
# Ruby License
|
15
|
+
#
|
16
|
+
# This module is free software. You may use, modify, and/or redistribute this
|
17
|
+
# software under the same terms as Ruby.
|
18
|
+
#
|
19
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
20
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
21
|
+
# FOR A PARTICULAR PURPOSE.
|
22
|
+
#
|
23
|
+
#
|
24
|
+
# = AUTHORS:
|
25
|
+
#
|
26
|
+
# - Thomas Sawyer
|
27
|
+
#
|
28
|
+
# = NOTES:
|
29
|
+
#
|
30
|
+
# - This was suggested by Ara T. Howard
|
4
31
|
|
32
|
+
#
|
5
33
|
class String
|
6
34
|
|
7
35
|
# Interpret common affirmative string meanings as true,
|
@@ -131,103 +159,3 @@ class NilClass
|
|
131
159
|
false
|
132
160
|
end
|
133
161
|
end
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
# _____ _
|
139
|
-
# |_ _|__ ___| |_
|
140
|
-
# | |/ _ \/ __| __|
|
141
|
-
# | | __/\__ \ |_
|
142
|
-
# |_|\___||___/\__|
|
143
|
-
#
|
144
|
-
=begin test
|
145
|
-
|
146
|
-
require 'test/unit'
|
147
|
-
|
148
|
-
|
149
|
-
class TestStringBoolean < Test::Unit::TestCase
|
150
|
-
|
151
|
-
def test_to_b
|
152
|
-
assert( 'true'.to_b )
|
153
|
-
assert( 'True'.to_b )
|
154
|
-
assert( 'yes'.to_b )
|
155
|
-
assert( 'YES'.to_b )
|
156
|
-
assert( 'on'.to_b )
|
157
|
-
assert( 'ON'.to_b )
|
158
|
-
assert( 't'.to_b )
|
159
|
-
assert( '1'.to_b )
|
160
|
-
assert( 'y'.to_b )
|
161
|
-
assert( 'Y'.to_b )
|
162
|
-
assert( '=='.to_b )
|
163
|
-
assert( ! 'nil'.to_b )
|
164
|
-
assert( ! 'false'.to_b )
|
165
|
-
assert( ! 'blahblahtrueblah'.to_b )
|
166
|
-
assert_equal( nil, 'nil'.to_b )
|
167
|
-
assert_equal( nil, 'null'.to_b )
|
168
|
-
end
|
169
|
-
|
170
|
-
end
|
171
|
-
|
172
|
-
|
173
|
-
class TestArrayBoolean < Test::Unit::TestCase
|
174
|
-
|
175
|
-
def test_to_b
|
176
|
-
a = []
|
177
|
-
assert_equal( false, a.to_b )
|
178
|
-
end
|
179
|
-
|
180
|
-
end
|
181
|
-
|
182
|
-
|
183
|
-
class TestNumericBoolean < Test::Unit::TestCase
|
184
|
-
|
185
|
-
def test_to_b
|
186
|
-
assert_equal( false, 0.to_b )
|
187
|
-
assert_equal( true, 1.to_b )
|
188
|
-
end
|
189
|
-
|
190
|
-
end
|
191
|
-
|
192
|
-
|
193
|
-
class TestKernelBoolean < Test::Unit::TestCase
|
194
|
-
|
195
|
-
def test_to_b
|
196
|
-
assert_equal( true, true.to_b )
|
197
|
-
assert_equal( false, false.to_b )
|
198
|
-
assert_equal( false, nil.to_b )
|
199
|
-
end
|
200
|
-
|
201
|
-
def test_false?
|
202
|
-
assert( false.false? )
|
203
|
-
assert( (1 == 2).false? )
|
204
|
-
assert( ! (1 == 1).false? )
|
205
|
-
end
|
206
|
-
|
207
|
-
def test_true?
|
208
|
-
assert( true.true? )
|
209
|
-
assert( (1 == 1).true? )
|
210
|
-
assert( ! (1 == 2).true? )
|
211
|
-
end
|
212
|
-
|
213
|
-
def test_bool?
|
214
|
-
assert_equal( true, true.bool? )
|
215
|
-
assert_equal( true, false.bool? )
|
216
|
-
assert_equal( false, nil.bool? )
|
217
|
-
assert_equal( false, 0.bool? )
|
218
|
-
end
|
219
|
-
|
220
|
-
end
|
221
|
-
|
222
|
-
|
223
|
-
class TestBoolean < Test::Unit::TestCase
|
224
|
-
|
225
|
-
def test_to_bool
|
226
|
-
assert_equal( true, true.to_bool )
|
227
|
-
assert_equal( false, false.to_bool )
|
228
|
-
assert_equal( false, nil.to_bool )
|
229
|
-
end
|
230
|
-
|
231
|
-
end
|
232
|
-
|
233
|
-
=end
|