stupidedi 1.2.5 → 1.2.6

Sign up to get free protection for your applications and to get access to all the features.
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