facets 2.1.3 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (303) hide show
  1. data/AUTHORS +14 -12
  2. data/CHANGES +45 -2
  3. data/NOTES +9 -7
  4. data/lib/core/facets/1stclassmethod.rb +15 -11
  5. data/lib/core/facets/array.rb +0 -1
  6. data/lib/core/facets/array/conjoin.rb +40 -8
  7. data/lib/core/facets/array/delete.rb +8 -2
  8. data/lib/core/facets/array/indexable.rb +30 -3
  9. data/lib/core/facets/array/merge.rb +11 -0
  10. data/lib/core/facets/array/only.rb +3 -3
  11. data/lib/core/facets/array/pad.rb +4 -46
  12. data/lib/core/facets/array/rotate.rb +4 -4
  13. data/lib/core/facets/array/select.rb +2 -0
  14. data/lib/core/facets/array/splice.rb +16 -2
  15. data/lib/core/facets/array/stackable.rb +6 -40
  16. data/lib/core/facets/binding.rb +3 -0
  17. data/lib/core/facets/binding/cflow.rb +10 -64
  18. data/lib/core/facets/binding/defined.rb +10 -0
  19. data/lib/core/facets/binding/eval.rb +10 -76
  20. data/lib/core/facets/binding/here.rb +9 -0
  21. data/lib/core/facets/binding/self.rb +10 -0
  22. data/lib/core/facets/binding/vars.rb +0 -45
  23. data/lib/core/facets/boolean.rb +31 -103
  24. data/lib/core/facets/class/descendents.rb +17 -44
  25. data/lib/core/facets/comparable/bound.rb +8 -70
  26. data/lib/core/facets/comparable/cmp.rb +12 -92
  27. data/lib/core/facets/conversion.rb +122 -321
  28. data/lib/core/facets/dir/multiglob.rb +0 -13
  29. data/lib/core/facets/dir/traverse.rb +61 -111
  30. data/lib/core/facets/enumerable.rb +4 -2
  31. data/lib/core/facets/enumerable/cartesian.rb +36 -85
  32. data/lib/core/facets/enumerable/collect.rb +64 -152
  33. data/lib/core/facets/enumerable/combination.rb +40 -42
  34. data/lib/core/facets/enumerable/count.rb +99 -174
  35. data/lib/core/facets/enumerable/each.rb +86 -0
  36. data/lib/core/facets/enumerable/mash.rb +58 -0
  37. data/lib/core/facets/enumerable/permutation.rb +39 -44
  38. data/lib/core/facets/enumerable/probability.rb +16 -90
  39. data/lib/core/facets/enumerable/split.rb +113 -0
  40. data/lib/core/facets/exception/detail.rb +1 -2
  41. data/lib/core/facets/facets.rb +3 -2
  42. data/lib/core/facets/file/read.rb +4 -59
  43. data/lib/core/facets/file/topath.rb +8 -96
  44. data/lib/core/facets/file/write.rb +21 -49
  45. data/lib/core/facets/filetest/root.rb +4 -3
  46. data/lib/core/facets/functor.rb +5 -43
  47. data/lib/core/facets/hash/at.rb +7 -37
  48. data/lib/core/facets/hash/delete.rb +9 -58
  49. data/lib/core/facets/hash/has_keys.rb +4 -43
  50. data/lib/core/facets/hash/insert.rb +5 -38
  51. data/lib/core/facets/hash/inverse.rb +2 -41
  52. data/lib/core/facets/hash/iterate.rb +4 -45
  53. data/lib/core/facets/hash/keyize.rb +24 -92
  54. data/lib/core/facets/hash/merge.rb +4 -38
  55. data/lib/core/facets/hash/new.rb +5 -38
  56. data/lib/core/facets/hash/op.rb +20 -66
  57. data/lib/core/facets/hash/rekey.rb +9 -87
  58. data/lib/core/facets/hash/select.rb +1 -1
  59. data/lib/core/facets/hash/slice.rb +42 -0
  60. data/lib/core/facets/hash/traverse.rb +6 -46
  61. data/lib/core/facets/hash/update.rb +27 -67
  62. data/lib/core/facets/hash/weave.rb +22 -42
  63. data/lib/core/facets/indexable.rb +42 -14
  64. data/lib/core/facets/integer/bitmask.rb +69 -106
  65. data/lib/core/facets/integer/factorial.rb +1 -44
  66. data/lib/core/facets/integer/multiples.rb +27 -22
  67. data/lib/core/facets/integer/of.rb +1 -33
  68. data/lib/core/facets/kernel.rb +4 -2
  69. data/lib/core/facets/kernel/ask.rb +15 -3
  70. data/lib/core/facets/kernel/callstack.rb +38 -69
  71. data/lib/core/facets/kernel/constant.rb +2 -38
  72. data/lib/core/facets/kernel/deepcopy.rb +3 -55
  73. data/lib/core/facets/kernel/dir.rb +2 -0
  74. data/lib/core/facets/kernel/ergo.rb +2 -2
  75. data/lib/core/facets/kernel/instance.rb +51 -120
  76. data/lib/core/facets/kernel/metaid.rb +35 -73
  77. data/lib/core/facets/kernel/object.rb +14 -39
  78. data/lib/core/facets/kernel/op_esc.rb +24 -2
  79. data/lib/core/facets/kernel/populate.rb +6 -69
  80. data/lib/core/facets/kernel/report.rb +28 -33
  81. data/lib/core/facets/kernel/require.rb +7 -21
  82. data/lib/core/facets/kernel/respond.rb +11 -1
  83. data/lib/core/facets/kernel/returning.rb +50 -0
  84. data/lib/core/facets/kernel/silence.rb +12 -24
  85. data/lib/core/facets/kernel/super.rb +12 -76
  86. data/lib/core/facets/kernel/tap.rb +25 -107
  87. data/lib/core/facets/kernel/val.rb +7 -46
  88. data/lib/core/facets/kernel/withattr.rb +6 -64
  89. data/lib/core/facets/matchdata/matchset.rb +8 -50
  90. data/lib/core/facets/module.rb +3 -1
  91. data/lib/core/facets/module/abstract.rb +9 -47
  92. data/lib/core/facets/module/alias.rb +11 -68
  93. data/lib/core/facets/module/attr.rb +36 -15
  94. data/lib/core/facets/module/cattr.rb +8 -76
  95. data/lib/core/facets/module/clone.rb +15 -66
  96. data/lib/core/facets/module/include.rb +54 -114
  97. data/lib/core/facets/module/methods.rb +15 -13
  98. data/lib/core/facets/module/modify.rb +20 -206
  99. data/lib/core/facets/module/name.rb +19 -83
  100. data/lib/core/facets/module/require.rb +48 -53
  101. data/lib/core/facets/module/traits.rb +74 -33
  102. data/lib/core/facets/nilclass/status.rb +25 -2
  103. data/lib/core/facets/numeric/round.rb +24 -89
  104. data/lib/core/facets/proc/bind.rb +16 -59
  105. data/lib/core/facets/proc/compose.rb +6 -40
  106. data/lib/core/facets/proc/fn.rb +2 -0
  107. data/lib/core/facets/range/combine.rb +15 -51
  108. data/lib/core/facets/range/overlap.rb +8 -64
  109. data/lib/core/facets/regexp/arity.rb +6 -41
  110. data/lib/core/facets/stackable.rb +43 -4
  111. data/lib/core/facets/string.rb +2 -0
  112. data/lib/core/facets/string/align.rb +45 -55
  113. data/lib/core/facets/string/blank.rb +2 -46
  114. data/lib/core/facets/string/bracket.rb +14 -87
  115. data/lib/core/facets/string/case.rb +45 -32
  116. data/lib/core/facets/string/crypt.rb +3 -40
  117. data/lib/core/facets/string/filter.rb +7 -49
  118. data/lib/core/facets/string/format.rb +24 -126
  119. data/lib/core/facets/string/indexable.rb +50 -133
  120. data/lib/core/facets/string/interpolate.rb +24 -59
  121. data/lib/core/facets/string/natcmp.rb +5 -39
  122. data/lib/core/facets/string/nchar.rb +37 -45
  123. data/lib/core/facets/string/op.rb +13 -0
  124. data/lib/core/facets/string/partitions.rb +38 -99
  125. data/lib/core/facets/string/range.rb +8 -49
  126. data/lib/core/facets/string/regesc.rb +9 -42
  127. data/lib/core/facets/string/scan.rb +6 -52
  128. data/lib/core/facets/string/splice.rb +8 -13
  129. data/lib/core/facets/string/tabs.rb +16 -153
  130. data/lib/core/facets/symbol.rb +3 -1
  131. data/lib/core/facets/symbol/chomp.rb +11 -29
  132. data/lib/core/facets/symbol/generate.rb +4 -43
  133. data/lib/core/facets/symbol/not.rb +13 -25
  134. data/lib/core/facets/symbol/shadow.rb +2 -40
  135. data/lib/core/facets/symbol/succ.rb +14 -13
  136. data/lib/core/facets/symbol/to_proc.rb +33 -28
  137. data/lib/core/facets/time.rb +1 -0
  138. data/lib/core/facets/time/change.rb +5 -38
  139. data/lib/core/facets/time/elapse.rb +2 -41
  140. data/lib/core/facets/time/stamp.rb +47 -0
  141. data/lib/core/facets/unboundmethod.rb +3 -0
  142. data/lib/core/facets/unboundmethod/arguments.rb +27 -4
  143. data/lib/core/facets/unboundmethod/name.rb +21 -7
  144. data/lib/methods/facets/enumerable/cluster_by.rb +1 -1
  145. data/lib/methods/facets/enumerable/collate.rb +1 -0
  146. data/lib/methods/facets/enumerable/divide.rb +1 -1
  147. data/lib/methods/facets/enumerable/each_by.rb +1 -1
  148. data/lib/methods/facets/enumerable/each_pair.rb +1 -1
  149. data/lib/methods/facets/enumerable/eachn.rb +1 -1
  150. data/lib/methods/facets/enumerable/graph.rb +1 -1
  151. data/lib/methods/facets/enumerable/group_by.rb +1 -1
  152. data/lib/methods/facets/enumerable/inject.rb +1 -0
  153. data/lib/methods/facets/enumerable/map_send.rb +1 -0
  154. data/lib/methods/facets/enumerable/modulate.rb +1 -0
  155. data/lib/methods/facets/enumerable/partition_by.rb +1 -1
  156. data/lib/methods/facets/hash/collate.rb +1 -1
  157. data/lib/methods/facets/hash/except.rb +1 -0
  158. data/lib/methods/facets/hash/graph.rb +1 -1
  159. data/lib/methods/facets/hash/mash.rb +1 -0
  160. data/lib/methods/facets/kernel/Bit.rb +1 -0
  161. data/lib/methods/facets/kernel/complete.rb +1 -1
  162. data/lib/methods/facets/kernel/here.rb +1 -1
  163. data/lib/methods/facets/kernel/non_nil.rb +1 -0
  164. data/lib/methods/facets/kernel/respond_with_value.rb +1 -0
  165. data/lib/methods/facets/kernel/with.rb +1 -1
  166. data/lib/methods/facets/module/class_def.rb +1 -0
  167. data/lib/methods/facets/string/camelcase.rb +1 -0
  168. data/lib/methods/facets/string/op_minus.rb +1 -0
  169. data/lib/methods/facets/string/snakecase.rb +1 -0
  170. data/lib/more/facets/attributes.rb +5 -5
  171. data/lib/more/facets/basicobject.rb +0 -62
  172. data/lib/{core/facets/continuation/create.rb → more/facets/continuation.rb} +4 -21
  173. data/lib/more/facets/duration.rb +534 -0
  174. data/lib/more/facets/lazy.rb +3 -3
  175. data/lib/more/facets/namespace.rb +23 -71
  176. data/lib/more/facets/rbsystem.rb +42 -8
  177. data/lib/more/facets/stylize.rb +6 -3
  178. data/lib/more/facets/thread.rb +55 -0
  179. data/meta/MANIFEST +49 -18
  180. data/meta/ROLLRC +1 -1
  181. data/meta/project.yaml +2 -2
  182. data/task/install +1 -1
  183. data/task/test/general +8 -2
  184. data/test/unit/array/test_pad.rb +30 -45
  185. data/test/unit/array/test_stackable.rb +14 -28
  186. data/test/unit/binding/test_cflow.rb +34 -49
  187. data/test/unit/binding/test_defined.rb +17 -0
  188. data/test/unit/binding/test_eval.rb +11 -39
  189. data/test/unit/binding/test_here.rb +17 -0
  190. data/test/unit/binding/test_self.rb +17 -0
  191. data/test/unit/binding/test_vars.rb +22 -37
  192. data/test/unit/class/test_descendents.rb +15 -30
  193. data/test/unit/class/test_initializer.rb +1 -8
  194. data/test/unit/comparable/test_bound.rb +38 -53
  195. data/test/unit/comparable/test_cmp.rb +45 -60
  196. data/test/unit/dir/test_traverse.rb +56 -0
  197. data/test/unit/enumerable/test_cartesian.rb +34 -47
  198. data/test/unit/enumerable/test_collect.rb +16 -125
  199. data/test/unit/enumerable/test_combination.rb +1 -8
  200. data/test/unit/enumerable/test_count.rb +51 -66
  201. data/test/unit/enumerable/test_each.rb +77 -0
  202. data/test/unit/enumerable/test_mash.rb +51 -0
  203. data/test/unit/enumerable/test_permutation.rb +1 -7
  204. data/test/unit/enumerable/test_probability.rb +42 -55
  205. data/test/unit/enumerable/test_split.rb +52 -0
  206. data/test/unit/exception/test_detail.rb +19 -0
  207. data/test/unit/file/test_read.rb +34 -0
  208. data/test/unit/file/test_topath.rb +17 -25
  209. data/test/unit/file/test_write.rb +6 -12
  210. data/test/unit/filetest/test_root.rb +14 -0
  211. data/test/unit/hash/test_at.rb +9 -21
  212. data/test/unit/hash/test_delete.rb +22 -37
  213. data/test/unit/hash/test_has_keys.rb +13 -28
  214. data/test/unit/hash/test_insert.rb +9 -23
  215. data/test/unit/hash/test_inverse.rb +11 -26
  216. data/test/unit/hash/test_iterate.rb +16 -31
  217. data/test/unit/hash/test_keyize.rb +40 -55
  218. data/test/unit/hash/test_merge.rb +10 -25
  219. data/test/unit/hash/test_new.rb +9 -24
  220. data/test/unit/hash/test_op.rb +1 -7
  221. data/test/unit/hash/test_rekey.rb +47 -62
  222. data/test/unit/hash/test_traverse.rb +17 -32
  223. data/test/unit/hash/test_update.rb +30 -45
  224. data/test/unit/hash/test_weave.rb +10 -23
  225. data/test/unit/integer/test_bitmask.rb +48 -44
  226. data/test/unit/integer/test_factorial.rb +11 -26
  227. data/test/unit/integer/test_multiples.rb +1 -5
  228. data/test/unit/integer/test_of.rb +14 -29
  229. data/test/unit/kernel/test_callstack.rb +13 -28
  230. data/test/unit/kernel/test_constant.rb +14 -28
  231. data/test/unit/kernel/test_deepcopy.rb +20 -35
  232. data/test/unit/kernel/test_instance.rb +46 -61
  233. data/test/unit/kernel/test_metaid.rb +42 -57
  234. data/test/unit/kernel/test_object.rb +14 -29
  235. data/test/unit/kernel/test_populate.rb +38 -53
  236. data/test/unit/kernel/test_report.rb +1 -7
  237. data/test/unit/kernel/test_returning.rb +16 -0
  238. data/test/unit/kernel/test_silence.rb +8 -23
  239. data/test/unit/kernel/test_super.rb +41 -56
  240. data/test/unit/kernel/test_tap.rb +15 -39
  241. data/test/unit/kernel/test_val.rb +7 -20
  242. data/test/unit/kernel/test_withattr.rb +29 -44
  243. data/test/unit/matchdata/test_matchset.rb +20 -35
  244. data/test/unit/module/test_abstract.rb +15 -30
  245. data/test/unit/module/test_alias.rb +32 -45
  246. data/test/unit/module/test_cattr.rb +39 -54
  247. data/test/unit/module/test_clone.rb +31 -43
  248. data/test/unit/module/test_include.rb +1 -35
  249. data/test/unit/module/test_modify.rb +102 -114
  250. data/test/unit/module/test_name.rb +1 -7
  251. data/test/unit/numeric/test_round.rb +46 -61
  252. data/test/unit/proc/test_bind.rb +29 -44
  253. data/test/unit/proc/test_compose.rb +20 -35
  254. data/test/unit/range/test_combine.rb +14 -29
  255. data/test/unit/range/test_overlap.rb +34 -51
  256. data/test/unit/regexp/test_arity.rb +14 -29
  257. data/test/unit/string/test_align.rb +13 -27
  258. data/test/unit/string/test_blank.rb +12 -27
  259. data/test/unit/string/test_bracket.rb +52 -67
  260. data/test/unit/string/test_case.rb +19 -38
  261. data/test/unit/string/test_crypt.rb +10 -25
  262. data/test/unit/string/test_filter.rb +1 -7
  263. data/test/unit/string/test_format.rb +2 -7
  264. data/test/unit/string/test_indexable.rb +54 -69
  265. data/test/unit/string/test_interpolate.rb +8 -21
  266. data/test/unit/string/test_natcmp.rb +11 -26
  267. data/test/unit/string/test_nchar.rb +1 -14
  268. data/test/unit/string/test_op.rb +14 -0
  269. data/test/unit/string/test_partitions.rb +39 -54
  270. data/test/unit/string/test_range.rb +17 -32
  271. data/test/unit/string/test_regesc.rb +1 -7
  272. data/test/unit/string/test_scan.rb +23 -38
  273. data/test/unit/string/test_stackable.rb +79 -98
  274. data/test/unit/string/test_tabs.rb +1 -7
  275. data/test/unit/symbol/test_chomp.rb +10 -21
  276. data/test/unit/symbol/test_generate.rb +7 -22
  277. data/test/unit/symbol/test_not.rb +10 -25
  278. data/test/unit/symbol/test_shadow.rb +8 -23
  279. data/test/unit/symbol/test_succ.rb +1 -7
  280. data/test/unit/symbol/test_to_proc.rb +1 -7
  281. data/test/unit/test_attributes.rb +1 -1
  282. data/test/unit/test_continuation.rb +13 -0
  283. data/test/unit/test_conversion.rb +1 -14
  284. data/test/unit/test_namespace.rb +30 -3
  285. data/test/unit/test_thread.rb +23 -0
  286. data/test/unit/time/test_change.rb +11 -26
  287. data/test/unit/time/test_elapse.rb +10 -25
  288. data/test/unit/time/test_stamp.rb +28 -0
  289. metadata +65 -25
  290. data/lib/core/facets/array/unzip.rb +0 -14
  291. data/lib/core/facets/continuation.rb +0 -1
  292. data/lib/core/facets/enumerable/collate.rb +0 -104
  293. data/lib/core/facets/kernel/require_esc.rb +0 -44
  294. data/lib/more/facets/mapsend.rb +0 -98
  295. data/lib/more/facets/pp_s.rb +0 -30
  296. data/log/history.rd +0 -38
  297. data/log/todo.rd +0 -4
  298. data/task/special/quickopts +0 -15
  299. data/test/unit/continuation/test_create.rb +0 -28
  300. data/test/unit/enumerable/test_collate.rb +0 -51
  301. data/test/unit/kernel/test_require_esc.rb +0 -29
  302. data/test/unit/test_mapsend.rb +0 -18
  303. data/test/unit/test_pp_s.rb +0 -17
@@ -1,21 +1,17 @@
1
- # TITLE:
1
+ # = TITLE:
2
2
  #
3
3
  # Object Methods
4
4
  #
5
- # FILE:
6
- #
7
- # kernel/object
8
- #
9
- # DESCRIPTION:
5
+ # = DESCRIPTION:
10
6
  #
11
7
  # Kernel extension using object_ prefix which is beneficial
12
8
  # to separation of metaprogramming from general programming.
13
9
  # object_ methods, in contrast to the instance_ methods,
14
10
  # do not access internal state.
15
11
  #
16
- # AUTHORS:
12
+ # = AUTHORS:
17
13
  #
18
- # CREDIT Thomas Sawyer
14
+ # - Thomas Sawyer
19
15
 
20
16
  module Kernel
21
17
 
@@ -38,6 +34,16 @@ module Kernel
38
34
  end
39
35
 
40
36
  # Send only to public methods.
37
+ #
38
+ # class X
39
+ # private
40
+ # def foo; end
41
+ # end
42
+ #
43
+ # X.new.object_send(:foo)
44
+ # => NoMethodError: private method `foo' called for #<X:0xb7ac6ba8>
45
+ #
46
+ # CREDIT: Trans
41
47
  #--
42
48
  # Which implementation is faster?
43
49
  #++
@@ -60,34 +66,3 @@ module Kernel
60
66
  alias :__class__ :class
61
67
 
62
68
  end
63
-
64
-
65
-
66
- # _____ _
67
- # |_ _|__ ___| |_
68
- # | |/ _ \/ __| __|
69
- # | | __/\__ \ |_
70
- # |_|\___||___/\__|
71
- #
72
- =begin test
73
-
74
- require 'test/unit'
75
-
76
- class TCKernel < Test::Unit::TestCase
77
-
78
- def test_object_class
79
- assert_equal( self.class, self.object_class )
80
- end
81
-
82
- def test_object_hexid
83
- o = Object.new
84
- assert( o.inspect.index( o.object_hexid ) )
85
- end
86
-
87
- def test__class__
88
- assert_equal( self.class, self.__class__ )
89
- end
90
-
91
- end
92
-
93
- =end
@@ -1,7 +1,7 @@
1
- # TODO Is there any good way to avoid 'unless const_defined?'.
2
-
3
1
  module Kernel
4
2
 
3
+ # TODO: Is there any good way to avoid 'unless const_defined?'.
4
+
5
5
  unless const_defined?("OPERATORS")
6
6
  OPERATORS = %w{ +@ -@ + - ** * / % ~ <=> << >> < > === == =~ <= >= | & ^ []= [] }
7
7
  OPERATORS_REGEXP = Regexp.new( '(' << OPERATORS.collect{ |k| Regexp.escape(k) }.join('|') << ')' )
@@ -33,8 +33,30 @@ module Kernel
33
33
  }
34
34
  end
35
35
 
36
+ # Applies operator escape's according to OPERATORS_ESCAPE_TABLE.
37
+ #
38
+ # op_esc('-') #=> "op_minus"
39
+ #
40
+ # CREDIT: Trans
41
+
36
42
  def op_esc( str )
37
43
  str.gsub(OPERATORS_REGEXP){ OPERATORS_ESC_TABLE[$1] }
38
44
  end
39
45
 
46
+ # NOTE: op_esc used to support the method require_esc.
47
+ #
48
+ # # Require a file with puncuation marks escaped.
49
+ # #
50
+ # # require_esc '[].rb'
51
+ # #
52
+ # # in actuality requires the file 'op_fetch.rb'.
53
+ #
54
+ # def require_esc( fpath )
55
+ # fdir, fname = File.split(fpath)
56
+ # ename = op_esc( fname )
57
+ # case ename[-1,1] ; when '!','=','?' then ename = ename[0...-1] ; end
58
+ # epath = File.join( fdir, ename )
59
+ # require( epath )
60
+ # end
61
+
40
62
  end
@@ -1,23 +1,19 @@
1
- # TITLE:
1
+ # = TITLE:
2
2
  #
3
3
  # Populate
4
4
  #
5
- # FILE:
6
- #
7
- # kernel/populate.rb
8
- #
9
- # DESCRIPTION:
5
+ # = DESCRIPTION:
10
6
  #
11
7
  # Kernel extensions for setting object state or
12
8
  # assigning variables.
13
9
  #
14
- # AUTHORS:
10
+ # = AUTHORS:
15
11
  #
16
- # CREDIT Thomas Sawyer
12
+ # - Thomas Sawyer
17
13
  #
18
- # NOTES:
14
+ # = TODO:
19
15
  #
20
- # TODO Change these to fit with object_ and instance_ conventions.
16
+ # - Change these to fit with object_ and instance_ conventions (?)
21
17
 
22
18
  #
23
19
  module Kernel
@@ -138,62 +134,3 @@ module Kernel
138
134
  end
139
135
 
140
136
  end
141
-
142
-
143
-
144
-
145
- # _____ _
146
- # |_ _|__ ___| |_
147
- # | |/ _ \/ __| __|
148
- # | | __/\__ \ |_
149
- # |_|\___||___/\__|
150
- #
151
- =begin test
152
-
153
- require 'test/unit'
154
-
155
- class TestKernelPopulate < Test::Unit::TestCase
156
-
157
- # def test_assign_from
158
- # o = Object.new
159
- # o.instance_eval{ @z=0; @a=1; @b=2 } #; @@a=3 }
160
- # assign_from( o, "z", "@a", "@b" ) #, "@@a" )
161
- # assert_equal( 1, @a )
162
- # assert_equal( 2, @b )
163
- # #assert_equal( 3, @@a )
164
- # end
165
-
166
- Customer = Struct.new( "Customer", :name, :address, :zip )
167
-
168
- def test_set_from
169
- bob = Customer.new("Bob Sawyer", "123 Maple, Anytown NC", 12345)
170
- joe = Customer.new("Joe Pitare")
171
- joe.set_from(bob, :address, :zip)
172
- assert_equal("Joe Pitare", joe.name)
173
- assert_equal("123 Maple, Anytown NC", joe.address)
174
- assert_equal(12345, joe.zip)
175
- end
176
-
177
- Customer = Struct.new( "Customer", :name, :address, :zip )
178
-
179
- def test_hash
180
- bob = Customer.new()
181
- x = { :name => "Bob Sawyer", :address => "123 Maple, Anytown NC", :zip => 12345 }
182
- bob.set_with(x)
183
- assert_equal(x[:name], bob.name)
184
- assert_equal(x[:address], bob.address)
185
- assert_equal(x[:zip], bob.zip)
186
- end
187
-
188
- def test_block
189
- bob = Customer.new()
190
- x = lambda {|s| s.name = "Bob Sawyer"; s.address = "123 Maple, Anytown NC"; s.zip = 12345 }
191
- bob.set_with(&x)
192
- assert_equal("Bob Sawyer", bob.name)
193
- assert_equal("123 Maple, Anytown NC", bob.address)
194
- assert_equal(12345, bob.zip)
195
- end
196
-
197
- end
198
-
199
- =end
@@ -1,36 +1,29 @@
1
- # TITLE:
2
- #
3
- # Reporting Extensions
4
- #
5
- # DESCRIPTION:
6
- #
7
- # Kernel extensions for debugging, warning and demoing.
8
- #
9
- # AUTHORS:
10
- #
11
- # - TransDelabug
12
-
13
1
  module Kernel
2
+
14
3
  module_function
15
4
 
16
- # Alternate to standard #p method that outputs
17
- # Kernel#inspect to stdout, but also passes through
18
- # the orginal argument(s).
19
- #
20
- # x = 1
21
- # r = 4 + q(1)
22
- # p r
23
- #
24
- # produces
25
- #
26
- # 1
27
- # 5
28
- #
29
- # DEPRECATE AS OF 1.9, _if_ #p will then do this too.
5
+ unless (RUBY_VERSION[0,3] == '1.9')
6
+
7
+ # Alternate to standard #p method that outputs
8
+ # Kernel#inspect to stdout, but also passes through
9
+ # the orginal argument(s).
10
+ #
11
+ # x = 1
12
+ # r = 4 + q(1)
13
+ # p r
14
+ #
15
+ # produces
16
+ #
17
+ # 1
18
+ # 5
19
+ #
20
+ # DEPRECATE AS OF 1.9, _if_ #p will then do this too.
21
+
22
+ def p(*x)
23
+ x.each{ |e| puts e.inspect } #p(*x)
24
+ x.size > 1 ? x : x.last #x.last
25
+ end
30
26
 
31
- def p(*x)
32
- x.each{ |e| puts e.inspect } #p(*x)
33
- x.size > 1 ? x : x.last #x.last
34
27
  end
35
28
 
36
29
  # Like #p but gives file and line number.
@@ -56,6 +49,10 @@ module Kernel
56
49
  #
57
50
  # Output:
58
51
  # The pretty printed string.
52
+ #
53
+ # TODO: Deprecate in favor of Exception#detail.
54
+ #
55
+ # CREDIT: George Moschovitis
59
56
 
60
57
  def pp_exception(ex)
61
58
  return %{#{ex.message}\n #{ex.backtrace.join("\n ")}\n LOGGED FROM: #{caller[0]}}
@@ -74,10 +71,8 @@ module Kernel
74
71
  # a.slice(1,2) #=> [2, 3]
75
72
  # a.map { |x| x**3 } #=> [1, 8, 27]
76
73
  #
77
- #--
78
- # Is there a way to do this without the eval string in block?
79
- # Preferably just a block and no string.
80
- #++
74
+ # TODO: Is there a way to do this without the eval string in block?
75
+ # Preferably just a block and no string.
81
76
 
82
77
  def demo(out=$stdout,&block)
83
78
  out << sprintf("%-25s#=> %s\n", expr = block.call, eval(expr, block.binding).inspect)
@@ -1,18 +1,14 @@
1
- # TITLE:
1
+ # = TITLE:
2
2
  #
3
3
  # Require / Load Extensions
4
4
  #
5
- # FILE:
6
- #
7
- # requires.rb
8
- #
9
- # DESCRIPTION:
5
+ # = DESCRIPTION:
10
6
  #
11
7
  # Require/Load extensions.
12
8
  #
13
- # AUTHORS:
9
+ # = AUTHORS:
14
10
  #
15
- # CREDIT Thomas Sawyer
11
+ # - Thomas Sawyer
16
12
 
17
13
  #
18
14
  module Kernel
@@ -23,7 +19,7 @@ module Kernel
23
19
  #
24
20
  # load_local 'templib'
25
21
  #
26
- def load_local( fname, safe=nil )
22
+ def load_local(fname, safe=nil)
27
23
  #fdir = File.expand_path( File.dirname( caller[0] ) )
28
24
  fdir = File.dirname( caller[0] )
29
25
  load( File.join( fdir, fname ), safe )
@@ -33,7 +29,7 @@ module Kernel
33
29
  #
34
30
  # require_local 'templib'
35
31
  #
36
- def require_local( fname )
32
+ def require_local(fname)
37
33
  #fdir = File.expand_path( File.dirname( caller[0] ) )
38
34
  fdir = File.dirname( caller[0] )
39
35
  require( File.join( fdir, fname ) )
@@ -44,7 +40,7 @@ module Kernel
44
40
  #
45
41
  # require_all 'facets/time/*'
46
42
  #
47
- def require_all( pat )
43
+ def require_all(pat)
48
44
  $LOAD_PATH.each do |path|
49
45
  fs = Dir[File.join(path,pat)]
50
46
  unless fs.empty?
@@ -57,13 +53,3 @@ module Kernel
57
53
  end
58
54
 
59
55
  end
60
-
61
-
62
- # _____ _
63
- # |_ _|__ ___| |_
64
- # | |/ _ \/ __| __|
65
- # | | __/\__ \ |_
66
- # |_|\___||___/\__|
67
- #
68
- # NO RESONABLE WAY TO DO
69
- # (THAT I CAN THINK OF)
@@ -3,11 +3,21 @@ module Kernel
3
3
  # Like #respond_to? but returns the result of the call
4
4
  # if it does indeed respond.
5
5
  #
6
- # (This is used to be called #respond_with_value.)
6
+ # class X
7
+ # def f; "f"; end
8
+ # end
7
9
  #
10
+ # x = X.new
11
+ # x.respond(:f) #=> "f"
12
+ # x.respond(:g) #=> nil
13
+ #
14
+ # CREDIT: Trans
15
+
8
16
  def respond(sym, *args)
9
17
  return nil if not respond_to?(sym, *args)
10
18
  send(sym, *args)
11
19
  end
12
20
 
21
+ alias_method :respond_with_value, :respond
22
+
13
23
  end
@@ -0,0 +1,50 @@
1
+ module Kernel
2
+
3
+ # A Ruby-ized realization of the K combinator.
4
+ #
5
+ # returning Book.new do |book|
6
+ # book.title = "Imperium"
7
+ # book.author = "Ulick Varange"
8
+ # end
9
+ #
10
+ # Also aliased as #with.
11
+ #
12
+ # def foo
13
+ # with values = [] do
14
+ # values << 'bar'
15
+ # values << 'baz'
16
+ # end
17
+ # end
18
+ #
19
+ # foo # => ['bar', 'baz']
20
+ #
21
+ # Technically, #returning probably should force the return of
22
+ # the stated object irregardless of any return statements that
23
+ # might appear within it's block. This might differentiate
24
+ # #returning from #with, however it also would require
25
+ # implementation in Ruby itself.
26
+ #
27
+ # CREDIT: Mikael Brockman
28
+
29
+ def returning(obj=self)
30
+ yield obj
31
+ obj
32
+ end
33
+
34
+ alias_method :with, :returning
35
+
36
+ # Repeat loop until it yeilds false or nil.
37
+ #
38
+ # a = [3, 2, 1]
39
+ # complete do
40
+ # b << a.pop
41
+ # end
42
+ # b #=> [3, 2, 1, nil]
43
+ #
44
+ # CREDIT: Trans
45
+
46
+ def complete
47
+ loop { break unless yield }
48
+ end
49
+
50
+ end
@@ -1,15 +1,15 @@
1
- # TITLE:
1
+ # = TITLE:
2
2
  # Verbosity Reporting Extensions
3
3
  #
4
- # DESCRIPTION:
4
+ # = DESCRIPTION:
5
5
  # Kernel extensions dealing with verbosity of warnings
6
6
  # and error messages.
7
7
  #
8
- # AUTHORS:
8
+ # = AUTHORS:
9
9
  # - David Heinemeier Hansson
10
10
  # - TransSilentNight
11
11
  #
12
- # LOG:
12
+ # = LOG:
13
13
  # - trans 07.09.01 Deprecated #silently as alias of slience_warnings.
14
14
 
15
15
  module Kernel
@@ -22,6 +22,9 @@ module Kernel
22
22
  # end
23
23
  #
24
24
  # puts 'But this will'
25
+ #
26
+ # CREDIT: David Heinemeier Hansson
27
+
25
28
  def silence_stream(stream)
26
29
  old_stream = stream.dup
27
30
  stream.reopen(RUBY_PLATFORM =~ /mswin/ ? 'NUL:' : '/dev/null')
@@ -32,7 +35,7 @@ module Kernel
32
35
  end
33
36
  #alias_method :silently, :silence_stream
34
37
 
35
- # For compatibility
38
+ # For compatibility.
36
39
  def silence_stderr #:nodoc:
37
40
  silence_stream(STDERR) { yield }
38
41
  end
@@ -44,7 +47,8 @@ module Kernel
44
47
  # value = noisy_call # no warning voiced
45
48
  # end
46
49
  #
47
- # noisy_call # warning voiced
50
+ # noisy_call # no warning is voiced
51
+
48
52
  def silence_warnings
49
53
  old_verbose, $VERBOSE = $VERBOSE, nil
50
54
  yield
@@ -62,6 +66,8 @@ module Kernel
62
66
  end
63
67
 
64
68
  # Supress errors while executing a block, with execptions.
69
+ #
70
+ # CREDIT: David Heinemeier Hansson
65
71
 
66
72
  def suppress(*exception_classes)
67
73
  begin yield
@@ -71,21 +77,3 @@ module Kernel
71
77
  end
72
78
 
73
79
  end
74
-
75
-
76
-
77
- =begin test
78
-
79
- require 'test/unit'
80
-
81
- class TestKernelError < Test::Unit::TestCase
82
-
83
- def test_silently
84
- silently do
85
- assert( ! $VERBOSE )
86
- end
87
- end
88
-
89
- end
90
-
91
- =end