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,27 +1,24 @@
|
|
1
|
-
|
1
|
+
class UnboundMethod
|
2
2
|
|
3
|
-
|
3
|
+
# Return the name of the method.
|
4
|
+
#
|
5
|
+
# Be aware that in ruby 1.9 UnboundMethod#name is defined already,
|
6
|
+
# but it returns a Symbol not a String.
|
7
|
+
#
|
8
|
+
# class X
|
9
|
+
# def foo; end
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# meth = X.instance_method(:foo)
|
13
|
+
#
|
14
|
+
# meth.name #=> "foo"
|
15
|
+
#
|
16
|
+
# CREDIT: Trans
|
4
17
|
|
5
|
-
|
6
|
-
#
|
7
|
-
|
8
|
-
|
9
|
-
#
|
10
|
-
# class X
|
11
|
-
# def foo; end
|
12
|
-
# end
|
13
|
-
#
|
14
|
-
# meth = X.instance_method(:foo)
|
15
|
-
#
|
16
|
-
# meth.name #=> "foo"
|
17
|
-
#
|
18
|
-
# CREDIT: Trans
|
19
|
-
|
20
|
-
def name
|
21
|
-
i = to_s.rindex('#')
|
22
|
-
to_s.slice(i+1...-1)
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
18
|
+
def name
|
19
|
+
i = to_s.rindex('#')
|
20
|
+
to_s.slice(i+1...-1)
|
21
|
+
end unless method_defined?(:name) # 1.8.7+
|
26
22
|
|
27
23
|
end
|
24
|
+
|
data/lib/more/facets/ansicode.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# = ANSICode
|
2
2
|
#
|
3
3
|
# Module which makes it very easy to use ANSI codes.
|
4
|
-
# These are
|
4
|
+
# These are especially nice for beautifying shell output.
|
5
5
|
#
|
6
6
|
# include ANSICode
|
7
7
|
#
|
@@ -78,15 +78,6 @@
|
|
78
78
|
# == Copying
|
79
79
|
#
|
80
80
|
# Copyright (c) 2004 Florian Frank, Thomas Sawyer
|
81
|
-
#
|
82
|
-
# Ruby License
|
83
|
-
#
|
84
|
-
# This module is free software. You may use, modify, and/or redistribute this
|
85
|
-
# software under the same terms as Ruby.
|
86
|
-
#
|
87
|
-
# This program is distributed in the hope that it will be useful, but WITHOUT
|
88
|
-
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
89
|
-
# FOR A PARTICULAR PURPOSE.
|
90
81
|
|
91
82
|
|
92
83
|
# = ANSICode
|
@@ -1,34 +1,6 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
# An Array that automatically expands dimensions as needed.
|
4
|
-
#
|
5
|
-
# a = Autoarray.new
|
6
|
-
# a[1][2][3] = 12
|
7
|
-
# a #=> [nil, [nil, nil, [nil, nil, nil, 12]]]
|
8
|
-
# a[2][3][4] #=> []
|
9
|
-
# a #=> [nil, [nil, nil, [nil, nil, nil, 12]]]
|
10
|
-
# a[1][-2][1] = "Negative"
|
11
|
-
# a #=> [nil, [nil, [nil, "Negative"], [nil, nil, nil, 12]]]
|
12
|
-
#
|
13
|
-
# == Authors
|
14
|
-
#
|
15
|
-
# * Brian Schröder
|
16
|
-
#
|
17
|
-
# == License
|
18
|
-
#
|
19
|
-
# Copyright (c) 2005 Brian Schröder
|
20
|
-
#
|
21
|
-
# Ruby License
|
22
|
-
#
|
23
|
-
# This module is free software. You may use, modify, and/or redistribute this
|
24
|
-
# software under the same terms as Ruby.
|
25
|
-
#
|
26
|
-
# This program is distributed in the hope that it will be useful, but WITHOUT
|
27
|
-
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
28
|
-
# FOR A PARTICULAR PURPOSE.
|
1
|
+
# AutoArray
|
2
|
+
# Copyright (c) 2005 Brian Schröder
|
29
3
|
|
30
|
-
# = AutoArray
|
31
|
-
#
|
32
4
|
# An Array that automatically expands dimensions as needed.
|
33
5
|
#
|
34
6
|
# a = Autoarray.new
|
@@ -39,7 +11,7 @@
|
|
39
11
|
# a[1][-2][1] = "Negative"
|
40
12
|
# a #=> [nil, [nil, [nil, "Negative"], [nil, nil, nil, 12]]]
|
41
13
|
#
|
42
|
-
class
|
14
|
+
class AutoArray < Array
|
43
15
|
|
44
16
|
def initialize(size=0, default=nil, update = nil, update_index = nil)
|
45
17
|
super(size, default)
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# Facets' BasicObject is an implementation of Jim Weirich's BlankSlate.
|
2
|
+
#
|
3
|
+
# BlankSlate
|
4
|
+
# Copyright 2004 by Jim Weirich (jim@weirichhouse.org).
|
5
|
+
# All rights reserved.
|
6
|
+
#
|
7
|
+
# Since Ruby 1.9 has a BasicObject class this will of course be
|
8
|
+
# deprecated as 1.9 goes mainstream.
|
9
|
+
|
10
|
+
unless defined? BasicObject # just in case it already exists!
|
11
|
+
|
12
|
+
# BasicObject provides an abstract base class with no predefined
|
13
|
+
# methods (except for <tt>\_\_send__</tt> and <tt>\_\_id__</tt>).
|
14
|
+
# BlankSlate is useful as a base class when writing classes that
|
15
|
+
# depend upon <tt>method_missing</tt> (e.g. dynamic proxies).
|
16
|
+
class BasicObject
|
17
|
+
class << self
|
18
|
+
|
19
|
+
# Hide the method named +name+ in the BlankSlate class. Don't
|
20
|
+
# hide +instance_eval+ or any method beginning with "__".
|
21
|
+
def hide(name)
|
22
|
+
undef_method name if
|
23
|
+
instance_methods.include?(name.to_s) and
|
24
|
+
name !~ /^(__|instance_eval)/
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
instance_methods.each { |m| hide(m) }
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
# Since Ruby is very dynamic, methods added to the ancestors of
|
33
|
+
# BlankSlate <em>after BlankSlate is defined</em> will show up in the
|
34
|
+
# list of available BlankSlate methods. We handle this by defining a
|
35
|
+
# hook in the Object and Kernel classes that will hide any defined
|
36
|
+
module Kernel #:nodoc:
|
37
|
+
class << self
|
38
|
+
alias_method :blank_slate_method_added, :method_added
|
39
|
+
|
40
|
+
# Detect method additions to Kernel and remove them in the
|
41
|
+
# BlankSlate class.
|
42
|
+
def method_added(name)
|
43
|
+
blank_slate_method_added(name)
|
44
|
+
return if self != Kernel
|
45
|
+
BlankSlate.hide(name)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
class Object #:nodoc:
|
51
|
+
class << self
|
52
|
+
alias_method :blank_slate_method_added, :method_added
|
53
|
+
|
54
|
+
# Detect method additions to Object and remove them in the
|
55
|
+
# BlankSlate class.
|
56
|
+
def method_added(name)
|
57
|
+
blank_slate_method_added(name)
|
58
|
+
return if self != Object
|
59
|
+
BlankSlate.hide(name)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
unless defined? BlankSlate
|
67
|
+
|
68
|
+
# ActiveSupport compatiable version of BasicObject
|
69
|
+
# if not Ruby 1.9+ uses Jim Weirich's BlankSlate.
|
70
|
+
BlankSlate = BasicObject
|
71
|
+
|
72
|
+
end
|
73
|
+
|
@@ -1,66 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# Copyright 2004 by Jim Weirich (jim@weirichhouse.org).
|
4
|
-
# All rights reserved.
|
5
|
-
|
6
|
-
# Permission is granted for use, copying, modification, distribution,
|
7
|
-
# and distribution of modified versions of this work as long as the
|
8
|
-
# above copyright notice is included.
|
9
|
-
#++
|
10
|
-
|
11
|
-
unless defined? BlankSlate
|
12
|
-
|
13
|
-
# BlankSlate provides an abstract base class with no predefined
|
14
|
-
# methods (except for <tt>\_\_send__</tt> and <tt>\_\_id__</tt>).
|
15
|
-
# BlankSlate is useful as a base class when writing classes that
|
16
|
-
# depend upon <tt>method_missing</tt> (e.g. dynamic proxies).
|
17
|
-
class BlankSlate
|
18
|
-
class << self
|
19
|
-
|
20
|
-
# Hide the method named +name+ in the BlankSlate class. Don't
|
21
|
-
# hide +instance_eval+ or any method beginning with "__".
|
22
|
-
def hide(name)
|
23
|
-
undef_method name if
|
24
|
-
instance_methods.include?(name.to_s) and
|
25
|
-
name !~ /^(__|instance_eval)/
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
instance_methods.each { |m| hide(m) }
|
30
|
-
end
|
31
|
-
|
32
|
-
|
33
|
-
# Since Ruby is very dynamic, methods added to the ancestors of
|
34
|
-
# BlankSlate <em>after BlankSlate is defined</em> will show up in the
|
35
|
-
# list of available BlankSlate methods. We handle this by defining a
|
36
|
-
# hook in the Object and Kernel classes that will hide any defined
|
37
|
-
module Kernel #:nodoc:
|
38
|
-
class << self
|
39
|
-
alias_method :blank_slate_method_added, :method_added
|
40
|
-
|
41
|
-
# Detect method additions to Kernel and remove them in the
|
42
|
-
# BlankSlate class.
|
43
|
-
def method_added(name)
|
44
|
-
blank_slate_method_added(name)
|
45
|
-
return if self != Kernel
|
46
|
-
BlankSlate.hide(name)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
class Object #:nodoc:
|
52
|
-
class << self
|
53
|
-
alias_method :blank_slate_method_added, :method_added
|
54
|
-
|
55
|
-
# Detect method additions to Object and remove them in the
|
56
|
-
# BlankSlate class.
|
57
|
-
def method_added(name)
|
58
|
-
blank_slate_method_added(name)
|
59
|
-
return if self != Object
|
60
|
-
BlankSlate.hide(name)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|
66
|
-
|
1
|
+
warn "Use BasicObject instead of BlankSlate for future versions."
|
2
|
+
require 'facets/basicobject'
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'facets/module/class_extend'
|
File without changes
|
@@ -48,7 +48,7 @@ class Date
|
|
48
48
|
# on conversions. In this case, it simply returns +self+.
|
49
49
|
def to_date
|
50
50
|
self
|
51
|
-
end
|
51
|
+
end unless method_defined?(:to_date) # 1.9+ ?
|
52
52
|
|
53
53
|
# Converts a Date instance to a DateTime, where the time is set to the beginning of the day
|
54
54
|
# and UTC offset is set to 0.
|
@@ -59,7 +59,7 @@ class Date
|
|
59
59
|
# date.to_datetime # => Sat, 10 Nov 2007 00:00:00 0000
|
60
60
|
def to_datetime
|
61
61
|
::DateTime.civil(year, month, day, 0, 0, 0, 0)
|
62
|
-
end
|
62
|
+
end unless method_defined?(:to_datetime) # 1.9+ ?
|
63
63
|
|
64
64
|
# Converts a Date instance to a Time, where the time is set to the beginning of the day.
|
65
65
|
# The timezone can be either :local or :utc (default :local).
|
@@ -327,7 +327,7 @@ class DateTime
|
|
327
327
|
# Converts datetime to an appropriate format for use in XML
|
328
328
|
def xmlschema
|
329
329
|
strftime("%Y-%m-%dT%H:%M:%S%Z")
|
330
|
-
end
|
330
|
+
end unless method_defined?(:xmlschema) # 1.9+ ?
|
331
331
|
|
332
332
|
# Converts self to a floating-point number of seconds since the Unix epoch
|
333
333
|
def to_f
|
@@ -0,0 +1,192 @@
|
|
1
|
+
# Enumerable::Arguments
|
2
|
+
#
|
3
|
+
# Copyright (c) 2004 Thomas Sawyer
|
4
|
+
#
|
5
|
+
# LGPL(3) License
|
6
|
+
#
|
7
|
+
# This module is free software. You may use, modify, and/or redistribute this
|
8
|
+
# software under the same terms as Ruby.
|
9
|
+
#
|
10
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
11
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
12
|
+
# FOR A PARTICULAR PURPOSE.
|
13
|
+
|
14
|
+
require 'facets/enumerator'
|
15
|
+
|
16
|
+
# This is a simple reimplementation of the core Enumerable module
|
17
|
+
# to allow the methods to take and pass-on arbitrary arguments to the
|
18
|
+
# underlying #each call. This library uses Enumerator and scans
|
19
|
+
# Enumerable so it can alwasy stay in sync.
|
20
|
+
#
|
21
|
+
# NOTE Any Enumerable method with a negative arity cannot do pass arguments
|
22
|
+
# due to ambiguity in the argument count. So the methods #inject and #zip
|
23
|
+
# do NOT work this way, but simply work as they do in Enumerable.
|
24
|
+
# The method #find (and #detect) though has been made to work by removing
|
25
|
+
# its rarely used optional parameter and providing instead an optional
|
26
|
+
# keyword parameter (:ifnone => ...). Please keep these difference in mind.
|
27
|
+
#
|
28
|
+
# require 'enumargs'
|
29
|
+
#
|
30
|
+
# class T
|
31
|
+
# include Enumerable::Arguments
|
32
|
+
# def initialize(arr)
|
33
|
+
# @arr = arr
|
34
|
+
# end
|
35
|
+
# def each(n)
|
36
|
+
# arr.each{ |e| yield(e+n) }
|
37
|
+
# end
|
38
|
+
# end
|
39
|
+
#
|
40
|
+
# t = T.new([1,2,3])
|
41
|
+
# t.collect(4)
|
42
|
+
# #=> [5,6,7]
|
43
|
+
#
|
44
|
+
module Enumerable
|
45
|
+
module Arguments
|
46
|
+
|
47
|
+
def self.wrap_enumerable_method( methodname )
|
48
|
+
|
49
|
+
m = methodname
|
50
|
+
meth = Enumerable.instance_method(m)
|
51
|
+
arity = meth.arity
|
52
|
+
|
53
|
+
case arity <=> 0
|
54
|
+
when 0
|
55
|
+
class_eval %{
|
56
|
+
def #{m}( *args, &yld )
|
57
|
+
enum_for(:each, *args).#{m}( &yld )
|
58
|
+
end
|
59
|
+
}
|
60
|
+
when 1
|
61
|
+
class_eval %{
|
62
|
+
def #{m}( *args, &yld )
|
63
|
+
args, each_args = args[0...#{arity}], args[#{arity}..-1]
|
64
|
+
enum_for(:each, *each_args).#{m}( *args, &yld )
|
65
|
+
end
|
66
|
+
}
|
67
|
+
else
|
68
|
+
class_eval %{
|
69
|
+
def #{m}( *args, &yld )
|
70
|
+
enum_for(:each).#{m}( *args, &yld )
|
71
|
+
end
|
72
|
+
}
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
Enumerable.instance_methods(false).each do |m|
|
77
|
+
wrap_enumerable_method( m )
|
78
|
+
end
|
79
|
+
|
80
|
+
#
|
81
|
+
def to_a(*args)
|
82
|
+
map(*args){ |x| x }
|
83
|
+
end
|
84
|
+
|
85
|
+
# Make exception for #find (a negative arity method) to accept
|
86
|
+
# keyword argument.
|
87
|
+
#
|
88
|
+
# ObjectSpace.find(Class, :ifnone=>lambda{1}) { |e| ... }
|
89
|
+
# ObjectSpace.find(Class, :ifnone=>lambda{1}) { |e| ... }
|
90
|
+
#
|
91
|
+
def find(*args, &yld) # future use **keys ?
|
92
|
+
if Hash === args.last and args.last.key?(:ifnone)
|
93
|
+
ifnone = args.last.delete(:ifnone)
|
94
|
+
args.pop if args.last.empty?
|
95
|
+
enum_for(:each, *args).find( ifnone, &yld )
|
96
|
+
else
|
97
|
+
enum_for(:each, *args).find( &yld )
|
98
|
+
end
|
99
|
+
end
|
100
|
+
alias_method :detect, :find
|
101
|
+
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
|
106
|
+
=begin OLD CODE
|
107
|
+
module EnumerableArgs
|
108
|
+
|
109
|
+
def collect(*args) # :yield:
|
110
|
+
a = []
|
111
|
+
each(*args){ |n| a << yield(n) }
|
112
|
+
a
|
113
|
+
end
|
114
|
+
alias_method( :map, :collect )
|
115
|
+
|
116
|
+
def detect(*args) # :yield:
|
117
|
+
each(*args){ |n| return n if yield(n) }
|
118
|
+
nil
|
119
|
+
end
|
120
|
+
alias_method( :find, :detect )
|
121
|
+
|
122
|
+
def each_with_index(*args)
|
123
|
+
i=0
|
124
|
+
each(*args){ |*n| n << i; yield(*n); i+=1 }
|
125
|
+
self
|
126
|
+
end
|
127
|
+
|
128
|
+
def to_a(*args)
|
129
|
+
a = []
|
130
|
+
each(*args){ |n| a << n }
|
131
|
+
a
|
132
|
+
end
|
133
|
+
alias_method( :entries, :to_a )
|
134
|
+
|
135
|
+
# An additional method not part of standard Enumerable.
|
136
|
+
# The regular version of this method can be found in Facets,
|
137
|
+
# but it is a bit more advanced then this one.
|
138
|
+
# At some point they need to be put into sync.
|
139
|
+
def each_slice(*args, &yld)
|
140
|
+
a = []; s = []
|
141
|
+
ar = yld.arity.abs
|
142
|
+
each(*args){ |n|
|
143
|
+
s << n
|
144
|
+
if s.length >= ar
|
145
|
+
yld.call(*s)
|
146
|
+
s = []
|
147
|
+
end
|
148
|
+
}
|
149
|
+
a
|
150
|
+
end
|
151
|
+
alias_method( :each_by, :each_slice )
|
152
|
+
|
153
|
+
def select(*args) # :yield:
|
154
|
+
a = []
|
155
|
+
each(*args){ |n| a << n if yield(n) }
|
156
|
+
a
|
157
|
+
end
|
158
|
+
alias_method( :find_all, :select )
|
159
|
+
|
160
|
+
def grep(pattern, *args)
|
161
|
+
a = []
|
162
|
+
each(*args){ |n| a << (block_given? ? yield(n) : n) if pattern === n }
|
163
|
+
a
|
164
|
+
end
|
165
|
+
|
166
|
+
def include?(anObj, *args)
|
167
|
+
each(*args){ |n| return true if anObj == n }
|
168
|
+
false
|
169
|
+
end
|
170
|
+
alias_method( :member?, :include? )
|
171
|
+
|
172
|
+
def max(*args)
|
173
|
+
to_a(*args).max
|
174
|
+
end
|
175
|
+
|
176
|
+
def min(*args)
|
177
|
+
to_a(*args).min
|
178
|
+
end
|
179
|
+
|
180
|
+
def reject(*args)
|
181
|
+
a = []
|
182
|
+
each(*args){ |n| a << n if ! yield(n) }
|
183
|
+
a
|
184
|
+
end
|
185
|
+
|
186
|
+
def sort(*args)
|
187
|
+
# TODO
|
188
|
+
end
|
189
|
+
|
190
|
+
end
|
191
|
+
=end
|
192
|
+
|