stupidedi 1.2.5 → 1.2.6

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 (286) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -10
  3. data/lib/ruby/array.rb +223 -185
  4. data/lib/ruby/blank.rb +50 -66
  5. data/lib/ruby/hash.rb +14 -3
  6. data/lib/ruby/instance_exec.rb +20 -17
  7. data/lib/ruby/module.rb +53 -43
  8. data/lib/ruby/object.rb +61 -56
  9. data/lib/ruby/string.rb +70 -65
  10. data/lib/ruby/symbol.rb +22 -19
  11. data/lib/ruby/to_d.rb +71 -70
  12. data/lib/ruby/to_date.rb +18 -24
  13. data/lib/ruby/to_time.rb +16 -18
  14. data/lib/ruby/try.rb +40 -38
  15. data/lib/stupidedi.rb +3 -6
  16. data/lib/stupidedi/builder/builder_dsl.rb +2 -1
  17. data/lib/stupidedi/builder/constraint_table.rb +2 -0
  18. data/lib/stupidedi/builder/generation.rb +2 -0
  19. data/lib/stupidedi/builder/identifier_stack.rb +2 -0
  20. data/lib/stupidedi/builder/instruction.rb +2 -0
  21. data/lib/stupidedi/builder/instruction_table.rb +2 -0
  22. data/lib/stupidedi/builder/navigation.rb +2 -0
  23. data/lib/stupidedi/builder/state_machine.rb +2 -0
  24. data/lib/stupidedi/builder/states/abstract_state.rb +2 -0
  25. data/lib/stupidedi/builder/states/failure_state.rb +2 -0
  26. data/lib/stupidedi/builder/states/functional_group_state.rb +2 -0
  27. data/lib/stupidedi/builder/states/initial_state.rb +2 -0
  28. data/lib/stupidedi/builder/states/interchange_state.rb +2 -0
  29. data/lib/stupidedi/builder/states/loop_state.rb +2 -0
  30. data/lib/stupidedi/builder/states/table_state.rb +2 -0
  31. data/lib/stupidedi/builder/states/transaction_set_state.rb +2 -0
  32. data/lib/stupidedi/builder/states/transmission_state.rb +2 -0
  33. data/lib/stupidedi/builder/tokenization.rb +2 -0
  34. data/lib/stupidedi/color.rb +2 -0
  35. data/lib/stupidedi/config.rb +4 -1
  36. data/lib/stupidedi/config/code_list_config.rb +5 -1
  37. data/lib/stupidedi/config/editor_config.rb +5 -1
  38. data/lib/stupidedi/config/functional_group_config.rb +5 -2
  39. data/lib/stupidedi/config/interchange_config.rb +9 -5
  40. data/lib/stupidedi/config/transaction_set_config.rb +5 -1
  41. data/lib/stupidedi/contrib/003010/guides/PS830.rb +4 -4
  42. data/lib/stupidedi/contrib/004010/guides/SH856.rb +2 -2
  43. data/lib/stupidedi/editor.rb +0 -1
  44. data/lib/stupidedi/editor/00401.rb +2 -0
  45. data/lib/stupidedi/editor/004010.rb +2 -0
  46. data/lib/stupidedi/editor/004010/N4.rb +2 -0
  47. data/lib/stupidedi/editor/00501.rb +2 -0
  48. data/lib/stupidedi/editor/005010.rb +2 -0
  49. data/lib/stupidedi/editor/005010/N4.rb +2 -0
  50. data/lib/stupidedi/editor/X12.rb +2 -0
  51. data/lib/stupidedi/editor/X222-HC837.rb +2 -0
  52. data/lib/stupidedi/editor/abstract_ed.rb +2 -0
  53. data/lib/stupidedi/editor/claim_ack.rb +2 -0
  54. data/lib/stupidedi/editor/implementation_ack.rb +2 -0
  55. data/lib/stupidedi/editor/interchange_ack.rb +2 -0
  56. data/lib/stupidedi/editor/result.rb +2 -0
  57. data/lib/stupidedi/editor/result_set.rb +2 -0
  58. data/lib/stupidedi/editor/transaction_set_ed.rb +2 -0
  59. data/lib/stupidedi/editor/transmission_ed.rb +2 -0
  60. data/lib/stupidedi/either.rb +2 -0
  61. data/lib/stupidedi/guides/004010.rb +2 -0
  62. data/lib/stupidedi/guides/004010/X091A1-HP835.rb +2 -0
  63. data/lib/stupidedi/guides/004010/element_reqs.rb +2 -0
  64. data/lib/stupidedi/guides/004010/guide_builder.rb +2 -0
  65. data/lib/stupidedi/guides/004010/segment_reqs.rb +2 -0
  66. data/lib/stupidedi/guides/005010.rb +2 -0
  67. data/lib/stupidedi/guides/005010/X214-HN277.rb +2 -0
  68. data/lib/stupidedi/guides/005010/X221-HP835.rb +2 -0
  69. data/lib/stupidedi/guides/005010/X221A1-HP835.rb +2 -0
  70. data/lib/stupidedi/guides/005010/X222-HC837P.rb +2 -0
  71. data/lib/stupidedi/guides/005010/X222A1-HC837P.rb +2 -0
  72. data/lib/stupidedi/guides/005010/X231-FA999.rb +2 -0
  73. data/lib/stupidedi/guides/005010/X231A1-FA999.rb +2 -0
  74. data/lib/stupidedi/guides/005010/element_reqs.rb +2 -0
  75. data/lib/stupidedi/guides/005010/guide_builder.rb +2 -0
  76. data/lib/stupidedi/guides/005010/segment_reqs.rb +2 -0
  77. data/lib/stupidedi/inspect.rb +1 -0
  78. data/lib/stupidedi/reader.rb +2 -1
  79. data/lib/stupidedi/reader/input.rb +2 -0
  80. data/lib/stupidedi/reader/input/abstract_input.rb +2 -1
  81. data/lib/stupidedi/reader/input/delegated_input.rb +2 -1
  82. data/lib/stupidedi/reader/input/file_input.rb +2 -0
  83. data/lib/stupidedi/reader/position.rb +2 -0
  84. data/lib/stupidedi/reader/result.rb +2 -0
  85. data/lib/stupidedi/reader/segment_dict.rb +2 -0
  86. data/lib/stupidedi/reader/separators.rb +2 -0
  87. data/lib/stupidedi/reader/stream_reader.rb +2 -0
  88. data/lib/stupidedi/reader/token_reader.rb +2 -0
  89. data/lib/stupidedi/reader/tokens/component_element_tok.rb +2 -0
  90. data/lib/stupidedi/reader/tokens/composite_element_tok.rb +2 -0
  91. data/lib/stupidedi/reader/tokens/repeated_element_tok.rb +2 -1
  92. data/lib/stupidedi/reader/tokens/segment_tok.rb +2 -0
  93. data/lib/stupidedi/reader/tokens/simple_element_tok.rb +2 -0
  94. data/lib/stupidedi/schema/abstract_def.rb +2 -0
  95. data/lib/stupidedi/schema/abstract_use.rb +2 -0
  96. data/lib/stupidedi/schema/code_list.rb +3 -2
  97. data/lib/stupidedi/schema/element_def.rb +2 -0
  98. data/lib/stupidedi/schema/element_req.rb +2 -0
  99. data/lib/stupidedi/schema/element_use.rb +3 -2
  100. data/lib/stupidedi/schema/functional_group_def.rb +2 -0
  101. data/lib/stupidedi/schema/interchange_def.rb +2 -0
  102. data/lib/stupidedi/schema/loop_def.rb +3 -2
  103. data/lib/stupidedi/schema/repeat_count.rb +3 -2
  104. data/lib/stupidedi/schema/segment_def.rb +2 -0
  105. data/lib/stupidedi/schema/segment_req.rb +2 -0
  106. data/lib/stupidedi/schema/segment_use.rb +4 -3
  107. data/lib/stupidedi/schema/syntax_note.rb +2 -0
  108. data/lib/stupidedi/schema/table_def.rb +2 -0
  109. data/lib/stupidedi/schema/transaction_set_def.rb +2 -0
  110. data/lib/stupidedi/sets.rb +1 -0
  111. data/lib/stupidedi/tail_call.rb +1 -0
  112. data/lib/stupidedi/thread_local.rb +1 -0
  113. data/lib/stupidedi/values/abstract_element_val.rb +2 -0
  114. data/lib/stupidedi/values/abstract_val.rb +2 -0
  115. data/lib/stupidedi/values/composite_element_val.rb +4 -3
  116. data/lib/stupidedi/values/functional_group_val.rb +3 -2
  117. data/lib/stupidedi/values/interchange_val.rb +2 -1
  118. data/lib/stupidedi/values/invalid_envelope_val.rb +3 -2
  119. data/lib/stupidedi/values/invalid_segment_val.rb +2 -1
  120. data/lib/stupidedi/values/loop_val.rb +3 -2
  121. data/lib/stupidedi/values/repeated_element_val.rb +3 -2
  122. data/lib/stupidedi/values/segment_val.rb +3 -2
  123. data/lib/stupidedi/values/segment_val_group.rb +2 -0
  124. data/lib/stupidedi/values/simple_element_val.rb +3 -2
  125. data/lib/stupidedi/values/table_val.rb +3 -2
  126. data/lib/stupidedi/values/transaction_set_val.rb +3 -2
  127. data/lib/stupidedi/values/transmission_val.rb +2 -0
  128. data/lib/stupidedi/version.rb +1 -1
  129. data/lib/stupidedi/versions/functional_groups.rb +2 -0
  130. data/lib/stupidedi/versions/functional_groups/002001.rb +2 -0
  131. data/lib/stupidedi/versions/functional_groups/002001/element_defs.rb +2 -1
  132. data/lib/stupidedi/versions/functional_groups/002001/element_reqs.rb +2 -0
  133. data/lib/stupidedi/versions/functional_groups/002001/element_types.rb +2 -0
  134. data/lib/stupidedi/versions/functional_groups/002001/element_types/date_val.rb +3 -7
  135. data/lib/stupidedi/versions/functional_groups/002001/element_types/fixnum_val.rb +5 -12
  136. data/lib/stupidedi/versions/functional_groups/002001/element_types/float_val.rb +6 -15
  137. data/lib/stupidedi/versions/functional_groups/002001/element_types/identifier_val.rb +5 -17
  138. data/lib/stupidedi/versions/functional_groups/002001/element_types/operators.rb +34 -18
  139. data/lib/stupidedi/versions/functional_groups/002001/element_types/string_val.rb +7 -17
  140. data/lib/stupidedi/versions/functional_groups/002001/element_types/time_val.rb +2 -0
  141. data/lib/stupidedi/versions/functional_groups/002001/functional_group_def.rb +2 -0
  142. data/lib/stupidedi/versions/functional_groups/002001/segment_defs.rb +2 -0
  143. data/lib/stupidedi/versions/functional_groups/002001/segment_reqs.rb +2 -0
  144. data/lib/stupidedi/versions/functional_groups/002001/syntax_notes.rb +2 -0
  145. data/lib/stupidedi/versions/functional_groups/002001/transaction_set_defs.rb +2 -0
  146. data/lib/stupidedi/versions/functional_groups/003010.rb +2 -0
  147. data/lib/stupidedi/versions/functional_groups/003010/element_defs.rb +2 -1
  148. data/lib/stupidedi/versions/functional_groups/003010/element_reqs.rb +2 -0
  149. data/lib/stupidedi/versions/functional_groups/003010/element_types.rb +2 -0
  150. data/lib/stupidedi/versions/functional_groups/003010/element_types/date_val.rb +3 -7
  151. data/lib/stupidedi/versions/functional_groups/003010/element_types/fixnum_val.rb +4 -10
  152. data/lib/stupidedi/versions/functional_groups/003010/element_types/float_val.rb +6 -14
  153. data/lib/stupidedi/versions/functional_groups/003010/element_types/identifier_val.rb +5 -17
  154. data/lib/stupidedi/versions/functional_groups/003010/element_types/operators.rb +34 -18
  155. data/lib/stupidedi/versions/functional_groups/003010/element_types/string_val.rb +7 -17
  156. data/lib/stupidedi/versions/functional_groups/003010/element_types/time_val.rb +2 -0
  157. data/lib/stupidedi/versions/functional_groups/003010/functional_group_def.rb +2 -0
  158. data/lib/stupidedi/versions/functional_groups/003010/segment_defs.rb +2 -0
  159. data/lib/stupidedi/versions/functional_groups/003010/segment_reqs.rb +2 -0
  160. data/lib/stupidedi/versions/functional_groups/003010/syntax_notes.rb +2 -0
  161. data/lib/stupidedi/versions/functional_groups/003010/transaction_set_defs.rb +2 -0
  162. data/lib/stupidedi/versions/functional_groups/003040.rb +2 -0
  163. data/lib/stupidedi/versions/functional_groups/003040/element_defs.rb +2 -1
  164. data/lib/stupidedi/versions/functional_groups/003040/element_reqs.rb +2 -0
  165. data/lib/stupidedi/versions/functional_groups/003040/element_types.rb +2 -0
  166. data/lib/stupidedi/versions/functional_groups/003040/element_types/date_val.rb +3 -7
  167. data/lib/stupidedi/versions/functional_groups/003040/element_types/fixnum_val.rb +5 -11
  168. data/lib/stupidedi/versions/functional_groups/003040/element_types/float_val.rb +6 -14
  169. data/lib/stupidedi/versions/functional_groups/003040/element_types/identifier_val.rb +5 -17
  170. data/lib/stupidedi/versions/functional_groups/003040/element_types/operators.rb +34 -18
  171. data/lib/stupidedi/versions/functional_groups/003040/element_types/string_val.rb +7 -17
  172. data/lib/stupidedi/versions/functional_groups/003040/element_types/time_val.rb +2 -0
  173. data/lib/stupidedi/versions/functional_groups/003040/functional_group_def.rb +2 -0
  174. data/lib/stupidedi/versions/functional_groups/003040/segment_defs.rb +2 -0
  175. data/lib/stupidedi/versions/functional_groups/003040/segment_reqs.rb +2 -0
  176. data/lib/stupidedi/versions/functional_groups/003040/syntax_notes.rb +2 -0
  177. data/lib/stupidedi/versions/functional_groups/003040/transaction_set_defs.rb +2 -0
  178. data/lib/stupidedi/versions/functional_groups/003050.rb +2 -0
  179. data/lib/stupidedi/versions/functional_groups/003050/element_defs.rb +2 -1
  180. data/lib/stupidedi/versions/functional_groups/003050/element_reqs.rb +2 -0
  181. data/lib/stupidedi/versions/functional_groups/003050/element_types.rb +2 -0
  182. data/lib/stupidedi/versions/functional_groups/003050/element_types/date_val.rb +3 -7
  183. data/lib/stupidedi/versions/functional_groups/003050/element_types/fixnum_val.rb +5 -11
  184. data/lib/stupidedi/versions/functional_groups/003050/element_types/float_val.rb +6 -14
  185. data/lib/stupidedi/versions/functional_groups/003050/element_types/identifier_val.rb +5 -17
  186. data/lib/stupidedi/versions/functional_groups/003050/element_types/operators.rb +34 -18
  187. data/lib/stupidedi/versions/functional_groups/003050/element_types/string_val.rb +7 -17
  188. data/lib/stupidedi/versions/functional_groups/003050/element_types/time_val.rb +2 -0
  189. data/lib/stupidedi/versions/functional_groups/003050/functional_group_def.rb +2 -0
  190. data/lib/stupidedi/versions/functional_groups/003050/segment_defs.rb +2 -0
  191. data/lib/stupidedi/versions/functional_groups/003050/segment_reqs.rb +2 -0
  192. data/lib/stupidedi/versions/functional_groups/003050/syntax_notes.rb +2 -0
  193. data/lib/stupidedi/versions/functional_groups/003050/transaction_set_defs.rb +2 -0
  194. data/lib/stupidedi/versions/functional_groups/004010.rb +2 -0
  195. data/lib/stupidedi/versions/functional_groups/004010/element_defs.rb +2 -1
  196. data/lib/stupidedi/versions/functional_groups/004010/element_reqs.rb +2 -0
  197. data/lib/stupidedi/versions/functional_groups/004010/element_types.rb +2 -0
  198. data/lib/stupidedi/versions/functional_groups/004010/element_types/date_val.rb +3 -7
  199. data/lib/stupidedi/versions/functional_groups/004010/element_types/fixnum_val.rb +5 -11
  200. data/lib/stupidedi/versions/functional_groups/004010/element_types/float_val.rb +6 -14
  201. data/lib/stupidedi/versions/functional_groups/004010/element_types/identifier_val.rb +5 -17
  202. data/lib/stupidedi/versions/functional_groups/004010/element_types/operators.rb +34 -18
  203. data/lib/stupidedi/versions/functional_groups/004010/element_types/string_val.rb +7 -17
  204. data/lib/stupidedi/versions/functional_groups/004010/element_types/time_val.rb +2 -0
  205. data/lib/stupidedi/versions/functional_groups/004010/functional_group_def.rb +2 -0
  206. data/lib/stupidedi/versions/functional_groups/004010/segment_defs.rb +2 -0
  207. data/lib/stupidedi/versions/functional_groups/004010/segment_reqs.rb +2 -0
  208. data/lib/stupidedi/versions/functional_groups/004010/syntax_notes.rb +2 -0
  209. data/lib/stupidedi/versions/functional_groups/004010/transaction_set_defs.rb +2 -0
  210. data/lib/stupidedi/versions/functional_groups/004010/transaction_set_defs/HP835.rb +2 -0
  211. data/lib/stupidedi/versions/functional_groups/005010.rb +2 -0
  212. data/lib/stupidedi/versions/functional_groups/005010/element_defs.rb +2 -0
  213. data/lib/stupidedi/versions/functional_groups/005010/element_reqs.rb +2 -0
  214. data/lib/stupidedi/versions/functional_groups/005010/element_types.rb +2 -0
  215. data/lib/stupidedi/versions/functional_groups/005010/element_types/date_val.rb +3 -7
  216. data/lib/stupidedi/versions/functional_groups/005010/element_types/fixnum_val.rb +4 -12
  217. data/lib/stupidedi/versions/functional_groups/005010/element_types/float_val.rb +6 -14
  218. data/lib/stupidedi/versions/functional_groups/005010/element_types/identifier_val.rb +5 -17
  219. data/lib/stupidedi/versions/functional_groups/005010/element_types/operators.rb +34 -18
  220. data/lib/stupidedi/versions/functional_groups/005010/element_types/string_val.rb +7 -17
  221. data/lib/stupidedi/versions/functional_groups/005010/element_types/time_val.rb +2 -0
  222. data/lib/stupidedi/versions/functional_groups/005010/functional_group_def.rb +2 -0
  223. data/lib/stupidedi/versions/functional_groups/005010/segment_defs.rb +2 -0
  224. data/lib/stupidedi/versions/functional_groups/005010/segment_reqs.rb +2 -0
  225. data/lib/stupidedi/versions/functional_groups/005010/syntax_notes.rb +2 -0
  226. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs.rb +2 -0
  227. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/FA999.rb +2 -0
  228. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HB271.rb +2 -0
  229. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HC837.rb +2 -0
  230. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HI278.rb +2 -0
  231. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HN277.rb +2 -0
  232. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HP835.rb +2 -0
  233. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HR276.rb +2 -0
  234. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HS270.rb +2 -0
  235. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/RA820.rb +2 -0
  236. data/lib/stupidedi/versions/interchanges.rb +2 -0
  237. data/lib/stupidedi/versions/interchanges/00200.rb +2 -0
  238. data/lib/stupidedi/versions/interchanges/00200/element_defs.rb +2 -1
  239. data/lib/stupidedi/versions/interchanges/00200/interchange_def.rb +2 -0
  240. data/lib/stupidedi/versions/interchanges/00200/segment_defs.rb +2 -0
  241. data/lib/stupidedi/versions/interchanges/00300.rb +2 -0
  242. data/lib/stupidedi/versions/interchanges/00300/element_defs.rb +2 -1
  243. data/lib/stupidedi/versions/interchanges/00300/interchange_def.rb +2 -0
  244. data/lib/stupidedi/versions/interchanges/00300/segment_defs.rb +2 -0
  245. data/lib/stupidedi/versions/interchanges/00400.rb +2 -0
  246. data/lib/stupidedi/versions/interchanges/00400/element_defs.rb +2 -1
  247. data/lib/stupidedi/versions/interchanges/00400/interchange_def.rb +2 -0
  248. data/lib/stupidedi/versions/interchanges/00400/segment_defs.rb +2 -0
  249. data/lib/stupidedi/versions/interchanges/00401.rb +2 -0
  250. data/lib/stupidedi/versions/interchanges/00401/element_defs.rb +2 -1
  251. data/lib/stupidedi/versions/interchanges/00401/interchange_def.rb +2 -0
  252. data/lib/stupidedi/versions/interchanges/00401/segment_defs.rb +2 -0
  253. data/lib/stupidedi/versions/interchanges/00501.rb +2 -0
  254. data/lib/stupidedi/versions/interchanges/00501/element_defs.rb +2 -1
  255. data/lib/stupidedi/versions/interchanges/00501/interchange_def.rb +2 -0
  256. data/lib/stupidedi/versions/interchanges/00501/segment_defs.rb +2 -0
  257. data/lib/stupidedi/writer/claredi.rb +2 -0
  258. data/lib/stupidedi/writer/default.rb +2 -0
  259. data/lib/stupidedi/zipper.rb +2 -0
  260. data/lib/stupidedi/zipper/abstract_cursor.rb +2 -0
  261. data/lib/stupidedi/zipper/dangling_cursor.rb +2 -0
  262. data/lib/stupidedi/zipper/edited_cursor.rb +2 -0
  263. data/lib/stupidedi/zipper/memoized_cursor.rb +2 -0
  264. data/lib/stupidedi/zipper/path.rb +2 -0
  265. data/lib/stupidedi/zipper/root_cursor.rb +2 -0
  266. data/spec/examples/integration/parsing.example +1 -0
  267. data/spec/examples/ruby/array.example +3 -2
  268. data/spec/examples/ruby/blank.example +15 -14
  269. data/spec/examples/ruby/count.example +1 -0
  270. data/spec/examples/ruby/object.example +2 -2
  271. data/spec/examples/ruby/string.example +1 -0
  272. data/spec/examples/ruby/symbol.example +2 -21
  273. data/spec/examples/ruby/to_d.example +1 -0
  274. data/spec/examples/ruby/try.example +1 -0
  275. data/spec/examples/stupidedi/reader/input/delegated_input.example +1 -0
  276. data/spec/examples/stupidedi/reader/token_reader.example +2 -1
  277. data/spec/examples/stupidedi/versions/005010/element_types/an.example +1 -0
  278. data/spec/examples/stupidedi/versions/005010/element_types/nn.example +1 -0
  279. data/spec/examples/stupidedi/versions/005010/element_types/r.example +1 -0
  280. data/spec/spec_helper.rb +3 -4
  281. data/spec/support/matchers/navigation_matchers.rb +1 -0
  282. data/spec/support/quickcheck.rb +2 -1
  283. data/spec/support/quickcheck/serialized_edi.rb +1 -0
  284. data/spec/support/rcov.rb +3 -3
  285. metadata +3 -4
  286. data/lib/ruby/enumerable.rb +0 -35
data/lib/ruby/hash.rb CHANGED
@@ -1,4 +1,15 @@
1
- class Hash
2
- alias defined_at? include?
3
- alias at []
1
+ module Stupidedi
2
+ module Refinements
3
+
4
+ refine Hash do
5
+ def defined_at?(x)
6
+ include?(x)
7
+ end
8
+
9
+ def at(x)
10
+ self[x]
11
+ end
12
+ end
13
+
14
+ end
4
15
  end
@@ -1,26 +1,29 @@
1
- class Object
1
+ module Stupidedi
2
+ module Refinements
2
3
 
3
- if RUBY_VERSION < "1.9"
4
- module InstanceExecHelper; end
5
- include InstanceExecHelper
4
+ refine Object do
5
+ if RUBY_VERSION < "1.9"
6
+ module InstanceExecHelper; end
7
+ include InstanceExecHelper
6
8
 
7
- # @see http://eigenclass.org/hiki/instance_exec
8
- def instance_exec(*args, &block)
9
- thread = Thread.current.object_id.abs
10
- object = object_id.abs
11
- mname = "__instance_exec_#{thread}_#{object}"
12
- InstanceExecHelper.module_eval { define_method(mname, &block) }
9
+ # @see http://eigenclass.org/hiki/instance_exec
10
+ def instance_exec(*args, &block)
11
+ thread = Thread.current.object_id.abs
12
+ object = object_id.abs
13
+ mname = "__instance_exec_#{thread}_#{object}"
14
+ InstanceExecHelper.module_eval { define_method(mname, &block) }
13
15
 
14
- begin
15
- __send__(mname, *args)
16
- ensure
17
- begin
18
- InstanceExecHelper.module_eval { remove_method(mname) }
19
- rescue
16
+ begin
17
+ __send__(mname, *args)
18
+ ensure
19
+ begin
20
+ InstanceExecHelper.module_eval { remove_method(mname) }
21
+ rescue
22
+ end
23
+ end
20
24
  end
21
25
  end
22
26
  end
23
27
 
24
28
  end
25
-
26
29
  end
data/lib/ruby/module.rb CHANGED
@@ -1,51 +1,61 @@
1
- class Module
1
+ module Stupidedi
2
+ module Refinements
2
3
 
3
- # Creates an abstract method
4
- #
5
- # @example
6
- # class Collection
7
- # abstract :size
8
- # abstract :add, :args => %w(item)
9
- # end
10
- #
11
- # @return [void]
12
- def abstract(name, *params)
13
- if params.last.is_a?(Hash)
14
- # abstract :method, :args => %w(a b c)
15
- params = params.last[:args]
16
- end
4
+ refine Module do
5
+ # Creates an abstract method
6
+ #
7
+ # @example
8
+ # class Collection
9
+ # abstract :size
10
+ # abstract :add, :args => %w(item)
11
+ # end
12
+ #
13
+ # @return [void]
14
+ def abstract(name, *params)
15
+ if params.last.is_a?(Hash)
16
+ # abstract :method, :args => %w(a b c)
17
+ params = params.last[:args]
18
+ end
17
19
 
18
- file, line, = Stupidedi.caller
20
+ file, line, = Stupidedi.caller
19
21
 
20
- if params.empty?
21
- class_eval(<<-RUBY, file, line.to_i - 1)
22
- def #{name}(*args)
23
- raise NoMethodError,
24
- "method \#{self.class.name}.#{name} is abstract"
22
+ if params.empty?
23
+ class_eval(<<-RUBY, file, line.to_i - 1)
24
+ def #{name}(*args)
25
+ raise NoMethodError,
26
+ "method \#{self.class.name}.#{name} is abstract"
27
+ end
28
+ RUBY
29
+ else
30
+ class_eval(<<-RUBY, file, line.to_i - 1)
31
+ def #{name}(*args)
32
+ raise NoMethodError,
33
+ "method \#{self.class.name}.#{name}(#{params.join(', ')}) is abstract"
34
+ end
35
+ RUBY
25
36
  end
26
- RUBY
27
- else
28
- class_eval(<<-RUBY, file, line.to_i - 1)
29
- def #{name}(*args)
30
- raise NoMethodError,
31
- "method \#{self.class.name}.#{name}(#{params.join(', ')}) is abstract"
37
+ end
38
+
39
+ def def_delegators(target, *methods)
40
+ file, line, = Stupidedi.caller
41
+
42
+ for m in methods
43
+ if m.to_s =~ /=$/
44
+ class_eval(<<-RUBY, file, line.to_i - 1)
45
+ def #{m}(value)
46
+ #{target}.#{m}(value)
47
+ end
48
+ RUBY
49
+ else
50
+ class_eval(<<-RUBY, file, line.to_i - 1)
51
+ def #{m}(*args, &block)
52
+ #{target}.#{m}(*args, &block)
53
+ end
54
+ RUBY
55
+ end
32
56
  end
33
- RUBY
57
+ end
34
58
  end
35
- end
36
-
37
- # Creates a method (or methods) that delegates messages to an instance
38
- # variable or another instance method.
39
- #
40
- # @example
41
- # class WrappedCollection
42
- # delegate :size, :add, :to => :@wrapped
43
- #
44
- # def initialize(wrapped)
45
- # @wrapped = wrapped
46
- # end
47
- # end
48
- #
49
- # @return [void]
50
59
 
60
+ end
51
61
  end
data/lib/ruby/object.rb CHANGED
@@ -1,63 +1,68 @@
1
- class Object
2
-
3
- # @group List Constructors
4
- #############################################################################
5
-
6
- # Prepend the item to the front of a new list
7
- #
8
- # @example
9
- # 1.cons #=> [1]
10
- # 1.cons(2.cons) #=> [1, 2]
11
- # 1.cons([0, 0, 0]) #=> [1, 0, 0, 0]
12
- #
13
- # @return [Array]
14
- def cons(array = [])
15
- [self] + array
16
- end
1
+ module Stupidedi
2
+ module Refinements
17
3
 
18
- # Append the item to rear of a new list
19
- #
20
- # @example
21
- # 1.snoc #=> [1]
22
- # 1.snoc(2.snoc) #=> [2, 1]
23
- # 1.snoc([0, 0, 0]) #=> [0, 0, 0, 1]
24
- #
25
- # @return [Array]
26
- def snoc(array = [])
27
- array + [self]
28
- end
4
+ refine Object do
5
+ # @group List Constructors
6
+ #############################################################################
29
7
 
30
- # @group Combinators
31
- #############################################################################
32
-
33
- # Yields `self` to a block argument
34
- #
35
- # @example
36
- # nil.bind{|a| a.nil? } #=> true
37
- # 100.bind{|a| a.nil? } #=> false
38
- #
39
- def bind
40
- yield self
41
- end
8
+ # Prepend the item to the front of a new list
9
+ #
10
+ # @example
11
+ # 1.cons #=> [1]
12
+ # 1.cons(2.cons) #=> [1, 2]
13
+ # 1.cons([0, 0, 0]) #=> [1, 0, 0, 0]
14
+ #
15
+ # @return [Array]
16
+ def cons(array = [])
17
+ [self] + array
18
+ end
42
19
 
43
- # Yields `self` to a side-effect block argument and return `self`
44
- #
45
- # @example:
46
- # 100.bind{|a| puts "debug: #{a}" } #=> 100
47
- #
48
- # @return self
49
- def tap
50
- yield self
51
- self
52
- end
20
+ # Append the item to rear of a new list
21
+ #
22
+ # @example
23
+ # 1.snoc #=> [1]
24
+ # 1.snoc(2.snoc) #=> [2, 1]
25
+ # 1.snoc([0, 0, 0]) #=> [0, 0, 0, 1]
26
+ #
27
+ # @return [Array]
28
+ def snoc(array = [])
29
+ array + [self]
30
+ end
31
+
32
+ # @group Combinators
33
+ #############################################################################
34
+
35
+ # Yields `self` to a block argument
36
+ #
37
+ # @example
38
+ # nil.bind{|a| a.nil? } #=> true
39
+ # 100.bind{|a| a.nil? } #=> false
40
+ #
41
+ def bind
42
+ yield self
43
+ end
44
+
45
+ # Yields `self` to a side-effect block argument and return `self`
46
+ #
47
+ # @example:
48
+ # 100.tap{|a| puts "debug: #{a}" } #=> 100
49
+ #
50
+ # @return self
51
+ def tap
52
+ yield self
53
+ self
54
+ end unless nil.respond_to?(:tap)
55
+
56
+ # @endgroup
57
+ #############################################################################
53
58
 
54
- # @endgroup
55
- #############################################################################
59
+ # Return the "eigenclass" where singleton methods reside
60
+ #
61
+ # @return [Class]
62
+ def eigenclass
63
+ class << self; self; end
64
+ end
65
+ end
56
66
 
57
- # Return the "eigenclass" where singleton methods reside
58
- #
59
- # @return [Class]
60
- def eigenclass
61
- class << self; self; end
62
67
  end
63
68
  end
data/lib/ruby/string.rb CHANGED
@@ -1,73 +1,78 @@
1
- class String
1
+ module Stupidedi
2
+ module Refinements
2
3
 
3
- # Return the one-character string at the given index
4
- #
5
- # @example
6
- # "abc".at(0) #=> "a"
7
- # "abc".at(2) #=> "c"
8
- #
9
- # @param [Integer] n zero-based index of the character to read
10
- #
11
- # @return [String]
12
- def at(n)
13
- raise ArgumentError, "n must be positive" if n < 0
14
- self[n, 1] unless n >= length
15
- end
4
+ refine String do
5
+ # Return the one-character string at the given index
6
+ #
7
+ # @example
8
+ # "abc".at(0) #=> "a"
9
+ # "abc".at(2) #=> "c"
10
+ #
11
+ # @param [Integer] n zero-based index of the character to read
12
+ #
13
+ # @return [String]
14
+ def at(n)
15
+ raise ArgumentError, "n must be positive" if n < 0
16
+ self[n, 1] unless n >= length
17
+ end
16
18
 
17
- # Return the string with `n` characters removed from the front
18
- #
19
- # @example
20
- # "abc".drop(0) #=> "abc"
21
- # "abc".drop(2) #=> "c"
22
- #
23
- # @param [Integer] n number of characters to drop (`n > 0`)
24
- #
25
- # @return [String]
26
- def drop(n)
27
- raise ArgumentError, "n must be positive" if n < 0
28
- (length >= n) ? self[n..-1] : ""
29
- end
19
+ # Return the string with `n` characters removed from the front
20
+ #
21
+ # @example
22
+ # "abc".drop(0) #=> "abc"
23
+ # "abc".drop(2) #=> "c"
24
+ #
25
+ # @param [Integer] n number of characters to drop (`n > 0`)
26
+ #
27
+ # @return [String]
28
+ def drop(n)
29
+ raise ArgumentError, "n must be positive" if n < 0
30
+ (length >= n) ? self[n..-1] : ""
31
+ end
30
32
 
31
- # Return the first `n` characters from the front
32
- #
33
- # @example
34
- # "abc".take(0) #=> ""
35
- # "abc".take(2) #=> "ab"
36
- #
37
- # @param [Integer] n number of characters to select (`n > 0`)
38
- #
39
- # @return [String]
40
- def take(n)
41
- raise ArgumentError, "n must be positive" if n < 0
42
- self[0, n]
43
- end
33
+ # Return the first `n` characters from the front
34
+ #
35
+ # @example
36
+ # "abc".take(0) #=> ""
37
+ # "abc".take(2) #=> "ab"
38
+ #
39
+ # @param [Integer] n number of characters to select (`n > 0`)
40
+ #
41
+ # @return [String]
42
+ def take(n)
43
+ raise ArgumentError, "n must be positive" if n < 0
44
+ self[0, n]
45
+ end
44
46
 
45
- # Split the string in two at the given position
46
- #
47
- # @example
48
- # "abc".split_at(0) #=> ["", "abc"]
49
- # "abc".split_at(2) #=> ["ab", "c"]
50
- #
51
- # @param [Integer] n number of characters at which to split (`n > 0`)
52
- #
53
- # @return [Array(String, String)]
54
- def split_at(n)
55
- [take(n), drop(n)]
56
- end
47
+ # Split the string in two at the given position
48
+ #
49
+ # @example
50
+ # "abc".split_at(0) #=> ["", "abc"]
51
+ # "abc".split_at(2) #=> ["ab", "c"]
52
+ #
53
+ # @param [Integer] n number of characters at which to split (`n > 0`)
54
+ #
55
+ # @return [Array(String, String)]
56
+ def split_at(n)
57
+ [take(n), drop(n)]
58
+ end
57
59
 
58
- # True if the string is long enough such that {#at} is defined for the
59
- # given `n`
60
- #
61
- # @example
62
- # "abc".defined_at?(0) #=> true
63
- # "abc".defined_at?(3) #=> false
64
- def defined_at?(n)
65
- n < length
66
- end
60
+ # True if the string is long enough such that {#at} is defined for the
61
+ # given `n`
62
+ #
63
+ # @example
64
+ # "abc".defined_at?(0) #=> true
65
+ # "abc".defined_at?(3) #=> false
66
+ def defined_at?(n)
67
+ n < length
68
+ end
69
+
70
+ # To make String compatible with the {Stupidedi::Reader::Input} interface,
71
+ # we have to define `#position`... shameful!
72
+ def position
73
+ nil
74
+ end
75
+ end
67
76
 
68
- # To make String compatible with the {Stupidedi::Reader::Input} interface,
69
- # we have to define `#position`... shameful!
70
- def position
71
- nil
72
77
  end
73
78
  end
data/lib/ruby/symbol.rb CHANGED
@@ -1,24 +1,27 @@
1
- class Symbol
1
+ module Stupidedi
2
+ module Refinements
2
3
 
3
- unless method_defined?(:to_proc)
4
- # Returns a proc that calls self on the proc's parameter
5
- #
6
- # @example
7
- # [1, 2, 3].map(&:-@) #=> [-1, -2, -3]
8
- # [-1, -2, -3].map(&:abs) #=> [1, 2, 3]
9
- #
10
- def to_proc
11
- lambda{|*args| args.head.__send__(self, *args.tail) }
4
+ refine Symbol do
5
+ # Returns a proc that calls self on the proc's parameter
6
+ #
7
+ # @example
8
+ # [1, 2, 3].map(&:-@) #=> [-1, -2, -3]
9
+ # [-1, -2, -3].map(&:abs) #=> [1, 2, 3]
10
+ #
11
+ def to_proc
12
+ lambda{|*args| args.head.__send__(self, *args.tail) }
13
+ end
14
+
15
+ # Calls self on the given receiver
16
+ #
17
+ # @example
18
+ # :to_s.call(100) #=> "100"
19
+ # :join.call([1,2,3], "-") #=> "1-2-3"
20
+ #
21
+ def call(receiver, *args)
22
+ receiver.__send__(self, *args)
23
+ end
12
24
  end
13
- end
14
25
 
15
- # Calls self on the given receiver
16
- #
17
- # @example
18
- # :to_s.call(100) #=> "100"
19
- # :join.call([1,2,3], "-") #=> "1-2-3"
20
- #
21
- def call(receiver, *args)
22
- receiver.__send__(self, *args)
23
26
  end
24
27
  end