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/to_d.rb CHANGED
@@ -1,81 +1,82 @@
1
1
  require "bigdecimal"
2
2
  require "rational"
3
3
 
4
- class BigDecimal
4
+ module Stupidedi
5
+ module Refinements
5
6
 
6
- # @return [BigDecimal] self
7
- def to_d
8
- self
9
- end unless method_defined?(:to_d)
10
- end
11
-
12
- class String
13
- BIGDECIMAL = /\A[+-]? (?# optional leading sign )
14
- (?:
15
- (?:\d+\.?\d*) | (?# whole with optional decimal or ..)
16
- (?:\d*?\.?\d+) ) (?# optional whole with decimal )
17
- (?:E[+-]?\d+)? (?# optional exponent )
18
- \Z/ix
19
-
20
- # Converts the string to a BigDecimal after validating the format. If the
21
- # string does not match the pattern for a valid number, an `ArgumentError`
22
- # is raised.
23
- #
24
- # @example
25
- # "1.0".to_d #=> BigDecimal("1.0")
26
- #
27
- # @return [BigDecimal]
28
- def to_d
29
- if BIGDECIMAL =~ self
30
- BigDecimal(to_s)
31
- else
32
- raise ArgumentError, "#{inspect} is not a valid number"
7
+ refine BigDecimal do
8
+ # @return [BigDecimal] self
9
+ def to_d
10
+ self
11
+ end
33
12
  end
34
- end unless method_defined?(:to_d)
35
- end
36
-
37
- class Integer
38
13
 
39
- # Converts the integer to a BigDecimal
40
- #
41
- # @example
42
- # 10.to_d #=> BigDecimal("10")
43
- #
44
- # @return [BigDecimal]
45
- def to_d
46
- BigDecimal(to_s)
47
- end unless method_defined?(:to_d)
48
- end
14
+ refine String do
15
+ BIGDECIMAL = /\A[+-]? (?# optional leading sign )
16
+ (?:
17
+ (?:\d+\.?\d*) | (?# whole with optional decimal or ..)
18
+ (?:\d*?\.?\d+) ) (?# optional whole with decimal )
19
+ (?:E[+-]?\d+)? (?# optional exponent )
20
+ \Z/ix
49
21
 
50
- class Rational
22
+ # Converts the string to a BigDecimal after validating the format. If the
23
+ # string does not match the pattern for a valid number, an `ArgumentError`
24
+ # is raised.
25
+ #
26
+ # @example
27
+ # "1.0".to_d #=> BigDecimal("1.0")
28
+ #
29
+ # @return [BigDecimal]
30
+ def to_d
31
+ if BIGDECIMAL =~ self
32
+ BigDecimal(to_s)
33
+ else
34
+ raise ArgumentError, "#{inspect} is not a valid number"
35
+ end
36
+ end
37
+ end
51
38
 
52
- # Converts the rational to a BigDecimal
53
- #
54
- # @example
55
- # Rational(3, 4).to_d #=> BigDecimal("3") / BigDecimal("4")
56
- #
57
- # @return [BigDecimal]
58
- def to_d
59
- numerator.to_d / denominator.to_d
60
- end unless method_defined?(:to_d)
61
- end
39
+ refine Integer do
40
+ # Converts the integer to a BigDecimal
41
+ #
42
+ # @example
43
+ # 10.to_d #=> BigDecimal("10")
44
+ #
45
+ # @return [BigDecimal]
46
+ def to_d
47
+ BigDecimal(to_s)
48
+ end
49
+ end
62
50
 
63
- class Float
51
+ refine Rational do
52
+ # Converts the rational to a BigDecimal
53
+ #
54
+ # @example
55
+ # Rational(3, 4).to_d #=> BigDecimal("3") / BigDecimal("4")
56
+ #
57
+ # @return [BigDecimal]
58
+ def to_d
59
+ numerator.to_d / denominator.to_d
60
+ end
61
+ end
64
62
 
65
- # Raises a `TypeError` exception. The reason this method is defined at
66
- # all is to produce a more meaningful error than `NoSuchMethod`.
67
- #
68
- # @return [void]
69
- def to_d
70
- # The problem is there isn't a way to know the correct precision,
71
- # since there are (many) values that cannot be represented exactly
72
- # using Floats. For instance, we can't assume which value is correct
73
- #
74
- # "%0.10f" % 1.8 #=> "1.8000000000"
75
- # "%0.20f" % 1.8 #=> "1.80000000000000004441"
76
- #
77
- # The programmer should convert the Float to a String using whatever
78
- # precision he chooses, and call #to_d on the String.
79
- raise TypeError, "cannot convert Float to BigDecimal"
80
- end unless method_defined?(:to_d)
63
+ refine Float do
64
+ # Raises a `TypeError` exception. The reason this method is defined at
65
+ # all is to produce a more meaningful error than `NoSuchMethod`.
66
+ #
67
+ # @return [void]
68
+ def to_d
69
+ # The problem is there isn't a way to know the correct precision,
70
+ # since there are (many) values that cannot be represented exactly
71
+ # using Floats. For instance, we can't assume which value is correct
72
+ #
73
+ # "%0.10f" % 1.8 #=> "1.8000000000"
74
+ # "%0.20f" % 1.8 #=> "1.80000000000000004441"
75
+ #
76
+ # The programmer should convert the Float to a String using whatever
77
+ # precision he chooses, and call #to_d on the String.
78
+ raise TypeError, "cannot convert Float to BigDecimal"
79
+ end
80
+ end
81
+ end
81
82
  end
data/lib/ruby/to_date.rb CHANGED
@@ -1,33 +1,27 @@
1
- class Time
2
- unless method_defined?(:to_date)
3
- def to_date
4
- Date.civil(year, month, day)
5
- end
6
- end
1
+ module Stupidedi
2
+ module Refinements
7
3
 
8
- public :to_date
9
- end
10
-
11
- class String
12
- unless method_defined?(:to_date)
13
- def to_date
14
- Date.parse(self)
4
+ refine Time do
5
+ def to_date
6
+ Date.civil(year, month, day)
7
+ end
15
8
  end
16
- end
17
9
 
18
- public :to_date
19
- end
10
+ refine String do
11
+ def to_date
12
+ Date.parse(self)
13
+ end
14
+ end
20
15
 
21
- class Date
22
- unless method_defined?(:to_date)
23
- def to_date
24
- self
16
+ refine Date do
17
+ def to_date
18
+ self
19
+ end
25
20
  end
26
- end
27
21
 
28
- public :to_date
22
+ class << Date
23
+ public :parse
24
+ end
29
25
 
30
- class << self
31
- public :parse
32
26
  end
33
27
  end
data/lib/ruby/to_time.rb CHANGED
@@ -1,24 +1,22 @@
1
- class Time
2
- unless method_defined?(:to_time)
3
- # @return [Time]
4
- def to_time
5
- self
6
- end
7
- end
1
+ module Stupidedi
2
+ module Refinements
8
3
 
9
- public :to_time
4
+ refine Time do
5
+ # @return [Time]
6
+ def to_time
7
+ self
8
+ end
9
+ end
10
10
 
11
- class << self
12
- public :parse
13
- end
14
- end
11
+ class << Time
12
+ public :parse
13
+ end
15
14
 
16
- class String
17
- unless method_defined?(:to_time)
18
- def to_time
19
- Time.parse(self)
15
+ refine String do
16
+ def to_time
17
+ Time.parse(self)
18
+ end
20
19
  end
21
- end
22
20
 
23
- public :to_time
21
+ end
24
22
  end
data/lib/ruby/try.rb CHANGED
@@ -1,45 +1,47 @@
1
- class Object
1
+ module Stupidedi
2
+ module Refinements
3
+
4
+ refine Object do
5
+ # @group Combinators
6
+ #############################################################################
2
7
 
3
- # @group Combinators
4
- #############################################################################
5
-
6
- # Sends the arguments to `self` or yields `self` (when `self` is non-`nil`).
7
- # This is overridden by {NilClass#try}, which always returns `nil`.
8
- #
9
- # @example
10
- # "non-nil".try(&:length) #=> 7
11
- # nil.try(&:length) #=> nil
12
- #
13
- # "non-nil".try(:slice, 0, 3) #=> "non"
14
- # nil.try(:slice, 0, 3) #=> nil
15
- #
16
-
17
- def try(*args, &block)
18
- if args.empty?
19
- yield self
20
- else
21
- __send__(*args, &block)
8
+ # Sends the arguments to `self` or yields `self` (when `self` is non-`nil`).
9
+ # This is overridden by {NilClass#try}, which always returns `nil`.
10
+ #
11
+ # @example
12
+ # "non-nil".try(&:length) #=> 7
13
+ # nil.try(&:length) #=> nil
14
+ #
15
+ # "non-nil".try(:slice, 0, 3) #=> "non"
16
+ # nil.try(:slice, 0, 3) #=> nil
17
+ #
18
+ def try(*args, &block)
19
+ if args.empty?
20
+ yield self
21
+ else
22
+ __send__(*args, &block)
23
+ end
24
+ end
22
25
  end
23
- end unless method_defined?(:try)
24
26
 
25
- end
27
+ refine NilClass do
28
+ # @group Combinators
29
+ #############################################################################
26
30
 
27
- class NilClass
28
- # @group Combinators
29
- #############################################################################
30
-
31
- # Returns `nil` (when `self` is `nil`). This overrides {Object#try}
32
- #
33
- # @example
34
- # "non-nil".try(&:length) #=> 7
35
- # nil.try(&:length) #=> nil
36
- #
37
- # "non-nil".try(:slice, 0, 3) #=> "non"
38
- # nil.try(:slice, 0, 3) #=> nil
39
- #
40
- # @return nil
31
+ # Returns `nil` (when `self` is `nil`). This overrides {Object#try}
32
+ #
33
+ # @example
34
+ # "non-nil".try(&:length) #=> 7
35
+ # nil.try(&:length) #=> nil
36
+ #
37
+ # "non-nil".try(:slice, 0, 3) #=> "non"
38
+ # nil.try(:slice, 0, 3) #=> nil
39
+ #
40
+ # @return nil
41
+ def try(*args)
42
+ self
43
+ end
44
+ end
41
45
 
42
- def try(*args)
43
- self
44
46
  end
45
47
  end
data/lib/stupidedi.rb CHANGED
@@ -2,7 +2,6 @@ require "bigdecimal"
2
2
  require "time"
3
3
  require "date"
4
4
  require "set"
5
- require "forwardable"
6
5
 
7
6
  begin
8
7
  require "term/ansicolor" if $stdout.tty?
@@ -12,15 +11,11 @@ end
12
11
 
13
12
  $:.unshift(File.expand_path("..", __FILE__))
14
13
 
15
- # Monkey patches
16
-
17
- #equire "ruby/exception"
18
14
  require "ruby/symbol"
19
15
  require "ruby/object"
20
16
  require "ruby/module"
21
17
  require "ruby/array"
22
18
  require "ruby/hash"
23
- require "ruby/enumerable"
24
19
  require "ruby/string"
25
20
  require "ruby/blank"
26
21
  require "ruby/to_d"
@@ -63,7 +58,9 @@ module Stupidedi
63
58
  end
64
59
  else
65
60
  def self.caller(depth = 2)
66
- ::Kernel.caller.at(depth - 1).try(:split, ":")
61
+ if k = ::Kernel.caller.at(depth - 1)
62
+ k.split(":")
63
+ end
67
64
  end
68
65
  end
69
66
  end
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Builder
3
5
 
4
6
  class BuilderDsl
@@ -14,7 +16,6 @@ module Stupidedi
14
16
  # @return [Boolean]
15
17
  attr_writer :strict
16
18
 
17
- extend Forwardable
18
19
  def_delegators :@machine, :pretty_print, :segment, :element, :zipper, :successors, :empty?, :first?, :last?, :deterministic?
19
20
 
20
21
  def initialize(machine, strict = true)
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Builder
3
5
 
4
6
  #
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Builder
3
5
 
4
6
  module Generation
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Builder
3
5
 
4
6
  class IdentifierStack
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Builder
3
5
 
4
6
  class Instruction
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Builder
3
5
 
4
6
  class InstructionTable
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Builder
3
5
 
4
6
  module Navigation
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Builder
3
5
 
4
6
  class StateMachine
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Builder
3
5
 
4
6
  class AbstractState