facets 1.2.1 → 1.3.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.
Files changed (488) hide show
  1. data/ProjectInfo +32 -25
  2. data/data/facets/index.yml +30 -6
  3. data/data/facets/units/binary/base.yaml +12 -0
  4. data/data/facets/units/binary/extra.yaml +8 -0
  5. data/data/facets/units/cex.yaml +7 -0
  6. data/data/facets/units/currency/base.yaml +268 -0
  7. data/data/facets/units/default.yaml +22 -0
  8. data/data/facets/units/dump_yaml.rb +309 -0
  9. data/data/facets/units/si/base.yaml +36 -0
  10. data/data/facets/units/si/derived.yaml +133 -0
  11. data/data/facets/units/si/extra.yaml +107 -0
  12. data/data/facets/units/standard.yaml +5 -0
  13. data/data/facets/units/uk.yaml +16 -0
  14. data/data/facets/units/uk/base.yaml +107 -0
  15. data/data/facets/units/us.yaml +16 -0
  16. data/data/facets/units/us/base.yaml +112 -0
  17. data/data/facets/units/xmethods/cached.yaml +83 -0
  18. data/data/facets/units/xmethods/mapping.yaml +85 -0
  19. data/lib/facet/array/join_sentence.rb +1 -0
  20. data/lib/facet/class/cattr.rb +1 -0
  21. data/lib/facet/class/cattr_accessor.rb +1 -0
  22. data/lib/facet/class/cattr_reader.rb +1 -0
  23. data/lib/facet/class/cattr_writer.rb +1 -0
  24. data/lib/facet/elementor.rb +1 -0
  25. data/lib/facet/enumerable/accumulate.rb +1 -0
  26. data/lib/facet/enumerable/collect_if.rb +1 -0
  27. data/lib/facet/enumerable/map_if.rb +1 -0
  28. data/lib/facet/file/self/append.rb +1 -0
  29. data/lib/facet/file/self/read_binary.rb +1 -0
  30. data/lib/facet/file/self/write.rb +1 -0
  31. data/lib/facet/json.rb +1 -0
  32. data/lib/facet/kernel/__self__.rb +1 -0
  33. data/lib/facet/kernel/methodname.rb +1 -0
  34. data/lib/facet/module/attr_query.rb +1 -0
  35. data/lib/facet/module/attr_validator.rb +1 -0
  36. data/lib/facet/module/inherit.rb +1 -0
  37. data/lib/facet/module/let.rb +1 -0
  38. data/lib/facet/module/mattr.rb +1 -0
  39. data/lib/facet/module/mattr_accessor.rb +1 -0
  40. data/lib/facet/module/mattr_reader.rb +1 -0
  41. data/lib/facet/module/mattr_writer.rb +1 -0
  42. data/lib/facet/module/singleton_to_module.rb +1 -0
  43. data/lib/facet/nilclass/op_cmp.rb +1 -0
  44. data/lib/facet/nilclass/succ.rb +1 -0
  45. data/lib/facet/recorder.rb +1 -0
  46. data/lib/facet/xoxo.rb +1 -0
  47. data/lib/facets/core/array.rb +1 -0
  48. data/lib/facets/core/array/join_sentence.rb +12 -0
  49. data/lib/facets/core/class.rb +4 -0
  50. data/lib/facets/core/{module → class}/cattr.rb +7 -9
  51. data/lib/facets/core/class/cattr_accessor.rb +2 -0
  52. data/lib/facets/core/class/cattr_reader.rb +3 -0
  53. data/lib/facets/core/class/cattr_writer.rb +2 -0
  54. data/lib/facets/core/dir/self/ls_r.rb +4 -9
  55. data/lib/facets/core/enumerable.rb +3 -0
  56. data/lib/facets/core/enumerable/accumulate.rb +25 -0
  57. data/lib/facets/core/enumerable/collect_if.rb +15 -0
  58. data/lib/facets/core/enumerable/ew.rb +1 -5
  59. data/lib/facets/core/enumerable/map_if.rb +3 -0
  60. data/lib/facets/core/file.rb +3 -0
  61. data/lib/facets/core/file/self/append.rb +8 -0
  62. data/lib/facets/core/file/self/create.rb +14 -8
  63. data/lib/facets/core/file/self/open_as_string.rb +31 -13
  64. data/lib/facets/core/file/self/read_binary.rb +8 -0
  65. data/lib/facets/core/file/self/read_list.rb +11 -7
  66. data/lib/facets/core/file/self/write.rb +8 -0
  67. data/lib/facets/core/fileutils/wc.rb +4 -9
  68. data/lib/facets/core/fileutils/which.rb +4 -9
  69. data/lib/facets/core/kernel.rb +2 -1
  70. data/lib/facets/core/kernel/__self__.rb +32 -0
  71. data/lib/facets/core/kernel/as.rb +1 -1
  72. data/lib/facets/core/kernel/assign_from.rb +3 -3
  73. data/lib/facets/core/kernel/assign_with.rb +2 -0
  74. data/lib/facets/core/kernel/me.rb +3 -2
  75. data/lib/facets/core/kernel/method_name.rb +2 -49
  76. data/lib/facets/core/kernel/methodname.rb +49 -0
  77. data/lib/facets/core/module.rb +9 -4
  78. data/lib/facets/core/module/attr_query.rb +56 -0
  79. data/lib/facets/core/module/attr_validator.rb +18 -0
  80. data/lib/facets/core/module/inherit.rb +70 -0
  81. data/lib/facets/core/module/integrate.rb +1 -1
  82. data/lib/facets/core/module/let.rb +55 -0
  83. data/lib/facets/core/module/mattr.rb +180 -0
  84. data/lib/facets/core/module/{cattr_accessor.rb → mattr_accessor.rb} +0 -0
  85. data/lib/facets/core/module/{cattr_reader.rb → mattr_reader.rb} +0 -0
  86. data/lib/facets/core/module/{cattr_writer.rb → mattr_writer.rb} +0 -0
  87. data/lib/facets/core/module/on_included.rb +3 -1
  88. data/lib/facets/core/module/singleton_to_module.rb +23 -0
  89. data/lib/facets/core/nilclass.rb +2 -0
  90. data/lib/facets/core/string/methodize.rb +4 -3
  91. data/lib/facets/core/string/modulize.rb +3 -3
  92. data/lib/facets/more/ansicode.rb +1 -1
  93. data/lib/facets/more/aspects.rb +1 -1
  94. data/lib/facets/more/basicobject.rb +67 -22
  95. data/lib/facets/more/classinherit.rb +2 -2
  96. data/lib/facets/more/cloneable.rb +1 -1
  97. data/lib/facets/more/consoleapp.rb +31 -20
  98. data/lib/facets/more/dictionary.rb +1 -1
  99. data/lib/facets/more/filelist.rb +2 -10
  100. data/lib/facets/more/functor.rb +6 -6
  101. data/lib/facets/more/json.rb +891 -0
  102. data/lib/facets/more/methodprobe.rb +1 -1
  103. data/lib/facets/more/multiton.rb +16 -8
  104. data/lib/facets/more/nilcomparable.rb +31 -49
  105. data/lib/facets/more/openobject.rb +50 -10
  106. data/lib/facets/more/recorder.rb +125 -0
  107. data/lib/facets/more/rtals.rb +199 -4
  108. data/lib/facets/more/typecast.rb +12 -12
  109. data/lib/facets/more/units.rb +20 -14
  110. data/lib/facets/more/xoxo.rb +519 -0
  111. data/setup.rb +283 -271
  112. data/test/lib/facets/core/array/test_at_rand.rb +1 -1
  113. data/test/lib/facets/core/array/test_delete_unless.rb +1 -1
  114. data/test/lib/facets/core/array/test_delete_values.rb +1 -1
  115. data/test/lib/facets/core/array/test_delete_values_at.rb +1 -1
  116. data/test/lib/facets/core/array/test_first.rb +1 -1
  117. data/test/lib/facets/core/array/test_head.rb +1 -1
  118. data/test/lib/facets/core/array/test_last_index.rb +1 -1
  119. data/test/lib/facets/core/array/test_merge.rb +1 -1
  120. data/test/lib/facets/core/array/test_mid.rb +1 -1
  121. data/test/lib/facets/core/array/test_middle.rb +1 -1
  122. data/test/lib/facets/core/array/test_op_fetch.rb +1 -1
  123. data/test/lib/facets/core/array/test_op_store.rb +1 -1
  124. data/test/lib/facets/core/array/test_pick.rb +1 -1
  125. data/test/lib/facets/core/array/test_pos.rb +1 -1
  126. data/test/lib/facets/core/array/test_pull.rb +1 -1
  127. data/test/lib/facets/core/array/test_rand_index.rb +1 -1
  128. data/test/lib/facets/core/array/test_rand_subset.rb +1 -1
  129. data/test/lib/facets/core/array/test_range.rb +1 -1
  130. data/test/lib/facets/core/array/test_rotate.rb +1 -1
  131. data/test/lib/facets/core/array/test_select.rb +1 -1
  132. data/test/lib/facets/core/array/test_shuffle.rb +1 -1
  133. data/test/lib/facets/core/array/test_slap.rb +1 -1
  134. data/test/lib/facets/core/array/test_thru.rb +1 -1
  135. data/test/lib/facets/core/array/test_to_b.rb +1 -1
  136. data/test/lib/facets/core/array/test_to_h.rb +1 -1
  137. data/test/lib/facets/core/array/test_to_hash.rb +1 -1
  138. data/test/lib/facets/core/binding/self/test_of_caller.rb +1 -1
  139. data/test/lib/facets/core/binding/test___LINE__.rb +1 -1
  140. data/test/lib/facets/core/binding/test_call_stack.rb +1 -1
  141. data/test/lib/facets/core/binding/test_called.rb +1 -1
  142. data/test/lib/facets/core/binding/test_caller.rb +1 -1
  143. data/test/lib/facets/core/binding/test_defined.rb +1 -1
  144. data/test/lib/facets/core/binding/test_eval.rb +1 -1
  145. data/test/lib/facets/core/binding/test_local_variables.rb +1 -1
  146. data/test/lib/facets/core/binding/test_method_name.rb +1 -1
  147. data/test/lib/facets/core/binding/test_op_fetch.rb +1 -1
  148. data/test/lib/facets/core/binding/test_op_store.rb +1 -1
  149. data/test/lib/facets/core/binding/test_self.rb +1 -1
  150. data/test/lib/facets/core/{module/test_cattr_accessor.rb → class/test_cattr.rb} +11 -3
  151. data/test/lib/facets/core/class/test_descendents.rb +1 -1
  152. data/test/lib/facets/core/class/test_method_name.rb +1 -1
  153. data/test/lib/facets/core/class/test_remove_descendents.rb +1 -1
  154. data/test/lib/facets/core/class/test_unix_path.rb +1 -1
  155. data/test/lib/facets/core/comparable/test_at_least.rb +1 -1
  156. data/test/lib/facets/core/comparable/test_clip.rb +1 -1
  157. data/test/lib/facets/core/comparable/test_cmp.rb +1 -1
  158. data/test/lib/facets/core/continuation/self/test_create.rb +1 -1
  159. data/test/lib/facets/core/date/test_days_in_month.rb +1 -1
  160. data/test/lib/facets/core/date/test_days_of_month.rb +1 -1
  161. data/test/lib/facets/core/date/test_stamp.rb +1 -1
  162. data/test/lib/facets/core/date/test_to_date.rb +1 -1
  163. data/test/lib/facets/core/date/test_to_s.rb +1 -1
  164. data/test/lib/facets/core/date/test_to_time.rb +1 -1
  165. data/test/lib/facets/core/dir/self/test_ancestor.rb +1 -1
  166. data/test/lib/facets/core/dir/self/test_ascend.rb +1 -1
  167. data/test/lib/facets/core/enumerable/self/test_combinations.rb +1 -1
  168. data/test/lib/facets/core/enumerable/self/test_cross.rb +1 -1
  169. data/test/lib/facets/core/enumerable/test_collect_with_index.rb +1 -1
  170. data/test/lib/facets/core/enumerable/test_commonality.rb +1 -1
  171. data/test/lib/facets/core/enumerable/test_compact_collect.rb +1 -1
  172. data/test/lib/facets/core/enumerable/test_cross.rb +1 -1
  173. data/test/lib/facets/core/enumerable/test_each_combination.rb +1 -1
  174. data/test/lib/facets/core/enumerable/test_each_pair.rb +1 -1
  175. data/test/lib/facets/core/enumerable/test_each_slice.rb +1 -1
  176. data/test/lib/facets/core/enumerable/test_each_unique_pair.rb +1 -1
  177. data/test/lib/facets/core/enumerable/test_entropy.rb +1 -1
  178. data/test/lib/facets/core/enumerable/test_every.rb +1 -1
  179. data/test/lib/facets/core/enumerable/test_ew.rb +1 -1
  180. data/test/lib/facets/core/enumerable/test_filter_collect.rb +1 -1
  181. data/test/lib/facets/core/enumerable/test_find_collisions.rb +1 -1
  182. data/test/lib/facets/core/enumerable/test_frequency.rb +1 -1
  183. data/test/lib/facets/core/enumerable/test_graph.rb +1 -1
  184. data/test/lib/facets/core/enumerable/test_ideal_entropy.rb +1 -1
  185. data/test/lib/facets/core/enumerable/test_none.rb +1 -1
  186. data/test/lib/facets/core/enumerable/test_occur.rb +1 -1
  187. data/test/lib/facets/core/enumerable/test_one.rb +1 -1
  188. data/test/lib/facets/core/enumerable/test_op_pow.rb +1 -1
  189. data/test/lib/facets/core/enumerable/test_partition_by.rb +1 -1
  190. data/test/lib/facets/core/enumerable/test_permute.rb +1 -1
  191. data/test/lib/facets/core/enumerable/test_probability.rb +1 -1
  192. data/test/lib/facets/core/enumerable/test_to_h.rb +1 -1
  193. data/test/lib/facets/core/enumerable/test_uniq_by.rb +1 -1
  194. data/test/lib/facets/core/file/self/test_create.rb +14 -9
  195. data/test/lib/facets/core/file/self/test_open_as_string.rb +21 -11
  196. data/test/lib/facets/core/file/self/test_read_list.rb +11 -8
  197. data/test/lib/facets/core/file/self/test_sanitize.rb +1 -1
  198. data/test/lib/facets/core/file/self/test_split_all.rb +1 -1
  199. data/test/lib/facets/core/float/test_round_at.rb +1 -1
  200. data/test/lib/facets/core/float/test_round_to.rb +1 -1
  201. data/test/lib/facets/core/hash/self/test_zipnew.rb +1 -1
  202. data/test/lib/facets/core/hash/test_alias.rb +1 -1
  203. data/test/lib/facets/core/hash/test_assert_has_keys.rb +1 -1
  204. data/test/lib/facets/core/hash/test_assert_has_only_keys.rb +1 -1
  205. data/test/lib/facets/core/hash/test_at.rb +1 -1
  206. data/test/lib/facets/core/hash/test_collate.rb +1 -1
  207. data/test/lib/facets/core/hash/test_each.rb +1 -1
  208. data/test/lib/facets/core/hash/test_each_with_index.rb +1 -1
  209. data/test/lib/facets/core/hash/test_each_with_key.rb +1 -1
  210. data/test/lib/facets/core/hash/test_graph.rb +1 -1
  211. data/test/lib/facets/core/hash/test_has_keys.rb +1 -1
  212. data/test/lib/facets/core/hash/test_has_only_keys.rb +1 -1
  213. data/test/lib/facets/core/hash/test_inverse.rb +1 -1
  214. data/test/lib/facets/core/hash/test_keys_to_s.rb +1 -1
  215. data/test/lib/facets/core/hash/test_keys_to_sym.rb +1 -1
  216. data/test/lib/facets/core/hash/test_op_fetch.rb +1 -1
  217. data/test/lib/facets/core/hash/test_op_lshift.rb +1 -1
  218. data/test/lib/facets/core/hash/test_rand_key.rb +1 -1
  219. data/test/lib/facets/core/hash/test_rand_pair.rb +1 -1
  220. data/test/lib/facets/core/hash/test_rand_value.rb +1 -1
  221. data/test/lib/facets/core/hash/test_replace_each.rb +1 -1
  222. data/test/lib/facets/core/hash/test_shuffle.rb +1 -1
  223. data/test/lib/facets/core/hash/test_slice.rb +1 -1
  224. data/test/lib/facets/core/hash/test_swap.rb +1 -1
  225. data/test/lib/facets/core/hash/test_swapkey.rb +1 -1
  226. data/test/lib/facets/core/hash/test_to_h.rb +1 -1
  227. data/test/lib/facets/core/hash/test_to_ostruct.rb +1 -1
  228. data/test/lib/facets/core/hash/test_to_ostruct_recurse.rb +1 -1
  229. data/test/lib/facets/core/hash/test_traverse.rb +1 -1
  230. data/test/lib/facets/core/hash/test_update_each.rb +1 -1
  231. data/test/lib/facets/core/hash/test_update_keys.rb +1 -1
  232. data/test/lib/facets/core/hash/test_update_values.rb +1 -1
  233. data/test/lib/facets/core/hash/test_weave.rb +1 -1
  234. data/test/lib/facets/core/integer/test_factorial.rb +1 -1
  235. data/test/lib/facets/core/integer/test_multiple.rb +1 -1
  236. data/test/lib/facets/core/integer/test_ordinal.rb +1 -1
  237. data/test/lib/facets/core/integer/test_times_collect.rb +1 -1
  238. data/test/lib/facets/core/kernel/test___class__.rb +1 -1
  239. data/test/lib/facets/core/kernel/test_as.rb +1 -1
  240. data/test/lib/facets/core/kernel/test_assign_from.rb +1 -1
  241. data/test/lib/facets/core/kernel/test_assign_with.rb +1 -1
  242. data/test/lib/facets/core/kernel/test_bool.rb +1 -1
  243. data/test/lib/facets/core/kernel/test_bug.rb +1 -1
  244. data/test/lib/facets/core/kernel/test_call_stack.rb +1 -1
  245. data/test/lib/facets/core/kernel/test_called.rb +1 -1
  246. data/test/lib/facets/core/kernel/test_constant.rb +1 -1
  247. data/test/lib/facets/core/kernel/test_copy.rb +1 -1
  248. data/test/lib/facets/core/kernel/test_deep_copy.rb +1 -1
  249. data/test/lib/facets/core/kernel/test_demo.rb +1 -1
  250. data/test/lib/facets/core/kernel/test_fn.rb +1 -1
  251. data/test/lib/facets/core/kernel/test_generate_method_name.rb +1 -1
  252. data/test/lib/facets/core/kernel/test_get_by_id.rb +1 -1
  253. data/test/lib/facets/core/kernel/test_here.rb +1 -1
  254. data/test/lib/facets/core/kernel/test_in.rb +1 -1
  255. data/test/lib/facets/core/kernel/test_maybe.rb +1 -1
  256. data/test/lib/facets/core/kernel/test_metaclass.rb +1 -1
  257. data/test/lib/facets/core/kernel/test_method.rb +1 -1
  258. data/test/lib/facets/core/kernel/{test_method_name.rb → test_methodname.rb} +3 -3
  259. data/test/lib/facets/core/kernel/test_methods.rb +1 -1
  260. data/test/lib/facets/core/kernel/test_new.rb +1 -1
  261. data/test/lib/facets/core/kernel/test_object_class.rb +1 -1
  262. data/test/lib/facets/core/kernel/test_object_hexid.rb +1 -1
  263. data/test/lib/facets/core/kernel/test_require_all.rb +1 -1
  264. data/test/lib/facets/core/kernel/test_require_esc.rb +1 -1
  265. data/test/lib/facets/core/kernel/test_require_facet.rb +1 -1
  266. data/test/lib/facets/core/kernel/test_resc.rb +1 -1
  267. data/test/lib/facets/core/kernel/test_returning.rb +1 -1
  268. data/test/lib/facets/core/kernel/test_send_as.rb +1 -1
  269. data/test/lib/facets/core/kernel/test_set_from.rb +1 -1
  270. data/test/lib/facets/core/kernel/test_set_with.rb +1 -1
  271. data/test/lib/facets/core/kernel/test_silently.rb +1 -1
  272. data/test/lib/facets/core/kernel/test_singleton.rb +1 -1
  273. data/test/lib/facets/core/kernel/test_superior.rb +1 -1
  274. data/test/lib/facets/core/kernel/test_supermethod.rb +1 -1
  275. data/test/lib/facets/core/kernel/test_this.rb +1 -1
  276. data/test/lib/facets/core/kernel/test_to_b.rb +1 -1
  277. data/test/lib/facets/core/kernel/test_to_bool.rb +1 -1
  278. data/test/lib/facets/core/kernel/test_uri.rb +1 -1
  279. data/test/lib/facets/core/kernel/test_val.rb +1 -1
  280. data/test/lib/facets/core/kernel/test_with_accessor.rb +1 -1
  281. data/test/lib/facets/core/matchdata/test_match.rb +1 -1
  282. data/test/lib/facets/core/matchdata/test_matchtree.rb +1 -1
  283. data/test/lib/facets/core/module/test_abstract.rb +1 -1
  284. data/test/lib/facets/core/module/test_alias_module_function.rb +1 -1
  285. data/test/lib/facets/core/module/test_ancestor.rb +1 -1
  286. data/test/lib/facets/core/module/test_basename.rb +1 -1
  287. data/test/lib/facets/core/module/test_by_name.rb +1 -1
  288. data/test/lib/facets/core/module/test_clone_using.rb +1 -1
  289. data/test/lib/facets/core/module/test_dirname.rb +1 -1
  290. data/test/lib/facets/core/module/test_equate_on.rb +1 -1
  291. data/test/lib/facets/core/module/test_generate_instance_method_name.rb +1 -1
  292. data/test/lib/facets/core/module/test_include_as.rb +1 -1
  293. data/test/lib/facets/core/module/test_inherit.rb +58 -0
  294. data/test/lib/facets/core/module/test_initializer.rb +1 -1
  295. data/test/lib/facets/core/module/test_instance_methods.rb +1 -1
  296. data/test/lib/facets/core/module/test_integrate.rb +1 -1
  297. data/test/lib/facets/core/module/test_let.rb +31 -0
  298. data/test/lib/facets/core/module/test_mattr.rb +71 -0
  299. data/test/lib/facets/core/module/test_memoize.rb +1 -1
  300. data/test/lib/facets/core/module/test_modspace.rb +1 -1
  301. data/test/lib/facets/core/module/test_namespace.rb +1 -1
  302. data/test/lib/facets/core/module/test_nesting.rb +1 -1
  303. data/test/lib/facets/core/module/test_on_included.rb +36 -0
  304. data/test/lib/facets/core/module/test_redef.rb +1 -1
  305. data/test/lib/facets/core/module/test_redefine_method.rb +1 -1
  306. data/test/lib/facets/core/module/test_redirect.rb +1 -1
  307. data/test/lib/facets/core/module/test_redirect_method.rb +1 -1
  308. data/test/lib/facets/core/module/test_remove.rb +1 -1
  309. data/test/lib/facets/core/module/test_rename.rb +1 -1
  310. data/test/lib/facets/core/module/test_rename_method.rb +1 -1
  311. data/test/lib/facets/core/module/test_revisal.rb +1 -1
  312. data/test/lib/facets/core/module/test_shadow_method.rb +1 -1
  313. data/test/lib/facets/core/module/test_sort_on.rb +1 -1
  314. data/test/lib/facets/core/module/test_undef.rb +1 -1
  315. data/test/lib/facets/core/module/test_wrap.rb +1 -1
  316. data/test/lib/facets/core/module/test_wrap_method.rb +1 -1
  317. data/test/lib/facets/core/nilclass/{test_to_f.rb → test_blank.rb} +5 -5
  318. data/test/lib/facets/core/nilclass/test_empty.rb +1 -1
  319. data/test/lib/facets/core/nilclass/test_include.rb +1 -1
  320. data/test/lib/facets/core/nilclass/test_op_fetch.rb +1 -1
  321. data/test/lib/facets/core/nilclass/test_size.rb +1 -1
  322. data/test/lib/facets/core/nilclass/test_to_h.rb +1 -1
  323. data/test/lib/facets/core/{float → numeric}/test_approx.rb +4 -3
  324. data/test/lib/facets/core/numeric/test_ceil_multiple.rb +1 -1
  325. data/test/lib/facets/core/numeric/test_succ.rb +1 -1
  326. data/test/lib/facets/core/numeric/test_to_b.rb +1 -1
  327. data/test/lib/facets/core/ostruct/test___merge__.rb +1 -1
  328. data/test/lib/facets/core/ostruct/test___update__.rb +1 -1
  329. data/test/lib/facets/core/ostruct/test_op_fetch.rb +1 -1
  330. data/test/lib/facets/core/ostruct/test_op_store.rb +1 -1
  331. data/test/lib/facets/core/proc/test_compose.rb +1 -1
  332. data/test/lib/facets/core/proc/test_to_method.rb +1 -1
  333. data/test/lib/facets/core/range/test_to_r.rb +1 -1
  334. data/test/lib/facets/core/range/test_to_range.rb +1 -1
  335. data/test/lib/facets/core/range/test_umbrella.rb +1 -1
  336. data/test/lib/facets/core/range/test_within.rb +1 -1
  337. data/test/lib/facets/core/regexp/test_arity.rb +1 -1
  338. data/test/lib/facets/core/regexp/test_to_re.rb +1 -1
  339. data/test/lib/facets/core/regexp/test_to_regexp.rb +1 -1
  340. data/test/lib/facets/core/string/self/test_interpolate.rb +1 -1
  341. data/test/lib/facets/core/string/self/test_patterns.rb +1 -1
  342. data/test/lib/facets/core/string/self/test_rand_letter.rb +1 -1
  343. data/test/lib/facets/core/string/test_align_center.rb +1 -1
  344. data/test/lib/facets/core/string/test_at_rand.rb +1 -1
  345. data/test/lib/facets/core/string/test_basename.rb +1 -1
  346. data/test/lib/facets/core/string/test_blank.rb +1 -1
  347. data/test/lib/facets/core/string/test_bracket.rb +1 -1
  348. data/test/lib/facets/core/string/test_camelcase.rb +1 -1
  349. data/test/lib/facets/core/string/test_camelize.rb +1 -1
  350. data/test/lib/facets/core/string/test_capitalized.rb +1 -1
  351. data/test/lib/facets/core/string/test_chars.rb +1 -1
  352. data/test/lib/facets/core/string/test_cmp.rb +1 -1
  353. data/test/lib/facets/core/string/test_demodulize.rb +1 -1
  354. data/test/lib/facets/core/string/test_downcase.rb +1 -1
  355. data/test/lib/facets/core/string/test_dresner.rb +1 -1
  356. data/test/lib/facets/core/string/test_each_char.rb +1 -1
  357. data/test/lib/facets/core/string/test_each_word.rb +1 -1
  358. data/test/lib/facets/core/string/test_first.rb +1 -1
  359. data/test/lib/facets/core/string/test_fold.rb +1 -1
  360. data/test/lib/facets/core/string/test_frequency.rb +1 -1
  361. data/test/lib/facets/core/string/test_humanize.rb +1 -1
  362. data/test/lib/facets/core/string/test_indent.rb +1 -1
  363. data/test/lib/facets/core/string/test_index_all.rb +1 -1
  364. data/test/lib/facets/core/string/test_last.rb +1 -1
  365. data/test/lib/facets/core/string/test_line_wrap.rb +1 -1
  366. data/test/lib/facets/core/string/test_lines.rb +1 -1
  367. data/test/lib/facets/core/string/test_lowercase.rb +1 -1
  368. data/test/lib/facets/core/string/test_margin.rb +1 -1
  369. data/test/lib/facets/core/string/test_methodize.rb +1 -1
  370. data/test/lib/facets/core/string/test_modulize.rb +1 -1
  371. data/test/lib/facets/core/string/test_mscan.rb +1 -1
  372. data/test/lib/facets/core/string/test_natcmp.rb +1 -1
  373. data/test/lib/facets/core/string/test_nchar.rb +1 -1
  374. data/test/lib/facets/core/string/test_pathize.rb +1 -1
  375. data/test/lib/facets/core/string/test_pop.rb +1 -1
  376. data/test/lib/facets/core/string/test_probability.rb +1 -1
  377. data/test/lib/facets/core/string/test_push.rb +1 -1
  378. data/test/lib/facets/core/string/test_quote.rb +1 -1
  379. data/test/lib/facets/core/string/test_rand_byte.rb +1 -1
  380. data/test/lib/facets/core/string/test_rand_index.rb +1 -1
  381. data/test/lib/facets/core/string/test_range.rb +1 -1
  382. data/test/lib/facets/core/string/test_range_all.rb +1 -1
  383. data/test/lib/facets/core/string/test_range_of_line.rb +1 -1
  384. data/test/lib/facets/core/string/test_regesc.rb +1 -1
  385. data/test/lib/facets/core/string/test_shatter.rb +1 -1
  386. data/test/lib/facets/core/string/test_shift.rb +1 -1
  387. data/test/lib/facets/core/string/test_shuffle.rb +1 -1
  388. data/test/lib/facets/core/string/test_similarity.rb +1 -1
  389. data/test/lib/facets/core/string/test_singular.rb +1 -1
  390. data/test/lib/facets/core/string/test_slap.rb +1 -1
  391. data/test/lib/facets/core/string/test_soundex.rb +1 -1
  392. data/test/lib/facets/core/string/test_succ.rb +1 -1
  393. data/test/lib/facets/core/string/test_to_a.rb +1 -1
  394. data/test/lib/facets/core/string/test_to_arr.rb +1 -1
  395. data/test/lib/facets/core/string/test_to_b.rb +1 -1
  396. data/test/lib/facets/core/string/test_to_const.rb +1 -1
  397. data/test/lib/facets/core/string/test_to_date.rb +1 -1
  398. data/test/lib/facets/core/string/test_to_proc.rb +1 -1
  399. data/test/lib/facets/core/string/test_to_re.rb +1 -1
  400. data/test/lib/facets/core/string/test_to_time.rb +1 -1
  401. data/test/lib/facets/core/string/test_unix_crypt.rb +1 -1
  402. data/test/lib/facets/core/string/test_unpack.rb +1 -1
  403. data/test/lib/facets/core/string/test_unshift.rb +1 -1
  404. data/test/lib/facets/core/string/test_upcase.rb +1 -1
  405. data/test/lib/facets/core/string/test_whitespace.rb +1 -1
  406. data/test/lib/facets/core/string/test_word_filter.rb +1 -1
  407. data/test/lib/facets/core/string/test_word_wrap.rb +1 -1
  408. data/test/lib/facets/core/string/test_words.rb +1 -1
  409. data/test/lib/facets/core/symbol/test_camelcase.rb +1 -1
  410. data/test/lib/facets/core/symbol/test_camelize.rb +1 -1
  411. data/test/lib/facets/core/symbol/test_capitalize.rb +1 -1
  412. data/test/lib/facets/core/symbol/test_capitalized.rb +1 -1
  413. data/test/lib/facets/core/symbol/test_downcase.rb +1 -1
  414. data/test/lib/facets/core/symbol/test_not.rb +1 -1
  415. data/test/lib/facets/core/symbol/test_pad.rb +1 -1
  416. data/test/lib/facets/core/symbol/test_succ.rb +1 -1
  417. data/test/lib/facets/core/symbol/test_to_const.rb +1 -1
  418. data/test/lib/facets/core/symbol/test_to_proc.rb +1 -1
  419. data/test/lib/facets/core/symbol/test_to_str.rb +1 -1
  420. data/test/lib/facets/core/symbol/test_underscore.rb +1 -1
  421. data/test/lib/facets/core/symbol/test_upcase.rb +1 -1
  422. data/test/lib/facets/core/time/test_change.rb +1 -1
  423. data/test/lib/facets/core/time/test_elapse.rb +1 -1
  424. data/test/lib/facets/core/time/test_stamp.rb +1 -1
  425. data/test/lib/facets/core/time/test_to_date.rb +1 -1
  426. data/test/lib/facets/core/time/test_to_s.rb +1 -1
  427. data/test/lib/facets/core/time/test_to_time.rb +1 -1
  428. data/test/lib/facets/more/test_annotation.rb +1 -1
  429. data/test/lib/facets/more/test_ansicode.rb +1 -1
  430. data/test/lib/facets/more/test_association.rb +1 -1
  431. data/test/lib/facets/more/test_basicobject.rb +58 -0
  432. data/test/lib/facets/more/test_bbcode.rb +1 -1
  433. data/test/lib/facets/more/test_bitmask.rb +1 -1
  434. data/test/lib/facets/more/test_bytes.rb +1 -1
  435. data/test/lib/facets/more/test_classinherit.rb +1 -1
  436. data/test/lib/facets/more/test_classmethods.rb +1 -1
  437. data/test/lib/facets/more/test_coroutine.rb +1 -1
  438. data/test/lib/facets/more/test_crypt.rb +1 -1
  439. data/test/lib/facets/more/test_dictionary.rb +1 -1
  440. data/test/lib/facets/more/test_elementor.rb +48 -0
  441. data/test/lib/facets/more/test_enumerablepass.rb +1 -1
  442. data/test/lib/facets/more/test_floatstring.rb +1 -1
  443. data/test/lib/facets/more/test_functor.rb +1 -1
  444. data/test/lib/facets/more/test_inheritor.rb +1 -1
  445. data/test/lib/facets/more/test_interval.rb +1 -1
  446. data/test/lib/facets/more/test_json.rb +232 -0
  447. data/test/lib/facets/more/test_lisp.rb +1 -1
  448. data/test/lib/facets/more/test_lisp_format.rb +1 -1
  449. data/test/lib/facets/more/test_lrucache.rb +1 -1
  450. data/test/lib/facets/more/test_mathconstants.rb +1 -1
  451. data/test/lib/facets/more/test_methodprobe.rb +1 -1
  452. data/test/lib/facets/more/test_multipliers.rb +1 -1
  453. data/test/lib/facets/more/test_multiton.rb +1 -1
  454. data/test/lib/facets/more/test_nackclass.rb +1 -1
  455. data/test/lib/facets/more/test_nilcomparable.rb +6 -2
  456. data/test/lib/facets/more/test_openobject.rb +1 -1
  457. data/test/lib/facets/more/test_overload.rb +1 -1
  458. data/test/lib/facets/more/test_paramix.rb +1 -1
  459. data/test/lib/facets/more/test_preinitialize.rb +1 -1
  460. data/test/lib/facets/more/test_promoteself.rb +1 -1
  461. data/test/lib/facets/more/test_recorder.rb +44 -0
  462. data/test/lib/facets/more/test_snapshot.rb +1 -1
  463. data/test/lib/facets/more/test_statichash.rb +1 -1
  464. data/test/lib/facets/more/test_syncarray.rb +1 -1
  465. data/test/lib/facets/more/test_synchash.rb +1 -1
  466. data/test/lib/facets/more/test_tagiterator.rb +1 -1
  467. data/test/lib/facets/more/test_timer.rb +1 -1
  468. data/test/lib/facets/more/test_times.rb +1 -1
  469. data/test/lib/facets/more/test_tuple.rb +1 -1
  470. data/test/lib/facets/more/test_typecast.rb +2 -2
  471. data/test/lib/facets/more/test_uninheritable.rb +1 -1
  472. data/test/lib/facets/more/test_units.rb +16 -10
  473. data/test/lib/facets/more/test_xoxo.rb +288 -0
  474. data/test/lib/facets/more/test_yamlstruct.rb +1 -1
  475. metadata +92 -25
  476. data/lib/facet/kernel/instance.rb +0 -1
  477. data/lib/facet/module/cattr.rb +0 -1
  478. data/lib/facet/module/cattr_accessor.rb +0 -1
  479. data/lib/facet/module/cattr_reader.rb +0 -1
  480. data/lib/facet/module/cattr_writer.rb +0 -1
  481. data/lib/facets/core/kernel/instance.rb +0 -29
  482. data/test/FIXTURE/create_file +0 -1
  483. data/test/FIXTURE/open_as_string_file +0 -1
  484. data/test/FIXTURE/read_list_file +0 -6
  485. data/test/lib/facets/core/dir/self/test_ls_r.rb +0 -52
  486. data/test/lib/facets/core/fileutils/test_wc.rb +0 -68
  487. data/test/lib/facets/core/fileutils/test_which.rb +0 -61
  488. data/test/testdir.rb +0 -8
data/setup.rb CHANGED
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env ruby
2
1
  #
3
2
  # setup.rb
4
3
  #
@@ -9,21 +8,50 @@
9
8
  # the GNU LGPL, Lesser General Public License version 2.1.
10
9
  #
11
10
 
12
- unless Enumerable.method_defined?(:map) # Ruby 1.4.6
13
- module Enumerable
14
- alias map collect
15
- end
11
+ #############################
12
+ # Forked from version 3.2.1 #
13
+ # #
14
+ # -trans #
15
+ #############################
16
+
17
+ # CHANGE - No longer need to support 1.4.6 or 1.6 versions of Ruby.
18
+
19
+ # unless Enumerable.method_defined?(:map) # Ruby 1.4.6
20
+ # module Enumerable
21
+ # alias map collect
22
+ # end
23
+ # end
24
+
25
+ # unless File.respond_to?(:read) # Ruby 1.6
26
+ # def File.read(fname)
27
+ # open(fname) {|f|
28
+ # return f.read
29
+ # }
30
+ # end
31
+ # end
32
+
33
+ # CHANGE - Needed to install within an abitrary root dir.
34
+ # This is hack! B/c setup.rb has become spegetti code,
35
+ # I am forced to do this hack. Setup.rb should be re-writ.
36
+ # I would use package.rb instead but
37
+ # it lacks hooks and extension compilation. But we'll keep
38
+ # an eye on that one for the future. -trans.
39
+
40
+ $setup_install_root = nil
41
+ ARGV.each{ |a|
42
+ if md = /--root=(.*)/.match( a )
43
+ $setup_install_root = md[1]
44
+ end
45
+ }
46
+ if $setup_install_root
47
+ ARGV.delete("--root=#{$setup_install_root}")
48
+ $setup_install_root = File.expand_path($setup_install_root)
49
+ puts "(root=#{$setup_install_root})"
16
50
  end
17
51
 
18
- unless File.respond_to?(:read) # Ruby 1.6
19
- def File.read(fname)
20
- open(fname) {|f|
21
- return f.read
22
- }
23
- end
24
- end
52
+ # Windows?
25
53
 
26
- unless Errno.const_defined?(:ENOTEMPTY) # Windows?
54
+ unless Errno.const_defined?(:ENOTEMPTY)
27
55
  module Errno
28
56
  class ENOTEMPTY
29
57
  # We do not raise this exception, implementation is not needed.
@@ -56,25 +84,16 @@ class ConfigTable
56
84
  @config_opt = nil
57
85
  @verbose = true
58
86
  @no_harm = false
59
- @libsrc_pattern = '*.rb'
60
87
  end
61
88
 
62
89
  attr_accessor :install_prefix
63
90
  attr_accessor :config_opt
64
91
 
65
- attr_writer :verbose
92
+ def verbose=(x) @verbose = x end
93
+ def verbose?() @verbose end
66
94
 
67
- def verbose?
68
- @verbose
69
- end
70
-
71
- attr_writer :no_harm
72
-
73
- def no_harm?
74
- @no_harm
75
- end
76
-
77
- attr_accessor :libsrc_pattern
95
+ def no_harm=(x) @no_harm = x end
96
+ def no_harm?() @no_harm end
78
97
 
79
98
  def [](key)
80
99
  lookup(key).resolve(self)
@@ -118,9 +137,7 @@ class ConfigTable
118
137
  end
119
138
  end
120
139
 
121
- def savefile
122
- '.config'
123
- end
140
+ def savefile() '.config' end
124
141
 
125
142
  def load_savefile
126
143
  begin
@@ -143,124 +160,126 @@ class ConfigTable
143
160
  end
144
161
 
145
162
  def load_standard_entries
146
- standard_entries(@rbconfig).each do |ent|
163
+ #standard_entries(@rbconfig).each do |ent|
164
+ standard_entries.each do |ent|
147
165
  add ent
148
166
  end
149
167
  end
150
168
 
151
- def standard_entries(rbconfig)
152
- c = rbconfig
169
+ def standard_entries #(rbconfig)
170
+ rbconfig = @rbconfig
153
171
 
154
- rubypath = c['bindir'] + '/' + c['ruby_install_name']
172
+ rubypath = File.join(rbconfig['bindir'], rbconfig['ruby_install_name'] + rbconfig['EXEEXT'])
155
173
 
156
- major = c['MAJOR'].to_i
157
- minor = c['MINOR'].to_i
158
- teeny = c['TEENY'].to_i
174
+ major = rbconfig['MAJOR'].to_i
175
+ minor = rbconfig['MINOR'].to_i
176
+ teeny = rbconfig['TEENY'].to_i
159
177
  version = "#{major}.#{minor}"
160
178
 
161
- # ruby ver. >= 1.4.4?
162
- newpath_p = ((major >= 2) or
163
- ((major == 1) and
164
- ((minor >= 5) or
165
- ((minor == 4) and (teeny >= 4)))))
179
+ # CHANGE Do not need to support these old versions any more.
166
180
 
167
- if c['rubylibdir']
181
+ # # ruby ver. >= 1.4.4?
182
+ # newpath_p = ((major >= 2) or
183
+ # ((major == 1) and
184
+ # ((minor >= 5) or
185
+ # ((minor == 4) and (teeny >= 4)))))
186
+
187
+ #if c['rubylibdir']
168
188
  # V > 1.6.3
169
- libruby = "#{c['prefix']}/lib/ruby"
170
- librubyver = c['rubylibdir']
171
- librubyverarch = c['archdir']
172
- siteruby = c['sitedir']
173
- siterubyver = c['sitelibdir']
174
- siterubyverarch = c['sitearchdir']
175
- elsif newpath_p
176
- # 1.4.4 <= V <= 1.6.3
177
- libruby = "#{c['prefix']}/lib/ruby"
178
- librubyver = "#{c['prefix']}/lib/ruby/#{version}"
179
- librubyverarch = "#{c['prefix']}/lib/ruby/#{version}/#{c['arch']}"
180
- siteruby = c['sitedir']
181
- siterubyver = "$siteruby/#{version}"
182
- siterubyverarch = "$siterubyver/#{c['arch']}"
183
- else
184
- # V < 1.4.4
185
- libruby = "#{c['prefix']}/lib/ruby"
186
- librubyver = "#{c['prefix']}/lib/ruby/#{version}"
187
- librubyverarch = "#{c['prefix']}/lib/ruby/#{version}/#{c['arch']}"
188
- siteruby = "#{c['prefix']}/lib/ruby/#{version}/site_ruby"
189
- siterubyver = siteruby
190
- siterubyverarch = "$siterubyver/#{c['arch']}"
191
- end
189
+
190
+ root = '/'
191
+ prefix = rbconfig['prefix']
192
+
193
+ libruby = "#{prefix}/lib/ruby"
194
+ librubyver = rbconfig['rubylibdir']
195
+ librubyverarch = rbconfig['archdir']
196
+ siteruby = rbconfig['sitedir']
197
+ siterubyver = rbconfig['sitelibdir']
198
+ siterubyverarch = rbconfig['sitearchdir']
199
+
200
+ bindir = paramize(rbconfig['bindir'])
201
+ libdir = paramize(rbconfig['libdir'])
202
+ datadir = paramize(rbconfig['datadir'])
203
+ mandir = paramize(rbconfig['mandir'])
204
+ sysconfdir = paramize(rbconfig['sysconfdir'])
205
+ localstatedir = paramize(rbconfig['localstatedir'])
206
+
207
+ # elsif newpath_p
208
+ # # 1.4.4 <= V <= 1.6.3
209
+ # libruby = "#{c['prefix']}/lib/ruby"
210
+ # librubyver = "#{c['prefix']}/lib/ruby/#{version}"
211
+ # librubyverarch = "#{c['prefix']}/lib/ruby/#{version}/#{c['arch']}"
212
+ # siteruby = c['sitedir']
213
+ # siterubyver = "$siteruby/#{version}"
214
+ # siterubyverarch = "$siterubyver/#{c['arch']}"
215
+ # else
216
+ # # V < 1.4.4
217
+ # libruby = "#{c['prefix']}/lib/ruby"
218
+ # librubyver = "#{c['prefix']}/lib/ruby/#{version}"
219
+ # librubyverarch = "#{c['prefix']}/lib/ruby/#{version}/#{c['arch']}"
220
+ # siteruby = "#{c['prefix']}/lib/ruby/#{version}/site_ruby"
221
+ # siterubyver = siteruby
222
+ # siterubyverarch = "$siterubyver/#{c['arch']}"
223
+ # end
224
+
192
225
  parameterize = lambda {|path|
193
- path.sub(/\A#{Regexp.quote(c['prefix'])}/, '$prefix')
226
+ path.sub(/\A#{Regexp.quote(rbconfig['prefix'])}/, '$prefix')
194
227
  }
195
228
 
196
- if arg = c['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg }
229
+ if arg = rbconfig['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg }
197
230
  makeprog = arg.sub(/'/, '').split(/=/, 2)[1]
198
231
  else
199
232
  makeprog = 'make'
200
233
  end
201
234
 
235
+ installdir_lambda = lambda {|val, table|
236
+ case val
237
+ when 'std'
238
+ table['rbdir'] = '$librubyver'
239
+ table['sodir'] = '$librubyverarch'
240
+ when 'site'
241
+ table['rbdir'] = '$siterubyver'
242
+ table['sodir'] = '$siterubyverarch'
243
+ when 'home'
244
+ setup_rb_error '$HOME was not set' unless ENV['HOME']
245
+ table['prefix'] = ENV['HOME']
246
+ table['rbdir'] = '$libdir/ruby'
247
+ table['sodir'] = '$libdir/ruby'
248
+ end
249
+ }
250
+
202
251
  [
203
- ExecItem.new('installdirs', 'std/site/home',
204
- 'std: install under libruby; site: install under site_ruby; home: install under $HOME')\
205
- {|val, table|
206
- case val
207
- when 'std'
208
- table['rbdir'] = '$librubyver'
209
- table['sodir'] = '$librubyverarch'
210
- when 'site'
211
- table['rbdir'] = '$siterubyver'
212
- table['sodir'] = '$siterubyverarch'
213
- when 'home'
214
- setup_rb_error '$HOME was not set' unless ENV['HOME']
215
- table['prefix'] = ENV['HOME']
216
- table['rbdir'] = '$libdir/ruby'
217
- table['sodir'] = '$libdir/ruby'
218
- end
219
- },
220
- PathItem.new('prefix', 'path', c['prefix'],
221
- 'path prefix of target environment'),
222
- PathItem.new('bindir', 'path', parameterize.call(c['bindir']),
223
- 'the directory for commands'),
224
- PathItem.new('libdir', 'path', parameterize.call(c['libdir']),
225
- 'the directory for libraries'),
226
- PathItem.new('datadir', 'path', parameterize.call(c['datadir']),
227
- 'the directory for shared data'),
228
- PathItem.new('mandir', 'path', parameterize.call(c['mandir']),
229
- 'the directory for man pages'),
230
- PathItem.new('sysconfdir', 'path', parameterize.call(c['sysconfdir']),
231
- 'the directory for system configuration files'),
232
- PathItem.new('localstatedir', 'path', parameterize.call(c['localstatedir']),
233
- 'the directory for local state data'),
234
- PathItem.new('libruby', 'path', libruby,
235
- 'the directory for ruby libraries'),
236
- PathItem.new('librubyver', 'path', librubyver,
237
- 'the directory for standard ruby libraries'),
238
- PathItem.new('librubyverarch', 'path', librubyverarch,
239
- 'the directory for standard ruby extensions'),
240
- PathItem.new('siteruby', 'path', siteruby,
241
- 'the directory for version-independent aux ruby libraries'),
242
- PathItem.new('siterubyver', 'path', siterubyver,
243
- 'the directory for aux ruby libraries'),
244
- PathItem.new('siterubyverarch', 'path', siterubyverarch,
245
- 'the directory for aux ruby binaries'),
246
- PathItem.new('rbdir', 'path', '$siterubyver',
247
- 'the directory for ruby scripts'),
248
- PathItem.new('sodir', 'path', '$siterubyverarch',
249
- 'the directory for ruby extentions'),
250
- PathItem.new('rubypath', 'path', rubypath,
251
- 'the path to set to #! line'),
252
- ProgramItem.new('rubyprog', 'name', rubypath,
253
- 'the ruby program using for installation'),
254
- ProgramItem.new('makeprog', 'name', makeprog,
255
- 'the make program to compile ruby extentions'),
256
- SelectItem.new('shebang', 'all/ruby/never', 'ruby',
257
- 'shebang line (#!) editing mode'),
258
- BoolItem.new('without-ext', 'yes/no', 'no',
259
- 'does not compile/install ruby extentions')
252
+ ExecItem.new('installdirs', 'std/site/home', 'install under libruby, site_ruby or $HOME respectively', &installdir_lambda),
253
+ PathItem.new('root', 'path', root, 'root destination directory'),
254
+ PathItem.new('prefix', 'path', prefix, 'path prefix of target environment'),
255
+ PathItem.new('bindir', 'path', bindir, 'the directory for commands'),
256
+ PathItem.new('libdir', 'path', libdir, 'the directory for libraries'),
257
+ PathItem.new('datadir', 'path', datadir, 'the directory for shared data'),
258
+ PathItem.new('mandir', 'path', mandir, 'the directory for man pages'),
259
+ PathItem.new('sysconfdir', 'path', sysconfdir, 'the directory for system configuration files'),
260
+ PathItem.new('localstatedir', 'path', localstatedir, 'the directory for local state data'),
261
+ PathItem.new('libruby', 'path', libruby, 'the directory for ruby libraries'),
262
+ PathItem.new('librubyver', 'path', librubyver, 'the directory for standard ruby libraries'),
263
+ PathItem.new('librubyverarch', 'path', librubyverarch, 'the directory for standard ruby extensions'),
264
+ PathItem.new('siteruby', 'path', siteruby, 'the directory for version-independent aux ruby libraries'),
265
+ PathItem.new('siterubyver', 'path', siterubyver, 'the directory for aux ruby libraries'),
266
+ PathItem.new('siterubyverarch', 'path', siterubyverarch, 'the directory for aux ruby binaries'),
267
+ PathItem.new('rbdir', 'path', '$siterubyver', 'the directory for ruby scripts'),
268
+ PathItem.new('sodir', 'path', '$siterubyverarch', 'the directory for ruby extentions'),
269
+ PathItem.new('rubypath', 'path', rubypath, 'the path to set to #! line'),
270
+ ProgramItem.new('rubyprog', 'name', rubypath, 'the ruby program using for installation'),
271
+ ProgramItem.new('makeprog', 'name', makeprog, 'the make program to compile ruby extentions'),
272
+ SelectItem.new('shebang', 'all/ruby/never', 'ruby', 'shebang line (#!) editing mode'),
273
+ BoolItem.new('without-ext', 'yes/no', 'no', 'does not compile/install ruby extentions')
260
274
  ]
261
275
  end
262
276
  private :standard_entries
263
277
 
278
+ def paramize( path )
279
+ path.sub(/\A#{Regexp.quote(@rbconfig['prefix'])}/, '$prefix')
280
+ end
281
+ private :paramize
282
+
264
283
  def load_multipackage_entries
265
284
  multipackage_entries().each do |ent|
266
285
  add ent
@@ -269,10 +288,8 @@ class ConfigTable
269
288
 
270
289
  def multipackage_entries
271
290
  [
272
- PackageSelectionItem.new('with', 'name,name...', '', 'ALL',
273
- 'package names that you want to install'),
274
- PackageSelectionItem.new('without', 'name,name...', '', 'NONE',
275
- 'package names that you do not want to install')
291
+ PackageSelectionItem.new('with', 'name,name...', '', 'ALL', 'package names that you want to install'),
292
+ PackageSelectionItem.new('without', 'name,name...', '', 'NONE', 'package names that you do not want to install')
276
293
  ]
277
294
  end
278
295
  private :multipackage_entries
@@ -337,13 +354,8 @@ class ConfigTable
337
354
  "--#{@name}=#{@template}"
338
355
  end
339
356
 
340
- def value?
341
- true
342
- end
343
-
344
- def value
345
- @value
346
- end
357
+ def value? ; true ; end
358
+ def value ; @value ; end
347
359
 
348
360
  def resolve(table)
349
361
  @value.gsub(%r<\$([^/]+)>) { table[$1] }
@@ -362,9 +374,7 @@ class ConfigTable
362
374
  end
363
375
 
364
376
  class BoolItem < Item
365
- def config_type
366
- 'bool'
367
- end
377
+ def config_type() 'bool' end
368
378
 
369
379
  def help_opt
370
380
  "--#{@name}"
@@ -374,20 +384,19 @@ class ConfigTable
374
384
 
375
385
  def check(val)
376
386
  return 'yes' unless val
377
- unless /\A(y(es)?|n(o)?|t(rue)?|f(alse))\z/i =~ val
387
+ case val
388
+ when /\Ay(es)?\z/i, /\At(rue)?\z/i then 'yes'
389
+ when /\An(o)?\z/i, /\Af(alse)\z/i then 'no'
390
+ else
378
391
  setup_rb_error "config: --#{@name} accepts only yes/no for argument"
379
392
  end
380
- (/\Ay(es)?|\At(rue)/i =~ value) ? 'yes' : 'no'
381
393
  end
382
394
  end
383
395
 
384
396
  class PathItem < Item
385
- def config_type
386
- 'path'
387
- end
397
+ def config_type() 'path' end
388
398
 
389
399
  private
390
-
391
400
  def check(path)
392
401
  setup_rb_error "config: --#{@name} requires argument" unless path
393
402
  path[0,1] == '$' ? path : File.expand_path(path)
@@ -395,9 +404,7 @@ class ConfigTable
395
404
  end
396
405
 
397
406
  class ProgramItem < Item
398
- def config_type
399
- 'program'
400
- end
407
+ def config_type() 'program' end
401
408
  end
402
409
 
403
410
  class SelectItem < Item
@@ -406,12 +413,9 @@ class ConfigTable
406
413
  @ok = selection.split('/')
407
414
  end
408
415
 
409
- def config_type
410
- 'select'
411
- end
416
+ def config_type() 'select' end
412
417
 
413
418
  private
414
-
415
419
  def check(val)
416
420
  unless @ok.include?(val.strip)
417
421
  setup_rb_error "config: use --#{@name}=#{@template} (#{val})"
@@ -473,7 +477,7 @@ class ConfigTable
473
477
  end
474
478
 
475
479
  class MetaConfigEnvironment
476
- def intiailize(config, installer)
480
+ def initialize(config, installer)
477
481
  @config = config
478
482
  @installer = installer
479
483
  end
@@ -538,7 +542,9 @@ end # class ConfigTable
538
542
  module FileOperations
539
543
 
540
544
  def mkdir_p(dirname, prefix = nil)
541
- dirname = prefix + File.expand_path(dirname) if prefix
545
+ dirname = File.join(prefix, File.expand_path(dirname)) if prefix
546
+ dirname = File.join( $setup_install_root, dirname ) if $setup_install_root
547
+
542
548
  $stderr.puts "mkdir -p #{dirname}" if verbose?
543
549
  return if no_harm?
544
550
 
@@ -622,11 +628,15 @@ module FileOperations
622
628
  end
623
629
 
624
630
  def install(from, dest, mode, prefix = nil)
631
+
632
+ realdest = prefix ? File.join(prefix, File.expand_path(dest)) : dest
633
+ realdest = File.join($setup_install_root, File.expand_path(realdest)) if $setup_install_root
634
+
625
635
  $stderr.puts "install #{from} #{dest}" if verbose?
626
636
  return if no_harm?
627
637
 
628
- realdest = prefix ? prefix + File.expand_path(dest) : dest
629
638
  realdest = File.join(realdest, File.basename(from)) if File.dir?(realdest)
639
+
630
640
  str = File.binread(from)
631
641
  if diff?(str, realdest)
632
642
  verbose_off {
@@ -661,7 +671,7 @@ module FileOperations
661
671
  def ruby(*args)
662
672
  command config('rubyprog'), *args
663
673
  end
664
-
674
+
665
675
  def make(task = nil)
666
676
  command(*[config('makeprog'), task].compact)
667
677
  end
@@ -701,33 +711,14 @@ module HookScriptAPI
701
711
  @config[key] = val
702
712
  end
703
713
 
704
- #
705
714
  # srcdir/objdir (works only in the package directory)
706
- #
707
-
708
- def curr_srcdir
709
- "#{srcdir_root()}/#{relpath()}"
710
- end
711
-
712
- def curr_objdir
713
- "#{objdir_root()}/#{relpath()}"
714
- end
715
-
716
- def srcfile(path)
717
- "#{curr_srcdir()}/#{path}"
718
- end
719
715
 
720
- def srcexist?(path)
721
- File.exist?(srcfile(path))
722
- end
723
-
724
- def srcdirectory?(path)
725
- File.dir?(srcfile(path))
726
- end
727
-
728
- def srcfile?(path)
729
- File.file?(srcfile(path))
730
- end
716
+ def curr_srcdir() "#{srcdir_root()}/#{relpath()}" end
717
+ def curr_objdir() "#{objdir_root()}/#{relpath()}" end
718
+ def srcfile(path) "#{curr_srcdir()}/#{path}" end
719
+ def srcexist?(path) File.exist?(srcfile(path)) end
720
+ def srcdirectory?(path) File.dir?(srcfile(path)) end
721
+ def srcfile?(path) File.file?(srcfile(path)) end
731
722
 
732
723
  def srcentries(path = '.')
733
724
  Dir.open("#{curr_srcdir()}/#{path}") {|d|
@@ -752,7 +743,7 @@ end
752
743
 
753
744
  class ToplevelInstaller
754
745
 
755
- Version = '3.4.0'
746
+ Version = '3.4.1'
756
747
  Copyright = 'Copyright (c) 2000-2005 Minero Aoki'
757
748
 
758
749
  TASKS = [
@@ -766,8 +757,8 @@ class ToplevelInstaller
766
757
  [ 'distclean',"does `make distclean' for each extention" ]
767
758
  ]
768
759
 
769
- def ToplevelInstaller.invoke
770
- config = ConfigTable.new(load_rbconfig())
760
+ def self.invoke
761
+ config = ConfigTable.new(load_rbconfig)
771
762
  config.load_standard_entries
772
763
  config.load_multipackage_entries if multipackage?
773
764
  config.fixup
@@ -775,11 +766,11 @@ class ToplevelInstaller
775
766
  klass.new(File.dirname($0), config).invoke
776
767
  end
777
768
 
778
- def ToplevelInstaller.multipackage?
769
+ def self.multipackage?
779
770
  File.dir?(File.dirname($0) + '/packages')
780
771
  end
781
772
 
782
- def ToplevelInstaller.load_rbconfig
773
+ def self.load_rbconfig
783
774
  if arg = ARGV.detect {|arg| /\A--rbconfig=/ =~ arg }
784
775
  ARGV.delete(arg)
785
776
  load File.expand_path(arg.split(/=/, 2)[1])
@@ -790,6 +781,7 @@ class ToplevelInstaller
790
781
  ::Config::CONFIG
791
782
  end
792
783
 
784
+
793
785
  def initialize(ardir_root, config)
794
786
  @ardir = File.expand_path(ardir_root)
795
787
  @config = config
@@ -828,7 +820,7 @@ class ToplevelInstaller
828
820
  __send__ "exec_#{task}"
829
821
  end
830
822
  end
831
-
823
+
832
824
  def run_metaconfigs
833
825
  @config.load_script "#{@ardir}/metaconfig"
834
826
  end
@@ -841,17 +833,9 @@ class ToplevelInstaller
841
833
  # Hook Script API bases
842
834
  #
843
835
 
844
- def srcdir_root
845
- @ardir
846
- end
847
-
848
- def objdir_root
849
- '.'
850
- end
851
-
852
- def relpath
853
- '.'
854
- end
836
+ def srcdir_root() @ardir end
837
+ def objdir_root() '.' end
838
+ def relpath() '.' end
855
839
 
856
840
  #
857
841
  # Option Parsing
@@ -893,6 +877,7 @@ class ToplevelInstaller
893
877
 
894
878
  def parsearg_no_options
895
879
  unless ARGV.empty?
880
+ task = caller(0).first.slice(%r<`parsearg_(\w+)'>, 1)
896
881
  setup_rb_error "#{task}: unknown options: #{ARGV.join(' ')}"
897
882
  end
898
883
  end
@@ -980,6 +965,7 @@ class ToplevelInstaller
980
965
  out.puts
981
966
  out.puts 'Options for INSTALL:'
982
967
  out.printf fmt, '--no-harm', 'only display what to do if given', 'off'
968
+ out.printf fmt, '--root=path', 'install root directory (effects all paths)', '/'
983
969
  out.printf fmt, '--prefix=path', 'install path prefix', ''
984
970
  out.puts
985
971
  end
@@ -1174,21 +1160,15 @@ class Installer
1174
1160
  "#<#{self.class} #{File.basename(@srcdir)}>"
1175
1161
  end
1176
1162
 
1163
+ def noop(rel) ; end
1164
+
1177
1165
  #
1178
1166
  # Hook Script API base methods
1179
1167
  #
1180
1168
 
1181
- def srcdir_root
1182
- @srcdir
1183
- end
1184
-
1185
- def objdir_root
1186
- @objdir
1187
- end
1188
-
1189
- def relpath
1190
- @currdir
1191
- end
1169
+ def srcdir_root() @srcdir end
1170
+ def objdir_root() @objdir end
1171
+ def relpath() @currdir end
1192
1172
 
1193
1173
  #
1194
1174
  # Config Access
@@ -1221,29 +1201,21 @@ class Installer
1221
1201
  exec_task_traverse 'config'
1222
1202
  end
1223
1203
 
1224
- def config_dir_bin(rel)
1225
- end
1226
-
1227
- def config_dir_lib(rel)
1228
- end
1229
-
1230
- def config_dir_man(rel)
1231
- end
1204
+ alias config_dir_bin noop
1205
+ alias config_dir_lib noop
1232
1206
 
1233
1207
  def config_dir_ext(rel)
1234
1208
  extconf if extdir?(curr_srcdir())
1235
1209
  end
1236
1210
 
1211
+ alias config_dir_data noop
1212
+ alias config_dir_conf noop
1213
+ alias config_dir_man noop
1214
+
1237
1215
  def extconf
1238
1216
  ruby "#{curr_srcdir()}/extconf.rb", *@config.config_opt
1239
1217
  end
1240
1218
 
1241
- def config_dir_data(rel)
1242
- end
1243
-
1244
- def config_dir_conf(rel)
1245
- end
1246
-
1247
1219
  #
1248
1220
  # TASK setup
1249
1221
  #
@@ -1254,43 +1226,89 @@ class Installer
1254
1226
 
1255
1227
  def setup_dir_bin(rel)
1256
1228
  files_of(curr_srcdir()).each do |fname|
1257
- adjust_shebang "#{curr_srcdir()}/#{fname}"
1229
+ update_shebang_line "#{curr_srcdir()}/#{fname}"
1258
1230
  end
1259
1231
  end
1260
1232
 
1261
- def adjust_shebang(path)
1233
+ alias setup_dir_lib noop
1234
+
1235
+ def setup_dir_ext(rel)
1236
+ make if extdir?(curr_srcdir())
1237
+ end
1238
+
1239
+ alias setup_dir_data noop
1240
+ alias setup_dir_conf noop
1241
+ alias setup_dir_man noop
1242
+
1243
+ def update_shebang_line(path)
1262
1244
  return if no_harm?
1245
+ return if config('shebang') == 'never'
1246
+ old = Shebang.load(path)
1247
+ if old
1248
+ $stderr.puts "warning: #{path}: Shebang line includes too many args. It is not portable and your program may not work." if old.args.size > 1
1249
+ new = new_shebang(old)
1250
+ return if new.to_s == old.to_s
1251
+ else
1252
+ return unless config('shebang') == 'all'
1253
+ new = Shebang.new(config('rubypath'))
1254
+ end
1255
+ $stderr.puts "updating shebang: #{File.basename(path)}" if verbose?
1256
+ open_atomic_writer(path) {|output|
1257
+ File.open(path, 'rb') {|f|
1258
+ f.gets if old # discard
1259
+ output.puts new.to_s
1260
+ output.print f.read
1261
+ }
1262
+ }
1263
+ end
1264
+
1265
+ def new_shebang(old)
1266
+ if /\Aruby/ =~ File.basename(old.cmd)
1267
+ Shebang.new(config('rubypath'), old.args)
1268
+ elsif File.basename(old.cmd) == 'env' and old.args.first == 'ruby'
1269
+ Shebang.new(config('rubypath'), old.args[1..-1])
1270
+ else
1271
+ return old unless config('shebang') == 'all'
1272
+ Shebang.new(config('rubypath'))
1273
+ end
1274
+ end
1275
+
1276
+ def open_atomic_writer(path, &block)
1263
1277
  tmpfile = File.basename(path) + '.tmp'
1264
1278
  begin
1265
- File.open(path, 'rb') {|r|
1266
- first = r.gets
1267
- return unless File.basename(first.sub(/\A\#!/, '').split[0].to_s) == 'ruby'
1268
- $stderr.puts "adjusting shebang: #{File.basename(path)}" if verbose?
1269
- File.open(tmpfile, 'wb') {|w|
1270
- w.print first.sub(/\A\#!\s*\S+/, '#! ' + config('rubypath'))
1271
- w.write r.read
1272
- }
1273
- }
1274
- move_file tmpfile, File.basename(path)
1279
+ File.open(tmpfile, 'wb', &block)
1280
+ File.rename tmpfile, File.basename(path)
1275
1281
  ensure
1276
1282
  File.unlink tmpfile if File.exist?(tmpfile)
1277
1283
  end
1278
1284
  end
1279
1285
 
1280
- def setup_dir_lib(rel)
1281
- end
1286
+ class Shebang
1287
+ def Shebang.load(path)
1288
+ line = nil
1289
+ File.open(path) {|f|
1290
+ line = f.gets
1291
+ }
1292
+ return nil unless /\A#!/ =~ line
1293
+ parse(line)
1294
+ end
1282
1295
 
1283
- def setup_dir_man(rel)
1284
- end
1296
+ def Shebang.parse(line)
1297
+ cmd, *args = *line.strip.sub(/\A\#!/, '').split(' ')
1298
+ new(cmd, args)
1299
+ end
1285
1300
 
1286
- def setup_dir_ext(rel)
1287
- make if extdir?(curr_srcdir())
1288
- end
1301
+ def initialize(cmd, args = [])
1302
+ @cmd = cmd
1303
+ @args = args
1304
+ end
1289
1305
 
1290
- def setup_dir_data(rel)
1291
- end
1306
+ attr_reader :cmd
1307
+ attr_reader :args
1292
1308
 
1293
- def setup_dir_conf(rel)
1309
+ def to_s
1310
+ "#! #{@cmd}" + (@args.empty? ? '' : " #{@args.join(' ')}")
1311
+ end
1294
1312
  end
1295
1313
 
1296
1314
  #
@@ -1307,7 +1325,7 @@ class Installer
1307
1325
  end
1308
1326
 
1309
1327
  def install_dir_lib(rel)
1310
- install_files rubyscripts(), "#{config('rbdir')}/#{rel}", 0644
1328
+ install_files libfiles(), "#{config('rbdir')}/#{rel}", 0644
1311
1329
  end
1312
1330
 
1313
1331
  def install_dir_ext(rel)
@@ -1333,13 +1351,14 @@ class Installer
1333
1351
 
1334
1352
  def install_files(list, dest, mode)
1335
1353
  mkdir_p dest, @config.install_prefix
1354
+ #mkdir_p dest, offset_dir
1336
1355
  list.each do |fname|
1337
1356
  install fname, dest, mode, @config.install_prefix
1338
1357
  end
1339
1358
  end
1340
1359
 
1341
- def rubyscripts
1342
- glob_select(@config.libsrc_pattern, targetfiles())
1360
+ def libfiles
1361
+ glob_reject(%w(*.y *.output), targetfiles())
1343
1362
  end
1344
1363
 
1345
1364
  def rubyextentions(dir)
@@ -1417,7 +1436,11 @@ class Installer
1417
1436
  return
1418
1437
  end
1419
1438
  $stderr.puts 'Running tests...' if verbose?
1420
- require 'test/unit'
1439
+ begin
1440
+ require 'test/unit'
1441
+ rescue LoadError
1442
+ setup_rb_error 'test/unit cannot loaded. You need Ruby 1.8 or later to invoke this task.'
1443
+ end
1421
1444
  runner = Test::Unit::AutoRunner.new(true)
1422
1445
  runner.to_run << TESTDIR
1423
1446
  runner.run
@@ -1433,23 +1456,17 @@ class Installer
1433
1456
  rm_f 'InstalledFiles'
1434
1457
  end
1435
1458
 
1436
- def clean_dir_bin(rel)
1437
- end
1438
-
1439
- def clean_dir_lib(rel)
1440
- end
1459
+ alias clean_dir_bin noop
1460
+ alias clean_dir_lib noop
1461
+ alias clean_dir_data noop
1462
+ alias clean_dir_conf noop
1463
+ alias clean_dir_man noop
1441
1464
 
1442
1465
  def clean_dir_ext(rel)
1443
1466
  return unless extdir?(curr_srcdir())
1444
1467
  make 'clean' if File.file?('Makefile')
1445
1468
  end
1446
1469
 
1447
- def clean_dir_data(rel)
1448
- end
1449
-
1450
- def clean_dir_conf(rel)
1451
- end
1452
-
1453
1470
  #
1454
1471
  # TASK distclean
1455
1472
  #
@@ -1460,31 +1477,26 @@ class Installer
1460
1477
  rm_f 'InstalledFiles'
1461
1478
  end
1462
1479
 
1463
- def distclean_dir_bin(rel)
1464
- end
1465
-
1466
- def distclean_dir_lib(rel)
1467
- end
1480
+ alias distclean_dir_bin noop
1481
+ alias distclean_dir_lib noop
1468
1482
 
1469
1483
  def distclean_dir_ext(rel)
1470
1484
  return unless extdir?(curr_srcdir())
1471
1485
  make 'distclean' if File.file?('Makefile')
1472
1486
  end
1473
1487
 
1474
- def distclean_dir_data(rel)
1475
- end
1476
-
1477
- def distclean_dir_conf(rel)
1478
- end
1488
+ alias distclean_dir_data noop
1489
+ alias distclean_dir_conf noop
1490
+ alias distclean_dir_man noop
1479
1491
 
1480
1492
  #
1481
- # lib
1493
+ # Traversing
1482
1494
  #
1483
1495
 
1484
1496
  def exec_task_traverse(task)
1485
1497
  run_hook "pre-#{task}"
1486
1498
  FILETYPES.each do |type|
1487
- if config('without-ext') == 'yes' and type == 'ext'
1499
+ if type == 'ext' and config('without-ext') == 'yes'
1488
1500
  $stderr.puts 'skipping ext/* by user option' if verbose?
1489
1501
  next
1490
1502
  end