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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2093ddba04d861a92064a74df14c6c950f29b54d
4
- data.tar.gz: d94a09d05a3d2f5c21cec4309e4cb3f72124ad6d
3
+ metadata.gz: 92ea0385370f3e4b2c78354360628986b05d388a
4
+ data.tar.gz: f4e0c0afd30345c303c7baf272a1e8bc92406c1f
5
5
  SHA512:
6
- metadata.gz: e9ed1ef8bc67776276b6ce099d7e721ed9eb61d0e75e6a265ef58dc291e131172b5129ffe2715d5d2dd7a58034a920e8172da523be8da0e42042e2fec4d1ce01
7
- data.tar.gz: 36ab7df0ead50f68f75b063ad41566013e3cc6cc3b23ca533a951c1b86f35358732b76e36a84d09d6a791e6707a443ed2521985d102e95e261165fe6cbda5cdf
6
+ metadata.gz: 333c3e34198b7de9ab66b24beea12aeb559d88f62b64f56d3b004af2db2c5a361d3f2369e31da6a00b9e547a0444d55f96c7bc49eb5e93444d964149c0c3d57b
7
+ data.tar.gz: 8af0836876ae602978852e3d14d9774d36be5e7ef2b23bcce1ca1a4832d859a302749b163bb4c319cd6a6706cd06cbe9fbd30ac7c8c8782fb5a18be14aa903b9
data/README.md CHANGED
@@ -18,17 +18,10 @@ notices, and health care claims. It is similar to XML in some ways,
18
18
  but precedes it by about 15 years; so if you think XML sucks, you
19
19
  will love to hate EDI.
20
20
 
21
- ### Beware / Help Wanted
21
+ ### Credits
22
22
 
23
- Stupidedi monkey patches some classes in the Ruby standard library. These
24
- are listed in `lib/ruby`. Rails users and other ActiveSupport users have
25
- reported problems caused by these patches, since they are unintentionally
26
- incompatible.
27
-
28
- There is a pull request ([72](https://github.com/kputnam/stupidedi/pull/72))
29
- which should solve these. Please test the `refinements` branch and provide
30
- feedback -- it imposes a requirement of Ruby 2.1+, but should otherwise be
31
- a seemless change.
23
+ * __Author__: [Kyle Putnam](https://github.com/kputnam)
24
+ * __Maintainer__: [Isi Robayna](https://github.com/irobayna)
32
25
 
33
26
  ## What problem does it solve?
34
27
 
data/lib/ruby/array.rb CHANGED
@@ -1,189 +1,227 @@
1
- class Array
2
-
3
- def blank?
4
- empty?
5
- end
6
-
7
- def present?
8
- not empty?
9
- end
10
-
11
- # Return the first item. Raises an `IndexError` if the Array is `empty?`.
12
- #
13
- # @example
14
- # [1, 2, 3].head #=> 1
15
- #
16
- def head
17
- raise IndexError, "head of empty list" if empty?
18
- x, = self
19
- x
20
- end
21
-
22
- # True if `#at` is defined for the given `n`
23
- #
24
- # @example
25
- # [1, 2, 3].defined_at?(0) #=> true
26
- # [].defined_at?(0) #=> false
27
- #
28
- def defined_at?(n)
29
- n < length and -n <= length
30
- end
31
-
32
- # @group Selection
33
- #############################################################################
34
-
35
- # Selects all elements except the first.
36
- #
37
- # @example
38
- # [1, 2, 3].tail #=> [2, 3]
39
- # [1].tail #=> []
40
- # [].tail #=> []
41
- #
42
- # @return [Array]
43
- def tail
44
- _, *xs = self
45
- xs
46
- end
47
-
48
- # Selects all elements except the last `n` ones.
49
- #
50
- # @example
51
- # [1, 2, 3].init #=> [1, 2]
52
- # [1, 2, 3].init(2) #=> [1]
53
- # [].tail #=> []
54
- #
55
- # @return [Array]
56
- def init(n = 1)
57
- raise ArgumentError, "n cannot be negative" if n < 0
58
- slice(0..-(n + 1)) or []
59
- end
60
-
61
- # Select all elements except the first `n` ones.
62
- #
63
- # @example
64
- # [1, 2, 3].drop(1) #=> [2, 3]
65
- # [1, 3, 3].drop(2) #=> [3]
66
- # [].drop(10) #=> []
67
- #
68
- # @return [Array]
69
- def drop(n)
70
- raise ArgumentError, "n cannot be negative" if n < 0
71
- slice(n..-1) or []
72
- end
73
-
74
- # Select the first `n` elements.
75
- #
76
- # @example
77
- # [1, 2, 3].take(2) #=> [1, 2]
78
- # [1, 2, 3].take(0) #=> []
79
- #
80
- # @return [Array]
81
- def take(n)
82
- raise ArgumentError, "n cannot be negative" if n < 0
83
- slice(0, n) or []
84
- end
85
-
86
- # Split the array in two at the given position.
87
- #
88
- # @example
89
- # [1, 2, 3].split_at(2) #=> [[1,2], [3]]
90
- # [1, 2, 3].split_at(0) #=> [[], [1,2,3]]
91
- #
92
- # @return [(Array, Array)]
93
- def split_at(n)
94
- n = length + n if n < 0
95
- return take(n), drop(n)
96
- end
97
-
98
- # @endgroup
99
- #############################################################################
100
-
101
- # @group Filtering
102
- #############################################################################
103
-
104
- # Drops the longest prefix of elements that satisfy the predicate.
105
- #
106
- # @return [Array]
107
- def drop_while(&block)
108
- # This is in tail call form
109
- if not empty? and yield(head)
110
- tail.drop_while(&block)
111
- else
112
- self
1
+ module Stupidedi
2
+ module Refinements
3
+
4
+ refine Array do
5
+ def blank?
6
+ empty?
7
+ end
8
+
9
+ def present?
10
+ not empty?
11
+ end
12
+
13
+ # Return the first item. Raises an `IndexError` if the Array is `empty?`.
14
+ #
15
+ # @example
16
+ # [1, 2, 3].head #=> 1
17
+ #
18
+ def head
19
+ raise IndexError, "head of empty list" if empty?
20
+ x, = self
21
+ x
22
+ end
23
+
24
+ # True if `#at` is defined for the given `n`
25
+ #
26
+ # @example
27
+ # [1, 2, 3].defined_at?(0) #=> true
28
+ # [].defined_at?(0) #=> false
29
+ #
30
+ def defined_at?(n)
31
+ n < length and -n <= length
32
+ end
33
+
34
+ # @group Selection
35
+ #############################################################################
36
+
37
+ # Selects all elements except the first.
38
+ #
39
+ # @example
40
+ # [1, 2, 3].tail #=> [2, 3]
41
+ # [1].tail #=> []
42
+ # [].tail #=> []
43
+ #
44
+ # @return [Array]
45
+ def tail
46
+ _, *xs = self
47
+ xs
48
+ end
49
+
50
+ # Selects all elements except the last `n` ones.
51
+ #
52
+ # @example
53
+ # [1, 2, 3].init #=> [1, 2]
54
+ # [1, 2, 3].init(2) #=> [1]
55
+ # [].tail #=> []
56
+ #
57
+ # @return [Array]
58
+ def init(n = 1)
59
+ raise ArgumentError, "n cannot be negative" if n < 0
60
+ slice(0..-(n + 1)) or []
61
+ end
62
+
63
+ # Select all elements except the first `n` ones.
64
+ #
65
+ # @example
66
+ # [1, 2, 3].drop(1) #=> [2, 3]
67
+ # [1, 3, 3].drop(2) #=> [3]
68
+ # [].drop(10) #=> []
69
+ #
70
+ # @return [Array]
71
+ def drop(n)
72
+ raise ArgumentError, "n cannot be negative" if n < 0
73
+ slice(n..-1) or []
74
+ end
75
+
76
+ # Select the first `n` elements.
77
+ #
78
+ # @example
79
+ # [1, 2, 3].take(2) #=> [1, 2]
80
+ # [1, 2, 3].take(0) #=> []
81
+ #
82
+ # @return [Array]
83
+ def take(n)
84
+ raise ArgumentError, "n cannot be negative" if n < 0
85
+ slice(0, n) or []
86
+ end
87
+
88
+ # Split the array in two at the given position.
89
+ #
90
+ # @example
91
+ # [1, 2, 3].split_at(2) #=> [[1,2], [3]]
92
+ # [1, 2, 3].split_at(0) #=> [[], [1,2,3]]
93
+ #
94
+ # @return [(Array, Array)]
95
+ def split_at(n)
96
+ n = length + n if n < 0
97
+ return take(n), drop(n)
98
+ end
99
+
100
+ # @endgroup
101
+ #############################################################################
102
+
103
+ # @group Filtering
104
+ #############################################################################
105
+
106
+ # Drops the longest prefix of elements that satisfy the predicate.
107
+ #
108
+ # @return [Array]
109
+ def drop_while(&block)
110
+ # This is in tail call form
111
+ if not empty? and yield(head)
112
+ tail.drop_while(&block)
113
+ else
114
+ self
115
+ end
116
+ end
117
+
118
+ # Drops the longest prefix of elements that do not satisfy the predicate.
119
+ #
120
+ # @return [Array]
121
+ def drop_until(&block)
122
+ # This is in tail call form
123
+ unless empty? or yield(head)
124
+ tail.drop_until(&block)
125
+ else
126
+ self
127
+ end
128
+ end
129
+
130
+ # Takes the longest prefix of elements that satisfy the predicate.
131
+ #
132
+ # @return [Array]
133
+ def take_while(accumulator = [], &block)
134
+ # This is in tail call form
135
+ if not empty? and yield(head)
136
+ tail.take_while(head.snoc(accumulator), &block)
137
+ else
138
+ accumulator
139
+ end
140
+ end
141
+
142
+ # Takes the longest prefix of elements that do not satisfy the predicate.
143
+ #
144
+ # @return [Array]
145
+ def take_until(accumulator = [], &block)
146
+ # This is in tail call form
147
+ unless empty? or yield(head)
148
+ tail.take_until(head.snoc(accumulator), &block)
149
+ else
150
+ accumulator
151
+ end
152
+ end
153
+
154
+ # Splits the array into prefix/suffix pair according to the predicate.
155
+ #
156
+ # @return [(Array, Array)]
157
+ def split_until(&block)
158
+ prefix = take_while(&block)
159
+ suffix = drop(prefix.length)
160
+ return prefix, suffix
161
+ end
162
+
163
+ # Splits the array into prefix/suffix pair according to the predicate.
164
+ #
165
+ # @return [(Array, Array)]
166
+ def split_when(&block)
167
+ prefix = take_until(&block)
168
+ suffix = drop(prefix.length)
169
+ return prefix, suffix
170
+ end
171
+
172
+ # Returns a list of sublists, where each sublist contains only equal
173
+ # elements. Equality is determined by a two-argument block parameter.
174
+ # The concatenation of the result is equal to the original argument.
175
+ #
176
+ # @example
177
+ # "abba".split(//).group_seq(&:==) #=> [["y"], ["a"], ["b", "b"], ["a"]]
178
+ #
179
+ # @return [[Array]]
180
+ def runs(&block)
181
+ unless empty?
182
+ as, bs = tail.split_until{|x| block.call(head, x) }
183
+ head.cons(as).cons(bs.runs(&block))
184
+ else
185
+ []
186
+ end
187
+ end
188
+
189
+ # @endgroup
190
+ #############################################################################
191
+
192
+ # Accumulate elements using the `+` method, optionally
193
+ # transforming them first using a block
194
+ #
195
+ # @example
196
+ # ["a", "b", "cd"].sum #=> "abcd"
197
+ # ["a", "b", "cd"].sum(&:length) #=> 4
198
+ #
199
+ def sum(&block)
200
+ if block_given?
201
+ tail.inject(yield(head)){|sum,e| sum + yield(e) }
202
+ else
203
+ tail.inject(head){|sum,e| sum + e }
204
+ end
205
+ end
206
+
207
+ # Count the number of elements that satisfy the predicate
208
+ #
209
+ # @example
210
+ # ["abc", "de", "fg", "hi"].count{|s| s.length == 2 } #=> 3
211
+ # ["a", "b", "a", "c", "a"].count("a") #=> 3
212
+ # [1, 3, 5, 9, 0].count #=> 5
213
+ #
214
+ # @return [Integer]
215
+ def count(*args)
216
+ if block_given?
217
+ inject(0){|n, e| yield(e) ? n + 1 : n }
218
+ elsif args.empty?
219
+ size
220
+ else
221
+ inject(0){|n, e| e == args.first ? n + 1 : n }
222
+ end
223
+ end
113
224
  end
114
- end
115
-
116
- # Drops the longest prefix of elements that do not satisfy the predicate.
117
- #
118
- # @return [Array]
119
- def drop_until(&block)
120
- # This is in tail call form
121
- unless empty? or yield(head)
122
- tail.drop_until(&block)
123
- else
124
- self
125
- end
126
- end
127
225
 
128
- # Takes the longest prefix of elements that satisfy the predicate.
129
- #
130
- # @return [Array]
131
- def take_while(accumulator = [], &block)
132
- # This is in tail call form
133
- if not empty? and yield(head)
134
- tail.take_while(head.snoc(accumulator), &block)
135
- else
136
- accumulator
137
- end
138
- end
139
-
140
- # Takes the longest prefix of elements that do not satisfy the predicate.
141
- #
142
- # @return [Array]
143
- def take_until(accumulator = [], &block)
144
- # This is in tail call form
145
- unless empty? or yield(head)
146
- tail.take_until(head.snoc(accumulator), &block)
147
- else
148
- accumulator
149
- end
150
226
  end
151
-
152
- # Splits the array into prefix/suffix pair according to the predicate.
153
- #
154
- # @return [(Array, Array)]
155
- def split_until(&block)
156
- prefix = take_while(&block)
157
- suffix = drop(prefix.length)
158
- return prefix, suffix
159
- end
160
-
161
- # Splits the array into prefix/suffix pair according to the predicate.
162
- #
163
- # @return [(Array, Array)]
164
- def split_when(&block)
165
- prefix = take_until(&block)
166
- suffix = drop(prefix.length)
167
- return prefix, suffix
168
- end
169
-
170
- # Returns a list of sublists, where each sublist contains only equal
171
- # elements. Equality is determined by a two-argument block parameter.
172
- # The concatenation of the result is equal to the original argument.
173
- #
174
- # @example
175
- # "abba".split(//).group_seq(&:==) #=> [["y"], ["a"], ["b", "b"], ["a"]]
176
- #
177
- # @return [[Array]]
178
- def runs(&block)
179
- unless empty?
180
- as, bs = tail.split_until{|x| block.call(head, x) }
181
- head.cons(as).cons(bs.runs(&block))
182
- else
183
- []
184
- end
185
- end
186
-
187
- # @endgroup
188
- #############################################################################
189
227
  end
data/lib/ruby/blank.rb CHANGED
@@ -1,69 +1,53 @@
1
- class String
1
+ module Stupidedi
2
+ module Refinements
3
+
4
+ refine String do
5
+ # True if the string is `empty?` or contains all whitespace
6
+ #
7
+ # @example
8
+ # "abc".blank? #=> false
9
+ # " ".blank? #=> true
10
+ # "".blank? #=> true
11
+ #
12
+ def blank?
13
+ self !~ /\S/
14
+ end
15
+
16
+ def present?
17
+ self =~ /\S/
18
+ end
19
+ end
20
+
21
+ refine NilClass do
22
+ # Always `true`. Note this overrides {Object#blank?} which returns false.
23
+ #
24
+ # @example
25
+ # nil.blank? #=> true
26
+ #
27
+ def blank?
28
+ true
29
+ end
30
+
31
+ def present?
32
+ false
33
+ end
34
+ end
35
+
36
+ refine Object do
37
+ # Always `false`. Note that {NilClass#blank?} is overridden to return `true`
38
+ #
39
+ # @example
40
+ # false.blank? #=> false
41
+ # 100.blank? #=> false
42
+ #
43
+ def blank?
44
+ false
45
+ end
46
+
47
+ def present?
48
+ true
49
+ end
50
+ end
2
51
 
3
- # True if the string is `empty?` or contains all whitespace
4
- #
5
- # @example
6
- # "abc".blank? #=> false
7
- # " ".blank? #=> true
8
- # "".blank? #=> true
9
- #
10
- def blank?
11
- self !~ /\S/
12
- end
13
-
14
- def present?
15
- self =~ /\S/
16
- end
17
- end
18
-
19
- # module Enumerable
20
- #
21
- # # True if the collection is `empty?`
22
- # #
23
- # # @example
24
- # # [1,2].blank? #=> false
25
- # # [].blank? #=> false
26
- # #
27
- # unless respond_to?(:blank?)
28
- #
29
- # def blank?
30
- # empty?
31
- # end
32
- #
33
- # def present?
34
- # not empty?
35
- # end
36
- # end
37
-
38
- class NilClass
39
-
40
- # Always `true`. Note this overrides {Object#blank?} which returns false.
41
- #
42
- # @example
43
- # nil.blank? #=> true
44
- #
45
- def blank?
46
- true
47
- end
48
-
49
- def present?
50
- false
51
- end
52
- end
53
-
54
- class Object
55
-
56
- # Always `false`. Note that {NilClass#blank?} is overridden to return `true`
57
- #
58
- # @example
59
- # false.blank? #=> false
60
- # 100.blank? #=> false
61
- #
62
- def blank?
63
- false
64
- end
65
-
66
- def present?
67
- true
68
52
  end
69
53
  end