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 ThirtyTen
@@ -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,
@@ -138,12 +139,7 @@ module Stupidedi
138
139
  def coerce(other)
139
140
  # me, he = other.coerce(self)
140
141
  # me <OP> he
141
- if other.respond_to?(:to_str)
142
- return copy(:value => other.to_str), self
143
- else
144
- raise TypeError,
145
- "cannot coerce StringVal to #{other.class}"
146
- end
142
+ return copy(:value => other.to_str), self
147
143
  end
148
144
 
149
145
  def value
@@ -193,7 +189,6 @@ module Stupidedi
193
189
  attr_reader :value
194
190
 
195
191
  # (string any* -> any)
196
- extend Forwardable
197
192
  def_delegators :@value, :to_d, :to_s, :to_f, :to_c, :to_r, :to_sym, :to_str,
198
193
  :hex, :oct, :ord, :sum, :length, :count, :index, :rindex,
199
194
  :lines, :bytes, :chars, :each, :upto, :split, :scan, :unpack,
@@ -233,12 +228,7 @@ module Stupidedi
233
228
  def coerce(other)
234
229
  # me, he = other.coerce(self)
235
230
  # me <OP> he
236
- if other.respond_to?(:to_str)
237
- return copy(:value => other.to_str), self
238
- else
239
- raise TypeError,
240
- "cannot coerce StringVal to #{other.class}"
241
- end
231
+ return copy(:value => other.to_str), self
242
232
  end
243
233
 
244
234
  def too_long?
@@ -376,11 +366,11 @@ module Stupidedi
376
366
  def value(object, usage, position)
377
367
  if object.blank?
378
368
  self::Empty.new(usage, position)
379
- elsif object.respond_to?(:to_s)
380
- self::NonEmpty.new(object.to_s.rstrip, usage, position)
381
369
  else
382
- self::Invalid.new(object, usage, position)
370
+ self::NonEmpty.new(object.to_s.rstrip, usage, position)
383
371
  end
372
+ rescue
373
+ self::Invalid.new(object, usage, position)
384
374
  end
385
375
 
386
376
  # @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
@@ -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
@@ -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
 
@@ -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 ThirtyForty
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
  module ThirtyForty
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
  module ThirtyForty
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
  module ThirtyForty
@@ -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,
@@ -203,12 +204,7 @@ module Stupidedi
203
204
  def coerce(other)
204
205
  # me, he = other.coerce(self)
205
206
  # me <OP> he
206
- if other.respond_to?(:to_date)
207
- return DateVal.value(other, usage, position), self
208
- else
209
- raise TypeError,
210
- "cannot coerce DateVal to #{other.class}"
211
- end
207
+ return DateVal.value(other, usage, position), self
212
208
  end
213
209
 
214
210
  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 ThirtyForty
@@ -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
  def initialize(value, usage, position)
@@ -212,12 +213,7 @@ module Stupidedi
212
213
  def coerce(other)
213
214
  # self', other' = other.coerce(self)
214
215
  # self' * other'
215
- if other.respond_to?(:to_d)
216
- return copy(:value => other.to_d), self
217
- else
218
- raise TypeError,
219
- "cannot coerce FixnumVal to #{other.class}"
220
- end
216
+ return copy(:value => other.to_d), self
221
217
  end
222
218
 
223
219
  def valid?
@@ -294,15 +290,13 @@ module Stupidedi
294
290
  def value(object, usage, position)
295
291
  if object.blank?
296
292
  self::Empty.new(usage, position)
297
- elsif object.respond_to?(:to_d)
293
+ else
298
294
  # The number of fractional digits is implied by usage.precision
299
295
  factor = 10 ** usage.definition.precision
300
296
 
301
297
  self::NonEmpty.new(object.to_d / factor, usage, position)
302
- else
303
- self::Invalid.new(object, usage, position)
304
298
  end
305
- rescue ArgumentError
299
+ rescue
306
300
  self::Invalid.new(object, usage, position)
307
301
  end
308
302
 
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
  module ThirtyForty
@@ -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
 
@@ -202,12 +203,7 @@ module Stupidedi
202
203
  def coerce(other)
203
204
  # self', other' = other.coerce(self)
204
205
  # self' * other'
205
- if other.respond_to?(:to_d)
206
- return copy(:value => other.to_d), self
207
- else
208
- raise TypeError,
209
- "cannot coerce FloatVal to #{other.class}"
210
- end
206
+ return copy(:value => other.to_d), self
211
207
  end
212
208
 
213
209
  def valid?
@@ -328,15 +324,11 @@ module Stupidedi
328
324
  def value(object, usage, position)
329
325
  if object.blank?
330
326
  self::Empty.new(usage, position)
331
- elsif object.respond_to?(:to_d)
332
- begin
333
- self::NonEmpty.new(object.to_d, usage, position)
334
- rescue ArgumentError
335
- self::Invalid.new(object, usage, position)
336
- end
337
327
  else
338
- self::Invalid.new(object, usage, position)
328
+ self::NonEmpty.new(object.to_d, usage, position)
339
329
  end
330
+ rescue ArgumentError
331
+ self::Invalid.new(object, usage, position)
340
332
  end
341
333
 
342
334
  # @endgroup
@@ -1,4 +1,6 @@
1
1
  module Stupidedi
2
+ using Refinements
3
+
2
4
  module Versions
3
5
  module FunctionalGroups
4
6
  module ThirtyForty
@@ -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,
@@ -179,12 +180,7 @@ module Stupidedi
179
180
  def coerce(other)
180
181
  # me, he = other.coerce(self)
181
182
  # me <OP> he
182
- if other.respond_to?(:to_str)
183
- return copy(:value => other.to_str), self
184
- else
185
- raise TypeError,
186
- "cannot coerce IdentifierVal to #{other.class}"
187
- end
183
+ return copy(:value => other.to_str), self
188
184
  end
189
185
 
190
186
  def value
@@ -233,7 +229,6 @@ module Stupidedi
233
229
  # @return [String]
234
230
  attr_reader :value
235
231
  # (string any* -> any)
236
- extend Forwardable
237
232
  def_delegators :value, :to_d, :to_s, :to_f, :to_c, :to_r, :to_sym, :to_str,
238
233
  :hex, :oct, :ord, :sum, :length, :count, :index, :rindex,
239
234
  :lines, :bytes, :chars, :each, :upto, :split, :scan, :unpack,
@@ -273,12 +268,7 @@ module Stupidedi
273
268
  def coerce(other)
274
269
  # me, he = other.coerce(self)
275
270
  # me <OP> he
276
- if other.respond_to?(:to_str)
277
- return copy(:value => other.to_str), self
278
- else
279
- raise TypeError,
280
- "cannot coerce IdentifierVal to #{other.class}"
281
- end
271
+ return copy(:value => other.to_str), self
282
272
  end
283
273
 
284
274
  def valid?
@@ -344,10 +334,8 @@ module Stupidedi
344
334
  def value(object, usage, position)
345
335
  if object.blank?
346
336
  self::Empty.new(usage, position)
347
- elsif object.respond_to?(:to_s)
348
- self::NonEmpty.new(object.to_s.rstrip, usage, position)
349
337
  else
350
- self::Invalid.new(object, usage, position)
338
+ self::NonEmpty.new(object.to_s.rstrip, usage, position)
351
339
  end
352
340
  rescue
353
341
  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 ThirtyForty
@@ -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 ThirtyForty
@@ -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,
@@ -138,12 +139,7 @@ module Stupidedi
138
139
  def coerce(other)
139
140
  # me, he = other.coerce(self)
140
141
  # me <OP> he
141
- if other.respond_to?(:to_str)
142
- return copy(:value => other.to_str), self
143
- else
144
- raise TypeError,
145
- "cannot coerce StringVal to #{other.class}"
146
- end
142
+ return copy(:value => other.to_str), self
147
143
  end
148
144
 
149
145
  def value
@@ -193,7 +189,6 @@ module Stupidedi
193
189
  attr_reader :value
194
190
 
195
191
  # (string any* -> any)
196
- extend Forwardable
197
192
  def_delegators :@value, :to_d, :to_s, :to_f, :to_c, :to_r, :to_sym, :to_str,
198
193
  :hex, :oct, :ord, :sum, :length, :count, :index, :rindex,
199
194
  :lines, :bytes, :chars, :each, :upto, :split, :scan, :unpack,
@@ -234,12 +229,7 @@ module Stupidedi
234
229
  def coerce(other)
235
230
  # me, he = other.coerce(self)
236
231
  # me <OP> he
237
- if other.respond_to?(:to_str)
238
- return copy(:value => other.to_str), self
239
- else
240
- raise TypeError,
241
- "cannot coerce StringVal to #{other.class}"
242
- end
232
+ return copy(:value => other.to_str), self
243
233
  end
244
234
 
245
235
  def too_long?
@@ -377,11 +367,11 @@ module Stupidedi
377
367
  def value(object, usage, position)
378
368
  if object.blank?
379
369
  self::Empty.new(usage, position)
380
- elsif object.respond_to?(:to_s)
381
- self::NonEmpty.new(object.to_s.rstrip, usage, position)
382
370
  else
383
- self::Invalid.new(object, usage, position)
371
+ self::NonEmpty.new(object.to_s.rstrip, usage, position)
384
372
  end
373
+ rescue NoMethodError
374
+ self::Invalid.new(object, usage, position)
385
375
  end
386
376
 
387
377
  # @endgroup