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,133 +0,0 @@
|
|
1
|
-
# = Elementor
|
2
|
-
#
|
3
|
-
# Provides elementwise functionality.
|
4
|
-
#
|
5
|
-
# == Authors
|
6
|
-
#
|
7
|
-
# * Thomas Sawyer
|
8
|
-
# * George Moschovitis
|
9
|
-
# * Martin DeMello
|
10
|
-
#
|
11
|
-
# == Notes
|
12
|
-
#
|
13
|
-
# * This could have been impemented with a generic Functor, rather than
|
14
|
-
# the specialized Elementor, but for the fact Procs can not yet
|
15
|
-
# handle blocks.
|
16
|
-
# * There used to be a "Cascading Elementor", but that proved idiotic
|
17
|
-
# in the face of adding an instance_eval block to #every.
|
18
|
-
# * Any ideas for a better name for #accumulate? --gmosx
|
19
|
-
# * The use of every! and it's relation to Enumerator still seems a bit
|
20
|
-
# off beat. Should #every always use #map? And another method #each?
|
21
|
-
#
|
22
|
-
# == Copying
|
23
|
-
#
|
24
|
-
# Copyright (c) 2006 Thomas Sawyer
|
25
|
-
#
|
26
|
-
# Ruby License
|
27
|
-
#
|
28
|
-
# This module is free software. You may use, modify, and/or redistribute this
|
29
|
-
# software under the same terms as Ruby.
|
30
|
-
#
|
31
|
-
# This program is distributed in the hope that it will be useful, but WITHOUT
|
32
|
-
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
33
|
-
# FOR A PARTICULAR PURPOSE.
|
34
|
-
|
35
|
-
require 'enumerator'
|
36
|
-
require 'facets/functor'
|
37
|
-
|
38
|
-
module Enumerable
|
39
|
-
|
40
|
-
# Create Elementor.
|
41
|
-
|
42
|
-
def to_elem(meth=nil)
|
43
|
-
Elementor.new(self, meth || :map)
|
44
|
-
end
|
45
|
-
|
46
|
-
def per
|
47
|
-
@__per__ ||= Functor.new do |op|
|
48
|
-
Elementor.new(self, op)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
# Returns an elemental object. This allows
|
53
|
-
# you to map a method on to every element.
|
54
|
-
#
|
55
|
-
# r = [1,2,3].every + 3 #=> [4,5,6]
|
56
|
-
|
57
|
-
def every
|
58
|
-
@_every ||= to_elem
|
59
|
-
end
|
60
|
-
|
61
|
-
# In place version of #every.
|
62
|
-
|
63
|
-
def every!
|
64
|
-
raise NoMethodError unless respond_to?(:map!)
|
65
|
-
@_every_inplace ||= to_elem(:map!)
|
66
|
-
end
|
67
|
-
|
68
|
-
#def every
|
69
|
-
# @_every ||= Functor.new do |op,*args|
|
70
|
-
# map{ |a| a.send(op,*args) }
|
71
|
-
# end
|
72
|
-
#end
|
73
|
-
|
74
|
-
#def every!
|
75
|
-
# raise NoMethodError unless respond_to?(:map!)
|
76
|
-
# @_every_inplace ||= Functor.new do |op,*args|
|
77
|
-
# map!{ |a| a.send(op,*args) }
|
78
|
-
# end
|
79
|
-
#end
|
80
|
-
|
81
|
-
# Possible name change for every.
|
82
|
-
#
|
83
|
-
# r = [1,2,3].elements + 3 #=> [4,5,6]
|
84
|
-
#
|
85
|
-
# Certainly reads better.
|
86
|
-
|
87
|
-
alias_method :elements, :every
|
88
|
-
alias_method :elements!, :every!
|
89
|
-
|
90
|
-
end
|
91
|
-
|
92
|
-
|
93
|
-
# = Elementor
|
94
|
-
#
|
95
|
-
# Elementor is a type of Functor. Operations
|
96
|
-
# applied to it are routed to each element.
|
97
|
-
|
98
|
-
class Enumerable::Elementor
|
99
|
-
private(*instance_methods.select{|x| x !~ /^__/ })
|
100
|
-
|
101
|
-
def initialize(elem_object, elem_method=nil)
|
102
|
-
@elem_object = elem_object
|
103
|
-
@elem_method = elem_method || :map
|
104
|
-
end
|
105
|
-
|
106
|
-
def instance_delegate
|
107
|
-
@elem_object
|
108
|
-
end
|
109
|
-
|
110
|
-
def instance_operator
|
111
|
-
@elem_method
|
112
|
-
end
|
113
|
-
|
114
|
-
def method_missing(sym,*args,&blk)
|
115
|
-
@elem_object.__send__(@elem_method){ |x| x.__send__(sym,*args,&blk) }
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
|
120
|
-
class Enumerable::Enumerator
|
121
|
-
|
122
|
-
# Create Elementor.
|
123
|
-
|
124
|
-
def to_elem(meth=nil)
|
125
|
-
Elementor.new(self, meth || :each)
|
126
|
-
end
|
127
|
-
|
128
|
-
# Enumerator doesn't support inplace element operations, per se.
|
129
|
-
|
130
|
-
undef_method :every!
|
131
|
-
undef_method :elements!
|
132
|
-
end
|
133
|
-
|
data/lib/more/facets/filter.rb
DELETED
@@ -1,121 +0,0 @@
|
|
1
|
-
require 'facets/enumerable/take'
|
2
|
-
require 'facets/enumerator'
|
3
|
-
|
4
|
-
module Enumerable
|
5
|
-
|
6
|
-
# Without a block: wrap the Enumerable object in such a way that map,
|
7
|
-
# select and similar operations are performed "horizontally" across a
|
8
|
-
# series of blocks, instead of building an array of results at each step.
|
9
|
-
# This reduces memory usage, allows partial results to be provided
|
10
|
-
# early, and permits working with infinite series.
|
11
|
-
#
|
12
|
-
# (1..1_000_000_000).filter.select{ |i| i % 2 == 0 }.
|
13
|
-
# map{ |i| i + 100 }.
|
14
|
-
# take(10).to_a
|
15
|
-
#
|
16
|
-
# With a block: the block acts as an arbitrary filter on the data. Unlike
|
17
|
-
# map, it can choose to drop elements from the result, and/or add
|
18
|
-
# additional ones. The first object passed to the block is the receiver
|
19
|
-
# of the output.
|
20
|
-
#
|
21
|
-
# (1..1_000_000_000).
|
22
|
-
# filter { |out,i| out << i if i % 2 == 0 }. # like select
|
23
|
-
# filter { |out,i| out << i + 100 }. # like map
|
24
|
-
# take(10).each { |i| puts i }
|
25
|
-
#
|
26
|
-
# Use a method like to_a or to_h at the end of the chain if you want an
|
27
|
-
# Array or Hash built with the results, or each { ... } if you just want
|
28
|
-
# to output each result and discard it.
|
29
|
-
#
|
30
|
-
def filter(&blk)
|
31
|
-
if block_given?
|
32
|
-
Enumerator::Filter.new do |output|
|
33
|
-
each do |*input|
|
34
|
-
yield output, *input
|
35
|
-
end
|
36
|
-
end
|
37
|
-
else
|
38
|
-
Enumerator::Filter.new do |output|
|
39
|
-
each do |*input|
|
40
|
-
output.yield *input
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
# = Filterable
|
47
|
-
#
|
48
|
-
# Classes which include Enumerable::Filterable will get versions
|
49
|
-
# of map, select etc. which return a Filter, so that they work
|
50
|
-
# horizontally without creating intermediate arrays.
|
51
|
-
#
|
52
|
-
module Filterable
|
53
|
-
def map
|
54
|
-
Enumerator::Filter.new do |output|
|
55
|
-
each do |*input|
|
56
|
-
output.yield yield(*input)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
alias :collect :map
|
61
|
-
|
62
|
-
def select
|
63
|
-
Enumerator::Filter.new do |output|
|
64
|
-
each do |*input|
|
65
|
-
output.yield(*input) if yield(*input)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
alias :find_all :select
|
70
|
-
|
71
|
-
def reject
|
72
|
-
Enumerator::Filter.new do |output|
|
73
|
-
each do |*input|
|
74
|
-
output.yield(*input) unless yield(*input)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
# Limit to the first n items in the list
|
80
|
-
|
81
|
-
def take(n)
|
82
|
-
Enumerator::Filter.new do |output|
|
83
|
-
count = 0
|
84
|
-
each do |*input|
|
85
|
-
break if count >= n
|
86
|
-
output.yield(*input)
|
87
|
-
count += 1
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
# Skip the first n items in the list
|
93
|
-
|
94
|
-
def skip(n)
|
95
|
-
Enumerator::Filter.new do |output|
|
96
|
-
count = 0
|
97
|
-
each do |*input|
|
98
|
-
output.yield(*input) if count >= n
|
99
|
-
count += 1
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
# TODO: add more methods, e.g. grep, take_while etc.
|
105
|
-
end
|
106
|
-
|
107
|
-
end # module Enumerable
|
108
|
-
|
109
|
-
|
110
|
-
class Enumerator
|
111
|
-
|
112
|
-
# = Enumerator::Filter
|
113
|
-
#
|
114
|
-
# A class like Enumerator, but which has 'lazy' versions of map, select etc.
|
115
|
-
#
|
116
|
-
class Filter < Enumerator
|
117
|
-
include Enumerable::Filterable
|
118
|
-
end
|
119
|
-
|
120
|
-
end
|
121
|
-
|
data/lib/more/facets/heap.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
# = Heap
|
2
|
-
#
|
3
|
-
# Another name for PQueue.
|
4
|
-
#
|
5
|
-
# == Copying
|
6
|
-
#
|
7
|
-
# Copyright (c) 2005 Thomas Sawyer, George Moschovitis
|
8
|
-
#
|
9
|
-
# Ruby License
|
10
|
-
#
|
11
|
-
# This module is free software. You may use, modify, and/or redistribute this
|
12
|
-
# software under the same terms as Ruby.
|
13
|
-
#
|
14
|
-
# This program is distributed in the hope that it will be useful, but WITHOUT
|
15
|
-
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
16
|
-
# FOR A PARTICULAR PURPOSE.
|
17
|
-
|
18
|
-
require 'facets/pqueue'
|
19
|
-
|
20
|
-
# Heap is PQueue.
|
21
|
-
Heap = PQueue
|
22
|
-
|
data/lib/more/facets/infinity.rb
DELETED
@@ -1,193 +0,0 @@
|
|
1
|
-
# = Infinity
|
2
|
-
#
|
3
|
-
# A full featured Infinity class, supporting signed direction.
|
4
|
-
# Inifinty is a multiton based on direction The constant INFINITY
|
5
|
-
# is provided as the common case with direction=+1 (positive).
|
6
|
-
#
|
7
|
-
# Besides being an class, these four constants are preset:
|
8
|
-
#
|
9
|
-
# NaN
|
10
|
-
# Inf
|
11
|
-
# PosInf
|
12
|
-
# NegInf
|
13
|
-
#
|
14
|
-
# These four constants a built from two other basic constants:
|
15
|
-
#
|
16
|
-
# UNDEFINED
|
17
|
-
# INFINITY
|
18
|
-
#
|
19
|
-
# In physical memory there are actually only three objects, namely
|
20
|
-
# three instances of InfinityClass, one for NaN, PosInf and NegInf,
|
21
|
-
# respectively.
|
22
|
-
#
|
23
|
-
# == Copying
|
24
|
-
#
|
25
|
-
# Copyright (c) 2004 Thomas Sawyer
|
26
|
-
#
|
27
|
-
# Ruby License
|
28
|
-
#
|
29
|
-
# This module is free software. You may use, modify, and/or redistribute this
|
30
|
-
# software under the same terms as Ruby.
|
31
|
-
#
|
32
|
-
# This program is distributed in the hope that it will be useful, but WITHOUT
|
33
|
-
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
34
|
-
# FOR A PARTICULAR PURPOSE.
|
35
|
-
#
|
36
|
-
# == Authors
|
37
|
-
#
|
38
|
-
# * Thomas Sawyer
|
39
|
-
#
|
40
|
-
# == Todo
|
41
|
-
#
|
42
|
-
# * Could @direction values greater than 1 support Aleph?
|
43
|
-
|
44
|
-
require 'facets/multiton'
|
45
|
-
|
46
|
-
# = Infinity
|
47
|
-
#
|
48
|
-
# A full featured Infinity class, supporting signed direction.
|
49
|
-
# Inifinty is a multiton based on direction The constant INFINITY
|
50
|
-
# is provided as the common case with direction=+1 (positive).
|
51
|
-
#
|
52
|
-
# Besides being an class, these four constants are preset:
|
53
|
-
#
|
54
|
-
# NaN
|
55
|
-
# Inf
|
56
|
-
# PosInf
|
57
|
-
# NegInf
|
58
|
-
#
|
59
|
-
# These four constants a built from two other basic constants:
|
60
|
-
#
|
61
|
-
# UNDEFINED
|
62
|
-
# INFINITY
|
63
|
-
#
|
64
|
-
# In physical memory there are actually only three objects, namely
|
65
|
-
# three instances of InfinityClass, one for NaN, PosInf and NegInf,
|
66
|
-
# respectively.
|
67
|
-
#
|
68
|
-
class InfinityClass < Numeric
|
69
|
-
include Multiton
|
70
|
-
|
71
|
-
attr_reader :direction
|
72
|
-
|
73
|
-
def initialize(direction=1)
|
74
|
-
@direction = (direction <=> 0)
|
75
|
-
super()
|
76
|
-
end
|
77
|
-
|
78
|
-
# Change direction of infinity.
|
79
|
-
|
80
|
-
def -@
|
81
|
-
case @direction
|
82
|
-
when 0 : self.class.instance(0)
|
83
|
-
when 1 : self.class.instance(-1)
|
84
|
-
when -1 : self.class.instance(1)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
# Noop.
|
89
|
-
|
90
|
-
def +@
|
91
|
-
self
|
92
|
-
end
|
93
|
-
|
94
|
-
# Convert to the float version of infinity.
|
95
|
-
|
96
|
-
def to_f
|
97
|
-
(1.0/0) * @direction
|
98
|
-
end
|
99
|
-
|
100
|
-
# Gee, a real infinite loop!
|
101
|
-
|
102
|
-
def times
|
103
|
-
loop do yield end
|
104
|
-
end
|
105
|
-
|
106
|
-
# Coerce allows other numbers to be
|
107
|
-
# compared to infinity.
|
108
|
-
|
109
|
-
def coerce(other)
|
110
|
-
case other
|
111
|
-
when InfinityClass
|
112
|
-
super
|
113
|
-
else
|
114
|
-
return -self, other
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
# Equality. Note that NaN != NaN.
|
119
|
-
|
120
|
-
def ==(other)
|
121
|
-
case other
|
122
|
-
when InfinityClass
|
123
|
-
if @direction == 0 and other.direction == 0
|
124
|
-
false
|
125
|
-
else
|
126
|
-
super
|
127
|
-
end
|
128
|
-
else
|
129
|
-
false
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
# Comparision where infinity is alway greatest
|
134
|
-
# and negative infinityalways least.
|
135
|
-
|
136
|
-
def <=>(other)
|
137
|
-
case other
|
138
|
-
when InfinityClass
|
139
|
-
@direction <=> other.direction
|
140
|
-
else
|
141
|
-
@direction
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
#
|
146
|
-
|
147
|
-
def to_s
|
148
|
-
case @direction
|
149
|
-
when 0 : "NaN"
|
150
|
-
when 1 : "PosInf"
|
151
|
-
when -1 : "NegInf"
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
end
|
156
|
-
|
157
|
-
#
|
158
|
-
|
159
|
-
class Numeric
|
160
|
-
|
161
|
-
def finite?
|
162
|
-
not InfinityClass === self
|
163
|
-
end
|
164
|
-
|
165
|
-
def infinite?
|
166
|
-
return false if NaN == self
|
167
|
-
InfinityClass === self
|
168
|
-
end
|
169
|
-
alias :inf? :infinite?
|
170
|
-
|
171
|
-
def nan?
|
172
|
-
NaN == self
|
173
|
-
end
|
174
|
-
|
175
|
-
def posinf?
|
176
|
-
PosInf == self
|
177
|
-
end
|
178
|
-
|
179
|
-
def neginf?
|
180
|
-
NegInf == self
|
181
|
-
end
|
182
|
-
|
183
|
-
end
|
184
|
-
|
185
|
-
# Set constant to positive infinity.
|
186
|
-
UNDEFINED = InfinityClass.new(0)
|
187
|
-
INFINITY = InfinityClass.new(1)
|
188
|
-
|
189
|
-
NaN = UNDEFINED
|
190
|
-
Inf = INFINITY
|
191
|
-
PosInf = +INFINITY
|
192
|
-
NegInf = -INFINITY
|
193
|
-
|