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
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
  module TwoThousandOne
@@ -13,7 +15,7 @@ module Stupidedi
13
15
  ops.each do |op|
14
16
  class_eval(<<-RUBY, file, line.to_i - 1)
15
17
  def #{op}(&block)
16
- copy(:value => value.__send__(:#{op}, &block))
18
+ copy(:value => value.#{op}(&block))
17
19
  end
18
20
  RUBY
19
21
  end
@@ -39,17 +41,24 @@ module Stupidedi
39
41
  "must pass :coerce => :method"
40
42
  end
41
43
 
44
+ # Note that we can't test respond_to?(coerce) because coerce is
45
+ # often a refinement method, like #to_d, #to_time, etc. Currently
46
+ # respond_to? returns false on refinment methods, so we just call
47
+ # the method and assume a NoMethodError is due to coerce (hopefully
48
+ # not some other missing method)
42
49
  ops.each do |op|
43
50
  class_eval(<<-RUBY, file, line.to_i - 1)
44
51
  def #{op}(other, &block)
45
- if other.respond_to?(:#{coerce})
46
- copy(:value => value.__send__(:#{op}, other.#{coerce}, &block))
47
- elsif other.respond_to?(:coerce)
48
- me, he = other.coerce(self)
49
- copy(:value => me.__send__(:#{op}, he, &block).#{coerce})
50
- else
51
- raise TypeError,
52
- "cannot coerce \#{other.class} to \#{self.class}"
52
+ begin
53
+ copy(:value => value.#{op}(other.#{coerce}, &block))
54
+ rescue NoMethodError
55
+ begin
56
+ me, he = other.coerce(self)
57
+ copy(:value => me.#{op}(he, &block).#{coerce})
58
+ rescue NoMethodError
59
+ raise TypeError,
60
+ "cannot coerce \#{other.class} to \#{self.class}"
61
+ end
53
62
  end
54
63
  end
55
64
  RUBY
@@ -76,17 +85,24 @@ module Stupidedi
76
85
  "must pass :coerce => :method"
77
86
  end
78
87
 
88
+ # Note that we can't test respond_to?(coerce) because coerce is
89
+ # often a refinement method, like #to_d, #to_time, etc. Currently
90
+ # respond_to? returns false on refinment methods, so we just call
91
+ # the method and assume a NoMethodError is due to coerce (hopefully
92
+ # not some other missing method)
79
93
  ops.each do |op|
80
94
  class_eval(<<-RUBY, file, line.to_i - 1)
81
95
  def #{op}(other, &block)
82
- if other.respond_to?(:#{coerce})
83
- value.__send__(:#{op}, other.#{coerce}, &block)
84
- elsif other.respond_to?(:coerce)
85
- me, he = other.coerce(self)
86
- me.__send__(:#{op}, he, &block)
87
- else
88
- raise TypeError,
89
- "cannot coerce \#{other.class} to \#{self.class}"
96
+ begin
97
+ value.#{op}(other.#{coerce}, &block)
98
+ rescue NoMethodError
99
+ begin
100
+ me, he = other.coerce(self)
101
+ me.#{op}(he, &block)
102
+ rescue NoMethodError
103
+ raise TypeError,
104
+ "cannot coerce \#{other.class} to \#{self.class}"
105
+ end
90
106
  end
91
107
  end
92
108
  RUBY
@@ -101,7 +117,7 @@ module Stupidedi
101
117
  ops.each do |op|
102
118
  class_eval(<<-RUBY, file, line.to_i - 1)
103
119
  def #{op}(*args, &block)
104
- copy(:value => value.__send__(:#{op}, *args, &block))
120
+ copy(:value => value.#{op}(*args, &block))
105
121
  end
106
122
  RUBY
107
123
  end
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
  module TwoThousandOne
@@ -103,7 +105,6 @@ module Stupidedi
103
105
  include Comparable
104
106
 
105
107
  # (string any* -> any)
106
- extend Forwardable
107
108
  def_delegators :value, :to_d, :to_s, :to_f, :to_c, :to_r, :to_sym, :to_str,
108
109
  :hex, :oct, :ord, :sum, :length, :count, :index, :rindex,
109
110
  :lines, :bytes, :chars, :each, :upto, :split, :scan, :unpack,
@@ -139,12 +140,7 @@ module Stupidedi
139
140
  def coerce(other)
140
141
  # me, he = other.coerce(self)
141
142
  # me <OP> he
142
- if other.respond_to?(:to_str)
143
- return copy(:value => other.to_str), self
144
- else
145
- raise TypeError,
146
- "cannot coerce StringVal to #{other.class}"
147
- end
143
+ return copy(:value => other.to_str), self
148
144
  end
149
145
 
150
146
  def value
@@ -194,7 +190,6 @@ module Stupidedi
194
190
  attr_reader :value
195
191
 
196
192
  # (string any* -> any)
197
- extend Forwardable
198
193
  def_delegators :value, :to_d, :to_s, :to_f, :to_c, :to_r, :to_sym, :to_str,
199
194
  :hex, :oct, :ord, :sum, :length, :count, :index, :rindex,
200
195
  :lines, :bytes, :chars, :each, :upto, :split, :scan, :unpack,
@@ -236,12 +231,7 @@ module Stupidedi
236
231
  def coerce(other)
237
232
  # me, he = other.coerce(self)
238
233
  # me <OP> he
239
- if other.respond_to?(:to_str)
240
- return copy(:value => other.to_str), self
241
- else
242
- raise TypeError,
243
- "cannot coerce StringVal to #{other.class}"
244
- end
234
+ return copy(:value => other.to_str), self
245
235
  end
246
236
 
247
237
  def too_long?
@@ -379,11 +369,11 @@ module Stupidedi
379
369
  def value(object, usage, position)
380
370
  if object.blank?
381
371
  self::Empty.new(usage, position)
382
- elsif object.respond_to?(:to_s)
383
- self::NonEmpty.new(object.to_s.rstrip, usage, position)
384
372
  else
385
- self::Invalid.new(object, usage, position)
373
+ self::NonEmpty.new(object.to_s.rstrip, usage, position)
386
374
  end
375
+ rescue
376
+ self::Invalid.new(object, usage, position)
387
377
  end
388
378
 
389
379
  # @endgroup
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
  module TwoThousandOne
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
  module TwoThousandOne
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
  module TwoThousandOne
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
  module TwoThousandOne
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
  module TwoThousandOne
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
  module TwoThousandOne
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
 
@@ -1,6 +1,7 @@
1
1
  # encoding: ISO-8859-1
2
-
3
2
  module Stupidedi
3
+ using Refinements
4
+
4
5
  module Versions
5
6
  module FunctionalGroups
6
7
  module ThirtyTen
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
  module ThirtyTen
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
  module ThirtyTen
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
  module ThirtyTen
@@ -165,7 +167,6 @@ module Stupidedi
165
167
  include Comparable
166
168
 
167
169
  # (date any* -> any)
168
- extend Forwardable
169
170
  def_delegators :@value, :year, :month, :day, :cwday, :cweek, :downto, :upto,
170
171
  :step, :httpdate, :to_s, :to_i, :strftime, :iso8601, :rfc2822,
171
172
  :rfc3339, :rfc822, :leap?, :julian?, :gregorian?, :mday, :mon,
@@ -204,12 +205,7 @@ module Stupidedi
204
205
  def coerce(other)
205
206
  # me, he = other.coerce(self)
206
207
  # me <OP> he
207
- if other.respond_to?(:to_date)
208
- return DateVal.value(other, usage, position), self
209
- else
210
- raise TypeError,
211
- "cannot coerce DateVal to #{other.class}"
212
- end
208
+ return DateVal.value(other, usage, position), self
213
209
  end
214
210
 
215
211
  def valid?
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
  module ThirtyTen
@@ -193,7 +195,6 @@ module Stupidedi
193
195
  # @return [BigDecimal]
194
196
  attr_reader :value
195
197
 
196
- extend Forwardable
197
198
  def_delegators :@value, :to_i, :to_d, :to_f, :to_r, :to_c
198
199
 
199
200
 
@@ -213,12 +214,7 @@ module Stupidedi
213
214
  def coerce(other)
214
215
  # self', other' = other.coerce(self)
215
216
  # self' * other'
216
- if other.respond_to?(:to_d)
217
- return copy(:value => other.to_d), self
218
- else
219
- raise TypeError,
220
- "cannot coerce FixnumVal to #{other.class}"
221
- end
217
+ return copy(:value => other.to_d), self
222
218
  end
223
219
 
224
220
  def valid?
@@ -295,13 +291,11 @@ module Stupidedi
295
291
  def value(object, usage, position)
296
292
  if object.blank?
297
293
  self::Empty.new(usage, position)
298
- elsif object.respond_to?(:to_d)
294
+ else
299
295
  # The number of fractional digits is implied by usage.precision
300
296
  factor = 10 ** usage.definition.precision
301
297
 
302
298
  self::NonEmpty.new(object.to_d / factor, usage, position)
303
- else
304
- self::Invalid.new(object, usage, position)
305
299
  end
306
300
  rescue ArgumentError
307
301
  self::Invalid.new(object, usage, position)
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
  module ThirtyTen
@@ -182,7 +184,6 @@ module Stupidedi
182
184
  # @return [BigDecimal]
183
185
  attr_reader :value
184
186
 
185
- extend Forwardable
186
187
  def_delegators :@value, :to_i, :to_d, :to_f, :to_r, :to_c
187
188
 
188
189
  def initialize(value, usage, position)
@@ -201,12 +202,7 @@ module Stupidedi
201
202
  def coerce(other)
202
203
  # self', other' = other.coerce(self)
203
204
  # self' * other'
204
- if other.respond_to?(:to_d)
205
- return copy(:value => other.to_d), self
206
- else
207
- raise TypeError,
208
- "cannot coerce FloatVal to #{other.class}"
209
- end
205
+ return copy(:value => other.to_d), self
210
206
  end
211
207
 
212
208
  def valid?
@@ -327,15 +323,11 @@ module Stupidedi
327
323
  def value(object, usage, position)
328
324
  if object.blank?
329
325
  self::Empty.new(usage, position)
330
- elsif object.respond_to?(:to_d)
331
- begin
332
- self::NonEmpty.new(object.to_d, usage, position)
333
- rescue ArgumentError
334
- self::Invalid.new(object, usage, position)
335
- end
336
326
  else
337
- self::Invalid.new(object, usage, position)
327
+ self::NonEmpty.new(object.to_d, usage, position)
338
328
  end
329
+ rescue ArgumentError
330
+ self::Invalid.new(object, usage, position)
339
331
  end
340
332
 
341
333
  # @endgroup
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
  module ThirtyTen
@@ -144,7 +146,6 @@ module Stupidedi
144
146
  include Comparable
145
147
 
146
148
  # (string any* -> any)
147
- extend Forwardable
148
149
  def_delegators :value, :to_d, :to_s, :to_f, :to_c, :to_r, :to_sym, :to_str,
149
150
  :hex, :oct, :ord, :sum, :length, :count, :index, :rindex,
150
151
  :lines, :bytes, :chars, :each, :upto, :split, :scan, :unpack,
@@ -180,12 +181,7 @@ module Stupidedi
180
181
  def coerce(other)
181
182
  # me, he = other.coerce(self)
182
183
  # me <OP> he
183
- if other.respond_to?(:to_str)
184
- return copy(:value => other.to_str), self
185
- else
186
- raise TypeError,
187
- "cannot coerce IdentifierVal to #{other.class}"
188
- end
184
+ return copy(:value => other.to_str), self
189
185
  end
190
186
 
191
187
  def value
@@ -234,7 +230,6 @@ module Stupidedi
234
230
  # @return [String]
235
231
  attr_reader :value
236
232
  # (string any* -> any)
237
- extend Forwardable
238
233
  def_delegators :value, :to_d, :to_s, :to_f, :to_c, :to_r, :to_sym, :to_str,
239
234
  :hex, :oct, :ord, :sum, :length, :count, :index, :rindex,
240
235
  :lines, :bytes, :chars, :each, :upto, :split, :scan, :unpack,
@@ -275,12 +270,7 @@ module Stupidedi
275
270
  def coerce(other)
276
271
  # me, he = other.coerce(self)
277
272
  # me <OP> he
278
- if other.respond_to?(:to_str)
279
- return copy(:value => other.to_str), self
280
- else
281
- raise TypeError,
282
- "cannot coerce IdentifierVal to #{other.class}"
283
- end
273
+ return copy(:value => other.to_str), self
284
274
  end
285
275
 
286
276
  def valid?
@@ -346,10 +336,8 @@ module Stupidedi
346
336
  def value(object, usage, position)
347
337
  if object.blank?
348
338
  self::Empty.new(usage, position)
349
- elsif object.respond_to?(:to_s)
350
- self::NonEmpty.new(object.to_s.rstrip, usage, position)
351
339
  else
352
- self::Invalid.new(object, usage, position)
340
+ self::NonEmpty.new(object.to_s.rstrip, usage, position)
353
341
  end
354
342
  rescue
355
343
  self::Invalid.new(object, usage, position)
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
  module ThirtyTen
@@ -13,7 +15,7 @@ module Stupidedi
13
15
  ops.each do |op|
14
16
  class_eval(<<-RUBY, file, line.to_i - 1)
15
17
  def #{op}(&block)
16
- copy(:value => value.__send__(:#{op}, &block))
18
+ copy(:value => value.#{op}(&block))
17
19
  end
18
20
  RUBY
19
21
  end
@@ -39,17 +41,24 @@ module Stupidedi
39
41
  "must pass :coerce => :method"
40
42
  end
41
43
 
44
+ # Note that we can't test respond_to?(coerce) because coerce is
45
+ # often a refinement method, like #to_d, #to_time, etc. Currently
46
+ # respond_to? returns false on refinment methods, so we just call
47
+ # the method and assume a NoMethodError is due to coerce (hopefully
48
+ # not some other missing method)
42
49
  ops.each do |op|
43
50
  class_eval(<<-RUBY, file, line.to_i - 1)
44
51
  def #{op}(other, &block)
45
- if other.respond_to?(:#{coerce})
46
- copy(:value => value.__send__(:#{op}, other.#{coerce}, &block))
47
- elsif other.respond_to?(:coerce)
48
- me, he = other.coerce(self)
49
- copy(:value => me.__send__(:#{op}, he, &block).#{coerce})
50
- else
51
- raise TypeError,
52
- "cannot coerce \#{other.class} to \#{self.class}"
52
+ begin
53
+ copy(:value => value.#{op}(other.#{coerce}, &block))
54
+ rescue NoMethodError
55
+ begin
56
+ me, he = other.coerce(self)
57
+ copy(:value => me.#{op}(he, &block).#{coerce})
58
+ rescue NoMethodError
59
+ raise TypeError,
60
+ "cannot coerce \#{other.class} to \#{self.class}"
61
+ end
53
62
  end
54
63
  end
55
64
  RUBY
@@ -76,17 +85,24 @@ module Stupidedi
76
85
  "must pass :coerce => :method"
77
86
  end
78
87
 
88
+ # Note that we can't test respond_to?(coerce) because coerce is
89
+ # often a refinement method, like #to_d, #to_time, etc. Currently
90
+ # respond_to? returns false on refinment methods, so we just call
91
+ # the method and assume a NoMethodError is due to coerce (hopefully
92
+ # not some other missing method)
79
93
  ops.each do |op|
80
94
  class_eval(<<-RUBY, file, line.to_i - 1)
81
95
  def #{op}(other, &block)
82
- if other.respond_to?(:#{coerce})
83
- value.__send__(:#{op}, other.#{coerce}, &block)
84
- elsif other.respond_to?(:coerce)
85
- me, he = other.coerce(self)
86
- me.__send__(:#{op}, he, &block)
87
- else
88
- raise TypeError,
89
- "cannot coerce \#{other.class} to \#{self.class}"
96
+ begin
97
+ value.#{op}(other.#{coerce}, &block)
98
+ rescue NoMethodError
99
+ begin
100
+ me, he = other.coerce(self)
101
+ me.#{op}(he, &block)
102
+ rescue NoMethodError
103
+ raise TypeError,
104
+ "cannot coerce \#{other.class} to \#{self.class}"
105
+ end
90
106
  end
91
107
  end
92
108
  RUBY
@@ -101,7 +117,7 @@ module Stupidedi
101
117
  ops.each do |op|
102
118
  class_eval(<<-RUBY, file, line.to_i - 1)
103
119
  def #{op}(*args, &block)
104
- copy(:value => value.__send__(:#{op}, *args, &block))
120
+ copy(:value => value.#{op}(*args, &block))
105
121
  end
106
122
  RUBY
107
123
  end