facets 2.6.0 → 2.7.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/HISTORY.rdoc +331 -35
- data/MANIFEST +685 -826
- data/{doc/guide/notes.rd → NOTES} +0 -0
- data/README.rdoc +73 -25
- data/Rakefile +245 -2
- data/TODO +5 -0
- data/demo/hook.rd +47 -0
- data/demo/scenario_require.rd +9 -0
- data/doc/README.more +24 -6
- data/doc/manual/about.rb +47 -0
- data/doc/manual/annotations.rdoc +60 -0
- data/doc/manual/associations.rdoc +55 -0
- data/doc/manual/blockups.rdoc +101 -0
- data/doc/manual/capsule.rdoc +34 -0
- data/doc/manual/command.rdoc +177 -0
- data/doc/manual/core.rdoc +37 -0
- data/doc/manual/faq.rdoc +32 -0
- data/doc/manual/typecast.html +112 -0
- data/lib/core/facets.rb +359 -11
- data/lib/core/facets/array/combination.rb +3 -3
- data/lib/core/facets/array/index.rb +4 -1
- data/lib/core/facets/array/permutation.rb +2 -2
- data/lib/core/facets/array/product.rb +1 -1
- data/lib/core/facets/binding/eval.rb +1 -1
- data/lib/core/facets/denumerable.rb +76 -0
- data/lib/core/facets/duplicable.rb +34 -0
- data/lib/core/facets/enumerable/count.rb +10 -4
- data/lib/core/facets/enumerable/defer.rb +77 -0
- data/lib/core/facets/enumerable/each_by.rb +1 -1
- data/lib/core/facets/enumerable/every.rb +35 -0
- data/lib/{more/facets/elementwise.rb → core/facets/enumerable/ewise.rb} +0 -0
- data/lib/core/facets/enumerable/filter.rb +25 -0
- data/lib/core/facets/enumerable/group_by.rb +1 -1
- data/lib/core/facets/enumerable/none.rb +3 -2
- data/lib/core/facets/enumerable/one.rb +3 -2
- data/lib/core/facets/enumerable/per.rb +61 -0
- data/lib/core/facets/exception/raised.rb +14 -0
- data/lib/core/facets/integer/odd.rb +5 -1
- data/lib/core/facets/kernel/__dir__.rb +13 -3
- data/lib/core/facets/kernel/__here__.rb +14 -0
- data/lib/core/facets/kernel/__method__.rb +9 -3
- data/lib/core/facets/kernel/ask.rb +1 -0
- data/lib/core/facets/kernel/equate.rb +13 -0
- data/lib/core/facets/kernel/extension.rb +9 -0
- data/lib/core/facets/kernel/identical.rb +4 -0
- data/lib/core/facets/kernel/instance_exec.rb +2 -1
- data/lib/core/facets/kernel/method.rb +49 -0
- data/lib/core/facets/kernel/object_send.rb +2 -2
- data/lib/core/facets/kernel/{state.rb → object_state.rb} +23 -12
- data/lib/core/facets/kernel/require_all.rb +6 -1
- data/lib/core/facets/kernel/require_local.rb +8 -1
- data/lib/core/facets/kernel/require_relative.rb +52 -0
- data/lib/core/facets/kernel/source_location.rb +13 -0
- data/lib/core/facets/kernel/tap.rb +13 -6
- data/lib/core/facets/module/attr_setter.rb +57 -0
- data/lib/core/facets/module/instance_method.rb +24 -0
- data/lib/core/facets/module/module_load.rb +60 -44
- data/lib/core/facets/module/module_require.rb +1 -0
- data/lib/core/facets/nilclass/to_f.rb +1 -1
- data/lib/core/facets/objectspace/op_fetch.rb +3 -0
- data/lib/core/facets/proc/curry.rb +4 -3
- data/lib/core/facets/string/bytes.rb +10 -4
- data/lib/core/facets/string/camelcase.rb +6 -5
- data/lib/core/facets/string/chars.rb +5 -1
- data/lib/core/facets/string/each_char.rb +1 -1
- data/lib/core/facets/string/each_word.rb +1 -1
- data/lib/core/facets/string/lines.rb +11 -4
- data/lib/core/facets/string/start_with.rb +9 -2
- data/lib/core/facets/string/unfold.rb +27 -0
- data/lib/core/facets/symbol/succ.rb +3 -3
- data/lib/core/facets/symbol/thrown.rb +20 -0
- data/lib/core/facets/symbol/to_proc.rb +3 -2
- data/lib/core/facets/time/to_time.rb +1 -1
- data/lib/core/facets/to_hash.rb +41 -100
- data/lib/core/facets/unboundmethod/name.rb +20 -23
- data/lib/more/facets/ansicode.rb +1 -10
- data/lib/more/facets/autoarray.rb +3 -31
- data/lib/more/facets/basicobject.rb +73 -0
- data/lib/more/facets/blankslate.rb +2 -66
- data/lib/{lore → more}/facets/cgi.rb +0 -0
- data/lib/more/facets/class_extend.rb +1 -0
- data/lib/{lore → more}/facets/continuation.rb +0 -0
- data/lib/{lore → more}/facets/date.rb +3 -3
- data/lib/more/facets/enumargs.rb +192 -0
- data/lib/more/facets/enumerablepass.rb +2 -216
- data/lib/more/facets/enumerator.rb +62 -0
- data/lib/more/facets/{equatable.rb → equitable.rb} +11 -11
- data/lib/more/facets/expirable.rb +13 -41
- data/lib/{lore → more}/facets/fileutils.rb +0 -0
- data/lib/{lore → more}/facets/fileutils/head.rb +0 -0
- data/lib/{lore → more}/facets/fileutils/safe_ln.rb +0 -0
- data/lib/{lore → more}/facets/fileutils/slice.rb +0 -0
- data/lib/{lore → more}/facets/fileutils/tail.rb +0 -0
- data/lib/{lore → more}/facets/fileutils/wc.rb +0 -0
- data/lib/{lore → more}/facets/fileutils/whereis.rb +0 -0
- data/lib/{lore → more}/facets/fileutils/which.rb +0 -0
- data/lib/{lore → more}/facets/getoptlong.rb +0 -0
- data/lib/more/facets/hook.rb +2 -29
- data/lib/more/facets/inheritor.rb +2 -2
- data/lib/more/facets/instance_eval.rb +50 -0
- data/lib/more/facets/instance_function.rb +78 -0
- data/lib/more/facets/main.rb +20 -15
- data/lib/more/facets/memoize.rb +1 -113
- data/lib/more/facets/module/attr.rb +83 -0
- data/lib/more/facets/module/attr_tester.rb +44 -0
- data/lib/more/facets/module/attr_toggler.rb +59 -0
- data/lib/more/facets/module/attr_validator.rb +34 -0
- data/lib/more/facets/{class_extension.rb → module/class_extend.rb} +21 -13
- data/lib/more/facets/once.rb +59 -0
- data/lib/more/facets/openmodule.rb +1 -0
- data/lib/more/facets/orderedhash.rb +1 -33
- data/lib/{lore → more}/facets/ostruct.rb +0 -0
- data/lib/more/facets/ostructable.rb +1 -4
- data/lib/more/facets/partial.rb +18 -16
- data/lib/{lore → more}/facets/pathname.rb +0 -0
- data/lib/more/facets/preinitialize.rb +157 -0
- data/lib/{lore → more}/facets/rbconfig.rb +0 -0
- data/lib/more/facets/recorder.rb +1 -2
- data/lib/{lore → more}/facets/set.rb +0 -0
- data/lib/{lore → more}/facets/shellwords.rb +0 -0
- data/lib/{lore → more}/facets/uri.rb +0 -0
- data/lib/{lore → more}/facets/yaml.rb +0 -0
- data/lib/{lore → more}/facets/zlib.rb +0 -0
- data/meta/loadpath +0 -1
- data/meta/sitemap +4 -0
- data/meta/version +1 -1
- data/test/core/enumerable/test_count.rb +1 -1
- data/test/{more/test_filter.rb → core/enumerable/test_defer.rb} +24 -22
- data/test/{more/test_elementor.rb → core/enumerable/test_every.rb} +2 -15
- data/test/core/enumerable/test_ewise.rb +23 -0
- data/test/core/enumerable/test_per.rb +18 -0
- data/test/core/enumerable/test_take.rb +13 -0
- data/test/core/kernel/test_deepcopy.rb +1 -1
- data/test/{more/test_1stclassmethod.rb → core/kernel/test_method.rb} +2 -7
- data/test/core/kernel/test_tap.rb +1 -1
- data/test/core/proc/test_curry.rb +11 -0
- data/test/core/string/test_bytes.rb +1 -1
- data/test/core/string/test_camelcase.rb +23 -6
- data/test/core/string/test_lines.rb +1 -1
- data/test/core/string/test_unfold.rb +14 -0
- data/test/{more → core}/test_blank.rb +0 -0
- data/test/{more → core}/test_boolean.rb +0 -0
- data/test/{more → core}/test_functor.rb +0 -0
- data/test/{lore → more}/test_basicobject.rb +0 -0
- data/test/more/{test_class_extension.rb → test_class_extend.rb} +6 -6
- data/test/{lore → more}/test_continuation.rb +0 -0
- data/test/{lore → more}/test_date.rb +0 -0
- data/test/more/{test_enumerablepass.rb → test_enumargs.rb} +2 -4
- data/test/more/{test_equatable.rb → test_equitable.rb} +2 -2
- data/test/more/{test_instantise.rb → test_instance_function.rb} +3 -2
- data/test/more/test_memoize.rb +1 -1
- data/test/{lore → more}/test_ostruct.rb +0 -0
- metadata +865 -1016
- data/RELEASE +0 -38
- data/doc/README.lore +0 -51
- data/doc/log/basic_stats/index.html +0 -39
- data/doc/log/changelog.html +0 -648
- data/doc/log/changelog.txt +0 -217
- data/doc/log/stats/index.html +0 -39
- data/doc/log/testlog.txt +0 -278
- data/doc/notes/CHANGES +0 -2529
- data/doc/rdoc/lore/classes/Array.html +0 -176
- data/doc/rdoc/lore/classes/CGI.html +0 -191
- data/doc/rdoc/lore/classes/Config.html +0 -135
- data/doc/rdoc/lore/classes/Continuation.html +0 -113
- data/doc/rdoc/lore/classes/Date.html +0 -631
- data/doc/rdoc/lore/classes/DateTime.html +0 -583
- data/doc/rdoc/lore/classes/Enumerable.html +0 -89
- data/doc/rdoc/lore/classes/Enumerable/Enumerator.html +0 -147
- data/doc/rdoc/lore/classes/File.html +0 -128
- data/doc/rdoc/lore/classes/FileUtils.html +0 -434
- data/doc/rdoc/lore/classes/GetoptLong.html +0 -118
- data/doc/rdoc/lore/classes/GetoptLong/DSL.html +0 -208
- data/doc/rdoc/lore/classes/Kernel.html +0 -135
- data/doc/rdoc/lore/classes/Logger.html +0 -229
- data/doc/rdoc/lore/classes/Logger/Ansicolor.html +0 -277
- data/doc/rdoc/lore/classes/Logger/LogDevice.html +0 -121
- data/doc/rdoc/lore/classes/NilClass.html +0 -119
- data/doc/rdoc/lore/classes/OpenStruct.html +0 -432
- data/doc/rdoc/lore/classes/Pathname.html +0 -353
- data/doc/rdoc/lore/classes/Set.html +0 -117
- data/doc/rdoc/lore/classes/Shellwords.html +0 -111
- data/doc/rdoc/lore/classes/String.html +0 -140
- data/doc/rdoc/lore/classes/Time.html +0 -154
- data/doc/rdoc/lore/classes/URI.html +0 -454
- data/doc/rdoc/lore/classes/URI/Hash.html +0 -105
- data/doc/rdoc/lore/classes/URI/Kernel.html +0 -122
- data/doc/rdoc/lore/classes/Zlib.html +0 -188
- data/doc/rdoc/lore/created.rid +0 -1
- data/doc/rdoc/lore/files/README.html +0 -286
- data/doc/rdoc/lore/files/doc/README_lore.html +0 -155
- data/doc/rdoc/lore/files/lib/lore/facets/basicobject_rb.html +0 -118
- data/doc/rdoc/lore/files/lib/lore/facets/cgi_rb.html +0 -111
- data/doc/rdoc/lore/files/lib/lore/facets/continuation_rb.html +0 -147
- data/doc/rdoc/lore/files/lib/lore/facets/date_rb.html +0 -97
- data/doc/rdoc/lore/files/lib/lore/facets/enumerator_rb.html +0 -111
- data/doc/rdoc/lore/files/lib/lore/facets/fileutils/head_rb.html +0 -96
- data/doc/rdoc/lore/files/lib/lore/facets/fileutils/safe_ln_rb.html +0 -96
- data/doc/rdoc/lore/files/lib/lore/facets/fileutils/slice_rb.html +0 -96
- data/doc/rdoc/lore/files/lib/lore/facets/fileutils/tail_rb.html +0 -96
- data/doc/rdoc/lore/files/lib/lore/facets/fileutils/wc_rb.html +0 -96
- data/doc/rdoc/lore/files/lib/lore/facets/fileutils/whereis_rb.html +0 -96
- data/doc/rdoc/lore/files/lib/lore/facets/fileutils/which_rb.html +0 -96
- data/doc/rdoc/lore/files/lib/lore/facets/fileutils_rb.html +0 -131
- data/doc/rdoc/lore/files/lib/lore/facets/getoptlong_rb.html +0 -135
- data/doc/rdoc/lore/files/lib/lore/facets/logger_rb.html +0 -142
- data/doc/rdoc/lore/files/lib/lore/facets/ostruct_rb.html +0 -135
- data/doc/rdoc/lore/files/lib/lore/facets/pathname_rb.html +0 -145
- data/doc/rdoc/lore/files/lib/lore/facets/rbconfig_rb.html +0 -124
- data/doc/rdoc/lore/files/lib/lore/facets/set_rb.html +0 -96
- data/doc/rdoc/lore/files/lib/lore/facets/shellwords_rb.html +0 -124
- data/doc/rdoc/lore/files/lib/lore/facets/uri_rb.html +0 -125
- data/doc/rdoc/lore/files/lib/lore/facets/yaml_rb.html +0 -146
- data/doc/rdoc/lore/files/lib/lore/facets/zlib_rb.html +0 -97
- data/doc/rdoc/lore/fr_class_index.html +0 -73
- data/doc/rdoc/lore/fr_file_index.html +0 -71
- data/doc/rdoc/lore/fr_method_index.html +0 -177
- data/doc/rdoc/lore/index.html +0 -26
- data/doc/rdoc/lore/rdoc-style.css +0 -177
- data/doc/release-notes/RELEASE-2.0.5 +0 -8
- data/doc/release-notes/RELEASE-2.1.0 +0 -9
- data/doc/release-notes/RELEASE-2.1.1 +0 -5
- data/doc/release-notes/RELEASE-2.1.2 +0 -6
- data/doc/release-notes/RELEASE-2.1.3 +0 -5
- data/doc/release-notes/RELEASE-2.2.0 +0 -14
- data/doc/release-notes/RELEASE-2.2.1 +0 -4
- data/doc/release-notes/RELEASE-2.3.0 +0 -6
- data/doc/release-notes/RELEASE-2.4.0 +0 -70
- data/doc/release-notes/RELEASE-2.4.1 +0 -8
- data/doc/release-notes/RELEASE-2.4.2 +0 -4
- data/doc/release-notes/RELEASE-2.4.3 +0 -78
- data/doc/release-notes/RELEASE-2.4.4 +0 -38
- data/doc/release-notes/RELEASE-2.4.5 +0 -37
- data/doc/release-notes/RELEASE-2.5.0 +0 -83
- data/lib/core/facets/kernel/instance.rb +0 -19
- data/lib/lore/facets/basicobject.rb +0 -14
- data/lib/lore/facets/enumerator.rb +0 -67
- data/lib/lore/facets/logger.rb +0 -291
- data/lib/more/facets/1stclassmethod.rb +0 -140
- data/lib/more/facets/advisable.rb +0 -162
- data/lib/more/facets/association.rb +0 -210
- data/lib/more/facets/attr.rb +0 -209
- data/lib/more/facets/basex.rb +0 -37
- data/lib/more/facets/bbcode.rb +0 -397
- data/lib/more/facets/bicrypt.rb +0 -265
- data/lib/more/facets/binreadable.rb +0 -221
- data/lib/more/facets/censor.rb +0 -97
- data/lib/more/facets/classmethods.rb +0 -199
- data/lib/more/facets/consoleutils.rb +0 -99
- data/lib/more/facets/crypt.rb +0 -166
- data/lib/more/facets/dependency.rb +0 -151
- data/lib/more/facets/downloader.rb +0 -281
- data/lib/more/facets/duplicable.rb +0 -43
- data/lib/more/facets/elementor.rb +0 -133
- data/lib/more/facets/filter.rb +0 -121
- data/lib/more/facets/heap.rb +0 -22
- data/lib/more/facets/infinity.rb +0 -193
- data/lib/more/facets/ini.rb +0 -264
- data/lib/more/facets/instantise.rb +0 -1
- data/lib/more/facets/instantize.rb +0 -95
- data/lib/more/facets/interval.rb +0 -282
- data/lib/more/facets/iteration.rb +0 -65
- data/lib/more/facets/linkedlist.rb +0 -222
- data/lib/more/facets/lrucache.rb +0 -157
- data/lib/more/facets/matcher.rb +0 -140
- data/lib/more/facets/memoizer.rb +0 -74
- data/lib/more/facets/minitar.rb +0 -1063
- data/lib/more/facets/nackclass.rb +0 -41
- data/lib/more/facets/net/smtp_tls.rb +0 -131
- data/lib/more/facets/nilstatus.rb +0 -48
- data/lib/more/facets/overload.rb +0 -94
- data/lib/more/facets/paramix.rb +0 -202
- data/lib/more/facets/pool.rb +0 -91
- data/lib/more/facets/pqueue.rb +0 -449
- data/lib/more/facets/pry.rb +0 -32
- data/lib/more/facets/reflection.rb +0 -145
- data/lib/more/facets/semaphore.rb +0 -92
- data/lib/more/facets/settings.rb +0 -248
- data/lib/more/facets/snapshot.rb +0 -209
- data/lib/more/facets/sparse_array.rb +0 -809
- data/lib/more/facets/string/mask.rb +0 -278
- data/lib/more/facets/string/obfuscate.rb +0 -65
- data/lib/more/facets/string/stylize.rb +0 -169
- data/lib/more/facets/string/words.rb +0 -167
- data/lib/more/facets/syncarray.rb +0 -114
- data/lib/more/facets/synchash.rb +0 -157
- data/lib/more/facets/typecast.rb +0 -261
- data/lib/more/facets/uninheritable.rb +0 -50
- data/lib/more/facets/xmlhash.rb +0 -112
- data/lib/more/facets/xoxo.rb +0 -259
- data/lib/more/facets/ziputils.rb +0 -490
- data/task/conflicts +0 -63
- data/task/coverage.rake +0 -37
- data/task/methods +0 -49
- data/task/rdoc.rake +0 -17
- data/task/setup.rake +0 -38
- data/task/test.rake +0 -145
- data/test/more/test_advisable.rb +0 -71
- data/test/more/test_association.rb +0 -38
- data/test/more/test_bbcode.rb +0 -21
- data/test/more/test_binreadable.rb +0 -50
- data/test/more/test_buildable.rb +0 -73
- data/test/more/test_classmethods.rb +0 -56
- data/test/more/test_crypt.rb +0 -32
- data/test/more/test_dependency.rb +0 -69
- data/test/more/test_elementwise.rb +0 -25
- data/test/more/test_infinity.rb +0 -40
- data/test/more/test_interval.rb +0 -151
- data/test/more/test_linkedlist.rb +0 -41
- data/test/more/test_lrucache.rb +0 -14
- data/test/more/test_overload.rb +0 -160
- data/test/more/test_paramix.rb +0 -170
- data/test/more/test_prototype.rb +0 -35
- data/test/more/test_snapshot.rb +0 -21
- data/test/more/test_sparsearray.rb +0 -279
- data/test/more/test_syncarray.rb +0 -15
- data/test/more/test_synchash.rb +0 -16
- data/test/more/test_typecast.rb +0 -54
- data/test/more/test_uninheritable.rb +0 -31
- data/test/more/test_xoxo.rb +0 -274
- data/test/test_facets.rb +0 -9
@@ -1,217 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# This is a simple reimplementation of the core Enumerable module
|
4
|
-
# to allow the methods to take and pass-on arbitrary arguments to the
|
5
|
-
# underlying #each call. This library uses Enumerator and scans
|
6
|
-
# Enumerable so it can alwasy stay in sync.
|
7
|
-
#
|
8
|
-
# NOTE Any Enumerable method with a negative arity cannot do pass arguments
|
9
|
-
# due to ambiguity in the argument count. So the methods #inject and #zip
|
10
|
-
# do NOT work this way, but simply work as they do in Enumerable.
|
11
|
-
# The method #find (and #detect) though has been made to work by removing
|
12
|
-
# its rarely used optional parameter and providing instead an optional
|
13
|
-
# keyword parameter (:ifnone => ...). Please keep these difference in mind.
|
14
|
-
#
|
15
|
-
# class T
|
16
|
-
# include EnumerablePass
|
17
|
-
# def initialize(arr)
|
18
|
-
# @arr = arr
|
19
|
-
# end
|
20
|
-
# def each(n)
|
21
|
-
# arr.each{ |e| yield(e+n) }
|
22
|
-
# end
|
23
|
-
# end
|
24
|
-
#
|
25
|
-
# t = T.new([1,2,3])
|
26
|
-
# t.collect(4)
|
27
|
-
# #=> [5,6,7]
|
28
|
-
#
|
29
|
-
# == Authors
|
30
|
-
#
|
31
|
-
# * Thomas Sawyer
|
32
|
-
#
|
33
|
-
# == Copying
|
34
|
-
#
|
35
|
-
# Copyright (c) 2004 Thomas Sawyer
|
36
|
-
#
|
37
|
-
# Ruby License
|
38
|
-
#
|
39
|
-
# This module is free software. You may use, modify, and/or redistribute this
|
40
|
-
# software under the same terms as Ruby.
|
41
|
-
#
|
42
|
-
# This program is distributed in the hope that it will be useful, but WITHOUT
|
43
|
-
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
44
|
-
# FOR A PARTICULAR PURPOSE.
|
45
|
-
|
46
|
-
require 'enumerator'
|
47
|
-
|
48
|
-
# = EnumerablePass
|
49
|
-
#
|
50
|
-
# This is a simple reimplementation of the core Enumerable module
|
51
|
-
# to allow the methods to take and pass-on arbitrary arguments to the
|
52
|
-
# underlying #each call. This library uses Enumerator and scans
|
53
|
-
# Enumerable so it can alwasy stay in sync.
|
54
|
-
#
|
55
|
-
# NOTE Any Enumerable method with a negative arity cannot do pass arguments
|
56
|
-
# due to ambiguity in the argument count. So the methods #inject and #zip
|
57
|
-
# do NOT work this way, but simply work as they do in Enumerable.
|
58
|
-
# The method #find (and #detect) though has been made to work by removing
|
59
|
-
# its rarely used optional parameter and providing instead an optional
|
60
|
-
# keyword parameter (:ifnone => ...). Please keep these difference in mind.
|
61
|
-
#
|
62
|
-
# class T
|
63
|
-
# include EnumerablePass
|
64
|
-
# def initialize(arr)
|
65
|
-
# @arr = arr
|
66
|
-
# end
|
67
|
-
# def each(n)
|
68
|
-
# arr.each{ |e| yield(e+n) }
|
69
|
-
# end
|
70
|
-
# end
|
71
|
-
#
|
72
|
-
# t = T.new([1,2,3])
|
73
|
-
# t.collect(4)
|
74
|
-
# #=> [5,6,7]
|
75
|
-
#
|
76
|
-
module EnumerablePass
|
77
|
-
|
78
|
-
def self.wrap_enumerable_method( methodname )
|
79
|
-
|
80
|
-
m = methodname
|
81
|
-
meth = Enumerable.instance_method(m)
|
82
|
-
arity = meth.arity
|
83
|
-
|
84
|
-
case arity <=> 0
|
85
|
-
when 0
|
86
|
-
class_eval %{
|
87
|
-
def #{m}( *args, &yld )
|
88
|
-
enum_for(:each, *args).#{m}( &yld )
|
89
|
-
end
|
90
|
-
}
|
91
|
-
when 1
|
92
|
-
class_eval %{
|
93
|
-
def #{m}( *args, &yld )
|
94
|
-
args, each_args = args[0...#{arity}], args[#{arity}..-1]
|
95
|
-
enum_for(:each, *each_args).#{m}( *args, &yld )
|
96
|
-
end
|
97
|
-
}
|
98
|
-
else
|
99
|
-
class_eval %{
|
100
|
-
def #{m}( *args, &yld )
|
101
|
-
enum_for(:each).#{m}( *args, &yld )
|
102
|
-
end
|
103
|
-
}
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
Enumerable.instance_methods(false).each do |m|
|
108
|
-
wrap_enumerable_method( m )
|
109
|
-
end
|
110
|
-
|
111
|
-
# Make exception for #find (a negative arity method) to accept
|
112
|
-
# keyword argument.
|
113
|
-
#
|
114
|
-
# ObjectSpace.find(Class, :ifnone=>lambda{1}) { |e| ... }
|
115
|
-
# ObjectSpace.find(Class, :ifnone=>lambda{1}) { |e| ... }
|
116
|
-
#
|
117
|
-
def find(*args, &yld) # future use **keys ?
|
118
|
-
if Hash === args.last and args.last.key?(:ifnone)
|
119
|
-
ifnone = args.last.delete(:ifnone)
|
120
|
-
args.pop if args.last.empty?
|
121
|
-
enum_for(:each, *args).find( ifnone, &yld )
|
122
|
-
else
|
123
|
-
enum_for(:each, *args).find( &yld )
|
124
|
-
end
|
125
|
-
end
|
126
|
-
alias_method :detect, :find
|
127
|
-
|
128
|
-
end
|
129
|
-
|
130
|
-
|
131
|
-
=begin OLD CODE
|
132
|
-
module EnumerableArgs
|
133
|
-
|
134
|
-
def collect(*args) # :yield:
|
135
|
-
a = []
|
136
|
-
each(*args){ |n| a << yield(n) }
|
137
|
-
a
|
138
|
-
end
|
139
|
-
alias_method( :map, :collect )
|
140
|
-
|
141
|
-
def detect(*args) # :yield:
|
142
|
-
each(*args){ |n| return n if yield(n) }
|
143
|
-
nil
|
144
|
-
end
|
145
|
-
alias_method( :find, :detect )
|
146
|
-
|
147
|
-
def each_with_index(*args)
|
148
|
-
i=0
|
149
|
-
each(*args){ |*n| n << i; yield(*n); i+=1 }
|
150
|
-
self
|
151
|
-
end
|
152
|
-
|
153
|
-
def to_a(*args)
|
154
|
-
a = []
|
155
|
-
each(*args){ |n| a << n }
|
156
|
-
a
|
157
|
-
end
|
158
|
-
alias_method( :entries, :to_a )
|
159
|
-
|
160
|
-
# An additional method not part of standard Enumerable.
|
161
|
-
# The regular version of this method can be found in Facets,
|
162
|
-
# but it is a bit more advanced then this one.
|
163
|
-
# At some point they need to be put into sync.
|
164
|
-
def each_slice(*args, &yld)
|
165
|
-
a = []; s = []
|
166
|
-
ar = yld.arity.abs
|
167
|
-
each(*args){ |n|
|
168
|
-
s << n
|
169
|
-
if s.length >= ar
|
170
|
-
yld.call(*s)
|
171
|
-
s = []
|
172
|
-
end
|
173
|
-
}
|
174
|
-
a
|
175
|
-
end
|
176
|
-
alias_method( :each_by, :each_slice )
|
177
|
-
|
178
|
-
def select(*args) # :yield:
|
179
|
-
a = []
|
180
|
-
each(*args){ |n| a << n if yield(n) }
|
181
|
-
a
|
182
|
-
end
|
183
|
-
alias_method( :find_all, :select )
|
184
|
-
|
185
|
-
def grep(pattern, *args)
|
186
|
-
a = []
|
187
|
-
each(*args){ |n| a << (block_given? ? yield(n) : n) if pattern === n }
|
188
|
-
a
|
189
|
-
end
|
190
|
-
|
191
|
-
def include?(anObj, *args)
|
192
|
-
each(*args){ |n| return true if anObj == n }
|
193
|
-
false
|
194
|
-
end
|
195
|
-
alias_method( :member?, :include? )
|
196
|
-
|
197
|
-
def max(*args)
|
198
|
-
to_a(*args).max
|
199
|
-
end
|
200
|
-
|
201
|
-
def min(*args)
|
202
|
-
to_a(*args).min
|
203
|
-
end
|
204
|
-
|
205
|
-
def reject(*args)
|
206
|
-
a = []
|
207
|
-
each(*args){ |n| a << n if ! yield(n) }
|
208
|
-
a
|
209
|
-
end
|
210
|
-
|
211
|
-
def sort(*args)
|
212
|
-
# TODO
|
213
|
-
end
|
214
|
-
|
215
|
-
end
|
216
|
-
=end
|
1
|
+
warn "EnumerablePass is no longer supported. Please 'gem install enumargs' instead."
|
2
|
+
EnumerablePass = Enumerable::Arguments
|
217
3
|
|
@@ -0,0 +1,62 @@
|
|
1
|
+
begin
|
2
|
+
require 'enumerator' #if RUBY_VERSION < 1.9
|
3
|
+
# for Ruby 1.8 -> 1.9 transition
|
4
|
+
Enumerator = Enumerable::Enumerator unless defined? ::Enumerator
|
5
|
+
rescue LoadError # Ruby 1.9 already has it built-in.
|
6
|
+
end
|
7
|
+
|
8
|
+
class Enumerator
|
9
|
+
|
10
|
+
alias :old_initialize :initialize
|
11
|
+
|
12
|
+
# Provides the ruby-1.9 block form of Enumerator, where you can write:
|
13
|
+
#
|
14
|
+
# obj = Enumerator.new do |yielder|
|
15
|
+
# .. do stuff
|
16
|
+
# yielder.yield data # or: yielder << data
|
17
|
+
# .. etc
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# When obj.each is called, the block is run once. It should call
|
21
|
+
# yielder.yield with each item it wishes to generate.
|
22
|
+
#
|
23
|
+
# Example:
|
24
|
+
#
|
25
|
+
# fib = Enumerator.new { |y|
|
26
|
+
# a = b = 1
|
27
|
+
# loop {
|
28
|
+
# y << a
|
29
|
+
# a, b = b, a + b
|
30
|
+
# }
|
31
|
+
# }
|
32
|
+
#
|
33
|
+
# assert_equal [1, 1, 2, 3, 5, 8, 13, 21, 34, 55], fib.take(10)
|
34
|
+
|
35
|
+
def initialize(*args, &block)
|
36
|
+
if block_given?
|
37
|
+
@body = block
|
38
|
+
old_initialize(self, :_start)
|
39
|
+
else
|
40
|
+
old_initialize(*args)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def _start(*args,&receiver) #:nodoc:
|
45
|
+
@body.call(Yielder.new(receiver), *args)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Wrapper to allow yielder.yield(output) or yielder << output
|
49
|
+
# in the same way as ruby-1.9
|
50
|
+
|
51
|
+
class Yielder #:nodoc:
|
52
|
+
def initialize(proc)
|
53
|
+
@proc = proc
|
54
|
+
end
|
55
|
+
def yield(*args)
|
56
|
+
@proc[*args]
|
57
|
+
end
|
58
|
+
alias :<< :yield
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# =
|
1
|
+
# = Equitable
|
2
2
|
#
|
3
3
|
# This mixin provides methods of equality based
|
4
4
|
# on a single #identity method which must return
|
@@ -6,9 +6,9 @@
|
|
6
6
|
#
|
7
7
|
# It also provides a "shortcut" for creating the
|
8
8
|
# #identity method based on given accessors and returns
|
9
|
-
# the
|
9
|
+
# the Equitable module for inclusion.
|
10
10
|
#
|
11
|
-
# include
|
11
|
+
# include Equitable(:a, :b)
|
12
12
|
#
|
13
13
|
# is equivalent to including a module containing:
|
14
14
|
#
|
@@ -42,7 +42,7 @@
|
|
42
42
|
# FOR A PARTICULAR PURPOSE.
|
43
43
|
|
44
44
|
|
45
|
-
# =
|
45
|
+
# = Equitable
|
46
46
|
#
|
47
47
|
# This mixin provides methods of equality based
|
48
48
|
# on a single #identity method which must return
|
@@ -50,9 +50,9 @@
|
|
50
50
|
#
|
51
51
|
# It also provides a "shortcut" for creating the
|
52
52
|
# #identity method based on given accessors and returns
|
53
|
-
# the
|
53
|
+
# the Equitable module for inclusion.
|
54
54
|
#
|
55
|
-
# include
|
55
|
+
# include Equitable(:a, :b)
|
56
56
|
#
|
57
57
|
# is equivalent to including a module containing:
|
58
58
|
#
|
@@ -68,7 +68,7 @@
|
|
68
68
|
# self.a.hash ^ self.b.hash
|
69
69
|
# end
|
70
70
|
#
|
71
|
-
module
|
71
|
+
module Equitable
|
72
72
|
|
73
73
|
def self.identify(base, *accessors)
|
74
74
|
base.send(:define_method, :identity){ accessors }
|
@@ -93,9 +93,9 @@ class Module
|
|
93
93
|
|
94
94
|
# This function provided a "shortcut" for creating the
|
95
95
|
# #identity method based on given accessors and returns
|
96
|
-
# the
|
96
|
+
# the Equitable module for inclusion.
|
97
97
|
#
|
98
|
-
# include
|
98
|
+
# include Equitable(:a, :b)
|
99
99
|
#
|
100
100
|
# is equivalent to including a module containing:
|
101
101
|
#
|
@@ -112,8 +112,8 @@ class Module
|
|
112
112
|
# end
|
113
113
|
#
|
114
114
|
|
115
|
-
def
|
116
|
-
|
115
|
+
def Equitable(*accessors)
|
116
|
+
Equitable.identify(self, *accessors)
|
117
117
|
end
|
118
118
|
|
119
119
|
end
|
@@ -1,26 +1,21 @@
|
|
1
|
-
#
|
1
|
+
# Expirable
|
2
2
|
#
|
3
|
-
#
|
4
|
-
#
|
5
|
-
# == Authors
|
6
|
-
#
|
7
|
-
# * George Moschovitis
|
8
|
-
#
|
9
|
-
# == Copying
|
10
|
-
#
|
11
|
-
# Copyright (c) 2004 George Moschovitis
|
3
|
+
# Copyright (c) 2004 George Moschovitis
|
12
4
|
#
|
13
|
-
#
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
14
9
|
#
|
15
|
-
#
|
16
|
-
#
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU Lesser General Public License for more details.
|
17
14
|
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
16
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
|
21
18
|
|
22
|
-
# = Expirable
|
23
|
-
#
|
24
19
|
# Generic expirability mixin.
|
25
20
|
#
|
26
21
|
module Expirable
|
@@ -57,26 +52,3 @@ module Expirable
|
|
57
52
|
|
58
53
|
end
|
59
54
|
|
60
|
-
|
61
|
-
|
62
|
-
# _____ _
|
63
|
-
# |_ _|__ ___| |_
|
64
|
-
# | |/ _ \/ __| __|
|
65
|
-
# | | __/\__ \ |_
|
66
|
-
# |_|\___||___/\__|
|
67
|
-
#
|
68
|
-
|
69
|
-
# TODO
|
70
|
-
|
71
|
-
=begin #test
|
72
|
-
|
73
|
-
require 'test/unit'
|
74
|
-
|
75
|
-
class TC_Expirable < Test::Unit::TestCase
|
76
|
-
|
77
|
-
def test_01
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
81
|
-
|
82
|
-
=end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/more/facets/hook.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'facets/kernel/instance_exec'
|
1
2
|
|
2
3
|
# TODO: hooks should be an inheritor
|
3
4
|
#
|
@@ -24,7 +25,7 @@ module Hook
|
|
24
25
|
def #{name}(*args)
|
25
26
|
self.class.hooks[:#{name}].each do |blk|
|
26
27
|
if Proc === blk
|
27
|
-
|
28
|
+
instance_exec(:#{name}, *args, &blk)
|
28
29
|
else
|
29
30
|
__send__(blk, :#{name}, *args)
|
30
31
|
end
|
@@ -35,31 +36,3 @@ module Hook
|
|
35
36
|
|
36
37
|
end
|
37
38
|
|
38
|
-
|
39
|
-
#=begin demo
|
40
|
-
|
41
|
-
class X
|
42
|
-
include Hook
|
43
|
-
|
44
|
-
hook :signal
|
45
|
-
|
46
|
-
def boom(event, message)
|
47
|
-
puts "Kaboom!"
|
48
|
-
end
|
49
|
-
|
50
|
-
signal do |event, message|
|
51
|
-
puts "1", event, message
|
52
|
-
end
|
53
|
-
|
54
|
-
signal do |event, message|
|
55
|
-
puts "2", event, message
|
56
|
-
end
|
57
|
-
|
58
|
-
signal :boom
|
59
|
-
|
60
|
-
end
|
61
|
-
|
62
|
-
X.new.signal("hi")
|
63
|
-
|
64
|
-
#=end
|
65
|
-
|