alf 0.12.2 → 0.13.0

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 (549) hide show
  1. data/CHANGELOG.md +186 -80
  2. data/Gemfile +16 -32
  3. data/Gemfile.lock +35 -34
  4. data/LICENCE.md +1 -1
  5. data/Manifest.txt +7 -9
  6. data/README.md +139 -809
  7. data/alf.gemspec +6 -15
  8. data/alf.noespec +16 -34
  9. data/lib/alf.rb +3 -73
  10. data/lib/alf/loader.rb +3 -3
  11. data/lib/alf/version.rb +2 -2
  12. data/spec/spec_helper.rb +3 -18
  13. data/spec/test_alf.rb +8 -0
  14. data/tasks/test.rake +6 -0
  15. data/test/migrations/test_folder_migration.rb +18 -0
  16. data/test/migrations/test_sequel_migration.rb +34 -0
  17. data/test/seeding/test_seeding.rb +49 -0
  18. data/test/test_alf.rb +8 -0
  19. data/test/test_helpers.rb +24 -0
  20. metadata +54 -952
  21. data/TODO.md +0 -21
  22. data/bin/alf +0 -27
  23. data/doc/commands/exec.md +0 -16
  24. data/doc/commands/help.md +0 -11
  25. data/doc/commands/main.md +0 -33
  26. data/doc/commands/show.md +0 -19
  27. data/doc/operators/non_relational/autonum.md +0 -23
  28. data/doc/operators/non_relational/clip.md +0 -31
  29. data/doc/operators/non_relational/coerce.md +0 -15
  30. data/doc/operators/non_relational/compact.md +0 -20
  31. data/doc/operators/non_relational/defaults.md +0 -32
  32. data/doc/operators/non_relational/generator.md +0 -20
  33. data/doc/operators/non_relational/sort.md +0 -24
  34. data/doc/operators/relational/extend.md +0 -18
  35. data/doc/operators/relational/group.md +0 -27
  36. data/doc/operators/relational/heading.md +0 -20
  37. data/doc/operators/relational/intersect.md +0 -13
  38. data/doc/operators/relational/join.md +0 -28
  39. data/doc/operators/relational/matching.md +0 -24
  40. data/doc/operators/relational/minus.md +0 -12
  41. data/doc/operators/relational/not-matching.md +0 -20
  42. data/doc/operators/relational/project.md +0 -28
  43. data/doc/operators/relational/quota.md +0 -21
  44. data/doc/operators/relational/rank.md +0 -27
  45. data/doc/operators/relational/rename.md +0 -17
  46. data/doc/operators/relational/restrict.md +0 -25
  47. data/doc/operators/relational/summarize.md +0 -25
  48. data/doc/operators/relational/ungroup.md +0 -20
  49. data/doc/operators/relational/union.md +0 -14
  50. data/doc/operators/relational/unwrap.md +0 -20
  51. data/doc/operators/relational/wrap.md +0 -24
  52. data/examples/csv/suppliers.csv +0 -6
  53. data/examples/logs/access.log +0 -1000
  54. data/examples/logs/combined.alf +0 -2
  55. data/examples/logs/hits.alf +0 -14
  56. data/examples/logs/not_found.alf +0 -7
  57. data/examples/logs/robots-cheating.alf +0 -11
  58. data/examples/logs/robots.alf +0 -8
  59. data/examples/operators/autonum.alf +0 -6
  60. data/examples/operators/cities.rash +0 -4
  61. data/examples/operators/clip.alf +0 -3
  62. data/examples/operators/compact.alf +0 -2
  63. data/examples/operators/database.alf +0 -5
  64. data/examples/operators/defaults.alf +0 -3
  65. data/examples/operators/extend.alf +0 -3
  66. data/examples/operators/group.alf +0 -3
  67. data/examples/operators/intersect.alf +0 -4
  68. data/examples/operators/join.alf +0 -2
  69. data/examples/operators/matching.alf +0 -2
  70. data/examples/operators/minus.alf +0 -8
  71. data/examples/operators/not_matching.alf +0 -2
  72. data/examples/operators/nulls.rash +0 -3
  73. data/examples/operators/parts.rash +0 -6
  74. data/examples/operators/project.alf +0 -3
  75. data/examples/operators/pseudo-with.alf +0 -7
  76. data/examples/operators/quota.alf +0 -4
  77. data/examples/operators/rank.alf +0 -4
  78. data/examples/operators/rename.alf +0 -3
  79. data/examples/operators/restrict.alf +0 -2
  80. data/examples/operators/schema.yaml +0 -28
  81. data/examples/operators/sort.alf +0 -4
  82. data/examples/operators/summarize.alf +0 -16
  83. data/examples/operators/suppliers.rash +0 -5
  84. data/examples/operators/supplies.rash +0 -12
  85. data/examples/operators/ungroup.alf +0 -4
  86. data/examples/operators/union.alf +0 -3
  87. data/examples/operators/unwrap.alf +0 -4
  88. data/examples/operators/wrap.alf +0 -2
  89. data/lib/alf-csv/alf/csv.rb +0 -3
  90. data/lib/alf-csv/alf/csv/commons.rb +0 -36
  91. data/lib/alf-csv/alf/csv/reader.rb +0 -33
  92. data/lib/alf-csv/alf/csv/renderer.rb +0 -38
  93. data/lib/alf-engine/alf/engine.rb +0 -25
  94. data/lib/alf-engine/alf/engine/aggregate.rb +0 -44
  95. data/lib/alf-engine/alf/engine/autonum.rb +0 -45
  96. data/lib/alf-engine/alf/engine/cesure.rb +0 -45
  97. data/lib/alf-engine/alf/engine/clip.rb +0 -53
  98. data/lib/alf-engine/alf/engine/coerce.rb +0 -46
  99. data/lib/alf-engine/alf/engine/cog.rb +0 -7
  100. data/lib/alf-engine/alf/engine/compact.rb +0 -26
  101. data/lib/alf-engine/alf/engine/compact/set.rb +0 -23
  102. data/lib/alf-engine/alf/engine/compact/uniq.rb +0 -23
  103. data/lib/alf-engine/alf/engine/concat.rb +0 -25
  104. data/lib/alf-engine/alf/engine/defaults.rb +0 -43
  105. data/lib/alf-engine/alf/engine/filter.rb +0 -41
  106. data/lib/alf-engine/alf/engine/generator.rb +0 -50
  107. data/lib/alf-engine/alf/engine/group.rb +0 -7
  108. data/lib/alf-engine/alf/engine/group/hash.rb +0 -40
  109. data/lib/alf-engine/alf/engine/join.rb +0 -7
  110. data/lib/alf-engine/alf/engine/join/hash.rb +0 -35
  111. data/lib/alf-engine/alf/engine/materialize.rb +0 -8
  112. data/lib/alf-engine/alf/engine/materialize/array.rb +0 -78
  113. data/lib/alf-engine/alf/engine/materialize/hash.rb +0 -122
  114. data/lib/alf-engine/alf/engine/quota.rb +0 -7
  115. data/lib/alf-engine/alf/engine/quota/cesure.rb +0 -46
  116. data/lib/alf-engine/alf/engine/rank.rb +0 -7
  117. data/lib/alf-engine/alf/engine/rank/cesure.rb +0 -48
  118. data/lib/alf-engine/alf/engine/rename.rb +0 -39
  119. data/lib/alf-engine/alf/engine/semi.rb +0 -7
  120. data/lib/alf-engine/alf/engine/semi/hash.rb +0 -39
  121. data/lib/alf-engine/alf/engine/set_attr.rb +0 -46
  122. data/lib/alf-engine/alf/engine/sort.rb +0 -28
  123. data/lib/alf-engine/alf/engine/sort/in_memory.rb +0 -39
  124. data/lib/alf-engine/alf/engine/summarize.rb +0 -8
  125. data/lib/alf-engine/alf/engine/summarize/cesure.rb +0 -51
  126. data/lib/alf-engine/alf/engine/summarize/hash.rb +0 -35
  127. data/lib/alf-engine/alf/engine/ungroup.rb +0 -29
  128. data/lib/alf-engine/alf/engine/unwrap.rb +0 -31
  129. data/lib/alf-engine/alf/engine/wrap.rb +0 -39
  130. data/lib/alf-logs/alf/logs.rb +0 -1
  131. data/lib/alf-logs/alf/logs/reader.rb +0 -98
  132. data/lib/alf-sequel/alf/sequel.rb +0 -2
  133. data/lib/alf-sequel/alf/sequel/environment.rb +0 -61
  134. data/lib/alf-sequel/alf/sequel/iterator.rb +0 -21
  135. data/lib/alf-shell/alf/shell.rb +0 -40
  136. data/lib/alf-shell/alf/shell/command.rb +0 -26
  137. data/lib/alf-shell/alf/shell/command/exec.rb +0 -11
  138. data/lib/alf-shell/alf/shell/command/help.rb +0 -30
  139. data/lib/alf-shell/alf/shell/command/main.rb +0 -136
  140. data/lib/alf-shell/alf/shell/command/main/class_methods.rb +0 -46
  141. data/lib/alf-shell/alf/shell/command/show.rb +0 -63
  142. data/lib/alf-shell/alf/shell/doc_manager.rb +0 -72
  143. data/lib/alf-shell/alf/shell/operator.rb +0 -86
  144. data/lib/alf-yaml/alf/yaml.rb +0 -1
  145. data/lib/alf-yaml/alf/yaml/renderer.rb +0 -22
  146. data/lib/alf/aggregator.rb +0 -51
  147. data/lib/alf/aggregator/avg.rb +0 -39
  148. data/lib/alf/aggregator/class_methods.rb +0 -77
  149. data/lib/alf/aggregator/collect.rb +0 -32
  150. data/lib/alf/aggregator/concat.rb +0 -47
  151. data/lib/alf/aggregator/count.rb +0 -32
  152. data/lib/alf/aggregator/instance_methods.rb +0 -119
  153. data/lib/alf/aggregator/max.rb +0 -32
  154. data/lib/alf/aggregator/min.rb +0 -32
  155. data/lib/alf/aggregator/stddev.rb +0 -25
  156. data/lib/alf/aggregator/sum.rb +0 -32
  157. data/lib/alf/aggregator/variance.rb +0 -45
  158. data/lib/alf/environment.rb +0 -34
  159. data/lib/alf/environment/class_methods.rb +0 -95
  160. data/lib/alf/environment/folder.rb +0 -60
  161. data/lib/alf/environment/instance_methods.rb +0 -26
  162. data/lib/alf/errors.rb +0 -5
  163. data/lib/alf/ext.rb +0 -4
  164. data/lib/alf/ext/relation.rb +0 -4
  165. data/lib/alf/iterator.rb +0 -28
  166. data/lib/alf/iterator/class_methods.rb +0 -20
  167. data/lib/alf/iterator/proxy.rb +0 -27
  168. data/lib/alf/lispy.rb +0 -24
  169. data/lib/alf/lispy/instance_methods.rb +0 -157
  170. data/lib/alf/operator.rb +0 -68
  171. data/lib/alf/operator/binary.rb +0 -21
  172. data/lib/alf/operator/class_methods.rb +0 -82
  173. data/lib/alf/operator/experimental.rb +0 -9
  174. data/lib/alf/operator/instance_methods.rb +0 -29
  175. data/lib/alf/operator/non_relational/autonum.rb +0 -19
  176. data/lib/alf/operator/non_relational/clip.rb +0 -20
  177. data/lib/alf/operator/non_relational/coerce.rb +0 -19
  178. data/lib/alf/operator/non_relational/compact.rb +0 -18
  179. data/lib/alf/operator/non_relational/defaults.rb +0 -22
  180. data/lib/alf/operator/non_relational/generator.rb +0 -20
  181. data/lib/alf/operator/non_relational/sort.rb +0 -19
  182. data/lib/alf/operator/nullary.rb +0 -11
  183. data/lib/alf/operator/relational/extend.rb +0 -19
  184. data/lib/alf/operator/relational/group.rb +0 -21
  185. data/lib/alf/operator/relational/heading.rb +0 -20
  186. data/lib/alf/operator/relational/intersect.rb +0 -18
  187. data/lib/alf/operator/relational/join.rb +0 -18
  188. data/lib/alf/operator/relational/matching.rb +0 -18
  189. data/lib/alf/operator/relational/minus.rb +0 -18
  190. data/lib/alf/operator/relational/not_matching.rb +0 -18
  191. data/lib/alf/operator/relational/project.rb +0 -22
  192. data/lib/alf/operator/relational/quota.rb +0 -23
  193. data/lib/alf/operator/relational/rank.rb +0 -22
  194. data/lib/alf/operator/relational/rename.rb +0 -18
  195. data/lib/alf/operator/relational/restrict.rb +0 -18
  196. data/lib/alf/operator/relational/summarize.rb +0 -27
  197. data/lib/alf/operator/relational/ungroup.rb +0 -19
  198. data/lib/alf/operator/relational/union.rb +0 -20
  199. data/lib/alf/operator/relational/unwrap.rb +0 -19
  200. data/lib/alf/operator/relational/wrap.rb +0 -20
  201. data/lib/alf/operator/signature.rb +0 -233
  202. data/lib/alf/operator/unary.rb +0 -16
  203. data/lib/alf/reader.rb +0 -37
  204. data/lib/alf/reader/alf_file.rb +0 -24
  205. data/lib/alf/reader/class_methods.rb +0 -91
  206. data/lib/alf/reader/instance_methods.rb +0 -97
  207. data/lib/alf/reader/rash.rb +0 -28
  208. data/lib/alf/relation.rb +0 -28
  209. data/lib/alf/relation/class_methods.rb +0 -28
  210. data/lib/alf/relation/instance_methods.rb +0 -119
  211. data/lib/alf/renderer.rb +0 -32
  212. data/lib/alf/renderer/class_methods.rb +0 -58
  213. data/lib/alf/renderer/instance_methods.rb +0 -55
  214. data/lib/alf/renderer/rash.rb +0 -33
  215. data/lib/alf/renderer/text.rb +0 -198
  216. data/lib/alf/tools.rb +0 -15
  217. data/lib/alf/tools/coerce.rb +0 -25
  218. data/lib/alf/tools/miscellaneous.rb +0 -111
  219. data/lib/alf/tools/to_lispy.rb +0 -96
  220. data/lib/alf/tools/to_relation.rb +0 -54
  221. data/lib/alf/tools/to_ruby_literal.rb +0 -31
  222. data/lib/alf/tools/tuple_handle.rb +0 -60
  223. data/lib/alf/types.rb +0 -49
  224. data/lib/alf/types/attr_list.rb +0 -160
  225. data/lib/alf/types/attr_name.rb +0 -66
  226. data/lib/alf/types/boolean.rb +0 -25
  227. data/lib/alf/types/heading.rb +0 -135
  228. data/lib/alf/types/ordering.rb +0 -146
  229. data/lib/alf/types/renaming.rb +0 -97
  230. data/lib/alf/types/size.rb +0 -57
  231. data/lib/alf/types/summarization.rb +0 -138
  232. data/lib/alf/types/tuple_computation.rb +0 -136
  233. data/lib/alf/types/tuple_expression.rb +0 -152
  234. data/lib/alf/types/tuple_predicate.rb +0 -73
  235. data/spec/integration/__database__/group.alf +0 -3
  236. data/spec/integration/__database__/parts.rash +0 -6
  237. data/spec/integration/__database__/suppliers.rash +0 -5
  238. data/spec/integration/__database__/suppliers_csv.csv +0 -6
  239. data/spec/integration/__database__/supplies.rash +0 -12
  240. data/spec/integration/alf/example.rash +0 -1
  241. data/spec/integration/alf/test_Relation.rb +0 -32
  242. data/spec/integration/ext/test_relation.rb +0 -16
  243. data/spec/integration/lispy/test_relation.rb +0 -37
  244. data/spec/integration/lispy/test_run.rb +0 -40
  245. data/spec/integration/lispy/test_tuple.rb +0 -36
  246. data/spec/integration/semantics/test_join.alf +0 -9
  247. data/spec/integration/semantics/test_minus.alf +0 -5
  248. data/spec/integration/semantics/test_project.alf +0 -8
  249. data/spec/integration/semantics/test_rank.alf +0 -34
  250. data/spec/integration/shell/alf/alf.db +0 -0
  251. data/spec/integration/shell/alf/alf_e.cmd +0 -1
  252. data/spec/integration/shell/alf/alf_e.stdout +0 -4
  253. data/spec/integration/shell/alf/alf_env.cmd +0 -1
  254. data/spec/integration/shell/alf/alf_env.stdout +0 -5
  255. data/spec/integration/shell/alf/alf_env_sqlite.cmd +0 -1
  256. data/spec/integration/shell/alf/alf_env_sqlite.stdout +0 -9
  257. data/spec/integration/shell/alf/alf_help.cmd +0 -1
  258. data/spec/integration/shell/alf/alf_help.stdout +0 -69
  259. data/spec/integration/shell/alf/alf_implicit.alf +0 -1
  260. data/spec/integration/shell/alf/alf_implicit_exec.cmd +0 -1
  261. data/spec/integration/shell/alf/alf_implicit_exec.stdout +0 -4
  262. data/spec/integration/shell/alf/alf_r.cmd +0 -1
  263. data/spec/integration/shell/alf/alf_r.stdout +0 -5
  264. data/spec/integration/shell/alf/alf_version.cmd +0 -1
  265. data/spec/integration/shell/alf/alf_version.stdout +0 -2
  266. data/spec/integration/shell/alf/alf_yaml.cmd +0 -1
  267. data/spec/integration/shell/alf/alf_yaml.stdout +0 -22
  268. data/spec/integration/shell/alf/rel.rash +0 -1
  269. data/spec/integration/shell/autonum/autonum_0.cmd +0 -1
  270. data/spec/integration/shell/autonum/autonum_0.stdout +0 -9
  271. data/spec/integration/shell/autonum/autonum_1.cmd +0 -1
  272. data/spec/integration/shell/autonum/autonum_1.stdout +0 -9
  273. data/spec/integration/shell/clip/clip_0.cmd +0 -1
  274. data/spec/integration/shell/clip/clip_0.stdout +0 -9
  275. data/spec/integration/shell/clip/clip_1.cmd +0 -1
  276. data/spec/integration/shell/clip/clip_1.stdout +0 -9
  277. data/spec/integration/shell/coerce/coerce_1.cmd +0 -1
  278. data/spec/integration/shell/coerce/coerce_1.stdout +0 -5
  279. data/spec/integration/shell/compact/compact_0.cmd +0 -1
  280. data/spec/integration/shell/compact/compact_0.stdout +0 -9
  281. data/spec/integration/shell/defaults/defaults_0.cmd +0 -1
  282. data/spec/integration/shell/defaults/defaults_0.stdout +0 -9
  283. data/spec/integration/shell/defaults/defaults_1.cmd +0 -1
  284. data/spec/integration/shell/defaults/defaults_1.stdout +0 -9
  285. data/spec/integration/shell/defaults/defaults_2.cmd +0 -1
  286. data/spec/integration/shell/defaults/defaults_2.stdout +0 -9
  287. data/spec/integration/shell/extend/extend_0.cmd +0 -1
  288. data/spec/integration/shell/extend/extend_0.stdout +0 -16
  289. data/spec/integration/shell/generator/generator_1.cmd +0 -1
  290. data/spec/integration/shell/generator/generator_1.stdout +0 -10
  291. data/spec/integration/shell/generator/generator_2.cmd +0 -1
  292. data/spec/integration/shell/generator/generator_2.stdout +0 -5
  293. data/spec/integration/shell/generator/generator_3.cmd +0 -1
  294. data/spec/integration/shell/generator/generator_3.stdout +0 -5
  295. data/spec/integration/shell/group/group_0.cmd +0 -1
  296. data/spec/integration/shell/group/group_0.stdout +0 -32
  297. data/spec/integration/shell/group/group_1.cmd +0 -1
  298. data/spec/integration/shell/group/group_1.stdout +0 -32
  299. data/spec/integration/shell/help/help_1.cmd +0 -1
  300. data/spec/integration/shell/help/help_1.stdout +0 -24
  301. data/spec/integration/shell/intersect/intersect_0.cmd +0 -1
  302. data/spec/integration/shell/intersect/intersect_0.stdout +0 -9
  303. data/spec/integration/shell/join/join_0.cmd +0 -1
  304. data/spec/integration/shell/join/join_0.stdout +0 -16
  305. data/spec/integration/shell/matching/matching_0.cmd +0 -1
  306. data/spec/integration/shell/matching/matching_0.stdout +0 -8
  307. data/spec/integration/shell/minus/minus_0.cmd +0 -1
  308. data/spec/integration/shell/minus/minus_0.stdout +0 -4
  309. data/spec/integration/shell/not-matching/not-matching_0.cmd +0 -1
  310. data/spec/integration/shell/not-matching/not-matching_0.stdout +0 -5
  311. data/spec/integration/shell/project/project_0.cmd +0 -1
  312. data/spec/integration/shell/project/project_0.stdout +0 -9
  313. data/spec/integration/shell/project/project_1.cmd +0 -1
  314. data/spec/integration/shell/project/project_1.stdout +0 -9
  315. data/spec/integration/shell/quota/quota_0.cmd +0 -1
  316. data/spec/integration/shell/quota/quota_0.stdout +0 -16
  317. data/spec/integration/shell/rank/rank_1.cmd +0 -1
  318. data/spec/integration/shell/rank/rank_1.stdout +0 -10
  319. data/spec/integration/shell/rank/rank_2.cmd +0 -1
  320. data/spec/integration/shell/rank/rank_2.stdout +0 -10
  321. data/spec/integration/shell/rank/rank_3.cmd +0 -1
  322. data/spec/integration/shell/rank/rank_3.stdout +0 -10
  323. data/spec/integration/shell/rank/rank_4.cmd +0 -1
  324. data/spec/integration/shell/rank/rank_4.stdout +0 -6
  325. data/spec/integration/shell/rank/rank_5.cmd +0 -1
  326. data/spec/integration/shell/rank/rank_5.stdout +0 -6
  327. data/spec/integration/shell/rename/rename_0.cmd +0 -1
  328. data/spec/integration/shell/rename/rename_0.stdout +0 -9
  329. data/spec/integration/shell/restrict/restrict_0.cmd +0 -1
  330. data/spec/integration/shell/restrict/restrict_0.stdout +0 -6
  331. data/spec/integration/shell/restrict/restrict_1.cmd +0 -1
  332. data/spec/integration/shell/restrict/restrict_1.stdout +0 -6
  333. data/spec/integration/shell/show/show_base.cmd +0 -1
  334. data/spec/integration/shell/show/show_base.stdout +0 -9
  335. data/spec/integration/shell/show/show_base_sort_1.cmd +0 -1
  336. data/spec/integration/shell/show/show_base_sort_1.stdout +0 -9
  337. data/spec/integration/shell/show/show_base_sort_2.cmd +0 -1
  338. data/spec/integration/shell/show/show_base_sort_2.stdout +0 -9
  339. data/spec/integration/shell/show/show_conflictual.cmd +0 -1
  340. data/spec/integration/shell/show/show_conflictual.stdout +0 -5
  341. data/spec/integration/shell/show/show_csv.cmd +0 -1
  342. data/spec/integration/shell/show/show_csv.stdout +0 -6
  343. data/spec/integration/shell/show/show_ff.cmd +0 -1
  344. data/spec/integration/shell/show/show_ff.stdout +0 -10
  345. data/spec/integration/shell/show/show_rash.cmd +0 -1
  346. data/spec/integration/shell/show/show_rash.stdout +0 -5
  347. data/spec/integration/shell/show/show_rash_pretty.cmd +0 -1
  348. data/spec/integration/shell/show/show_rash_pretty.stdout +0 -30
  349. data/spec/integration/shell/show/show_yaml.cmd +0 -1
  350. data/spec/integration/shell/show/show_yaml.stdout +0 -22
  351. data/spec/integration/shell/sort/sort_0.cmd +0 -1
  352. data/spec/integration/shell/sort/sort_0.stdout +0 -9
  353. data/spec/integration/shell/sort/sort_1.cmd +0 -1
  354. data/spec/integration/shell/sort/sort_1.stdout +0 -9
  355. data/spec/integration/shell/sort/sort_2.cmd +0 -1
  356. data/spec/integration/shell/sort/sort_2.stdout +0 -9
  357. data/spec/integration/shell/sort/sort_3.cmd +0 -1
  358. data/spec/integration/shell/sort/sort_3.stdout +0 -9
  359. data/spec/integration/shell/summarize/summarize_0.cmd +0 -1
  360. data/spec/integration/shell/summarize/summarize_0.stdout +0 -8
  361. data/spec/integration/shell/ungroup/ungroup_0.cmd +0 -1
  362. data/spec/integration/shell/ungroup/ungroup_0.stdout +0 -16
  363. data/spec/integration/shell/union/union_0.cmd +0 -1
  364. data/spec/integration/shell/union/union_0.stdout +0 -9
  365. data/spec/integration/shell/unwrap/unwrap_0.cmd +0 -1
  366. data/spec/integration/shell/unwrap/unwrap_0.stdout +0 -9
  367. data/spec/integration/shell/wrap/wrap_0.cmd +0 -1
  368. data/spec/integration/shell/wrap/wrap_0.stdout +0 -9
  369. data/spec/integration/test_alf.rb +0 -34
  370. data/spec/integration/test_examples.rb +0 -15
  371. data/spec/integration/test_lispy.rb +0 -31
  372. data/spec/integration/test_semantics.rb +0 -40
  373. data/spec/integration/test_shell.rb +0 -47
  374. data/spec/regression/alf_file/__FILE__.alf +0 -2
  375. data/spec/regression/alf_file/suppliers.rash +0 -5
  376. data/spec/regression/alf_file/test___FILE__.rb +0 -17
  377. data/spec/regression/heading/test_heading_with_date.rb +0 -12
  378. data/spec/regression/lispy/test_compile.rb +0 -14
  379. data/spec/regression/logs/apache_combined.log +0 -5
  380. data/spec/regression/logs/test_path_attribute.rb +0 -25
  381. data/spec/regression/relation/test_relation_allbut_all.rb +0 -14
  382. data/spec/regression/relation/test_relation_with_date.rb +0 -12
  383. data/spec/regression/restrict/test_restrict_with_keywords.rb +0 -17
  384. data/spec/shared/a_valid_type_implementation.rb +0 -47
  385. data/spec/shared/a_value.rb +0 -12
  386. data/spec/shared/an_operator_class.rb +0 -36
  387. data/spec/unit/alf-core/aggregator/test_avg.rb +0 -22
  388. data/spec/unit/alf-core/aggregator/test_collect.rb +0 -25
  389. data/spec/unit/alf-core/aggregator/test_concat.rb +0 -31
  390. data/spec/unit/alf-core/aggregator/test_count.rb +0 -17
  391. data/spec/unit/alf-core/aggregator/test_max.rb +0 -23
  392. data/spec/unit/alf-core/aggregator/test_min.rb +0 -23
  393. data/spec/unit/alf-core/aggregator/test_stddev.rb +0 -27
  394. data/spec/unit/alf-core/aggregator/test_sum.rb +0 -23
  395. data/spec/unit/alf-core/aggregator/test_variance.rb +0 -29
  396. data/spec/unit/alf-core/assumptions/test_file.rb +0 -17
  397. data/spec/unit/alf-core/assumptions/test_instance_eval.rb +0 -15
  398. data/spec/unit/alf-core/assumptions/test_scoping.rb +0 -29
  399. data/spec/unit/alf-core/assumptions/test_set.rb +0 -64
  400. data/spec/unit/alf-core/environment/examples/suppliers.rash +0 -5
  401. data/spec/unit/alf-core/environment/test_folder.rb +0 -53
  402. data/spec/unit/alf-core/operator/non_relational/test_autonum.rb +0 -48
  403. data/spec/unit/alf-core/operator/non_relational/test_clip.rb +0 -35
  404. data/spec/unit/alf-core/operator/non_relational/test_coerce.rb +0 -29
  405. data/spec/unit/alf-core/operator/non_relational/test_compact.rb +0 -32
  406. data/spec/unit/alf-core/operator/non_relational/test_defaults.rb +0 -53
  407. data/spec/unit/alf-core/operator/non_relational/test_generator.rb +0 -60
  408. data/spec/unit/alf-core/operator/non_relational/test_sort.rb +0 -60
  409. data/spec/unit/alf-core/operator/relational/test_extend.rb +0 -28
  410. data/spec/unit/alf-core/operator/relational/test_group.rb +0 -39
  411. data/spec/unit/alf-core/operator/relational/test_heading.rb +0 -27
  412. data/spec/unit/alf-core/operator/relational/test_intersect.rb +0 -58
  413. data/spec/unit/alf-core/operator/relational/test_join.rb +0 -36
  414. data/spec/unit/alf-core/operator/relational/test_minus.rb +0 -56
  415. data/spec/unit/alf-core/operator/relational/test_project.rb +0 -62
  416. data/spec/unit/alf-core/operator/relational/test_quota.rb +0 -36
  417. data/spec/unit/alf-core/operator/relational/test_rank.rb +0 -48
  418. data/spec/unit/alf-core/operator/relational/test_rename.rb +0 -26
  419. data/spec/unit/alf-core/operator/relational/test_restrict.rb +0 -45
  420. data/spec/unit/alf-core/operator/relational/test_summarize.rb +0 -44
  421. data/spec/unit/alf-core/operator/relational/test_ungroup.rb +0 -29
  422. data/spec/unit/alf-core/operator/relational/test_union.rb +0 -35
  423. data/spec/unit/alf-core/operator/relational/test_unwrap.rb +0 -26
  424. data/spec/unit/alf-core/operator/relational/test_wrap.rb +0 -26
  425. data/spec/unit/alf-core/operator/signature/test_argv2args.rb +0 -82
  426. data/spec/unit/alf-core/operator/signature/test_collect_on.rb +0 -38
  427. data/spec/unit/alf-core/operator/signature/test_initialize.rb +0 -17
  428. data/spec/unit/alf-core/operator/signature/test_install.rb +0 -56
  429. data/spec/unit/alf-core/operator/signature/test_option_parser.rb +0 -36
  430. data/spec/unit/alf-core/operator/signature/test_parse_args.rb +0 -90
  431. data/spec/unit/alf-core/operator/signature/test_to_lispy.rb +0 -102
  432. data/spec/unit/alf-core/operator/signature/test_to_shell.rb +0 -103
  433. data/spec/unit/alf-core/operator/test_non_relational.rb +0 -20
  434. data/spec/unit/alf-core/operator/test_relational.rb +0 -31
  435. data/spec/unit/alf-core/reader/input.rb +0 -2
  436. data/spec/unit/alf-core/reader/test_alf_file.rb +0 -30
  437. data/spec/unit/alf-core/reader/test_initialize.rb +0 -60
  438. data/spec/unit/alf-core/reader/test_looks_a_path.rb +0 -20
  439. data/spec/unit/alf-core/reader/test_rash.rb +0 -31
  440. data/spec/unit/alf-core/relation/test_coerce.rb +0 -53
  441. data/spec/unit/alf-core/relation/test_inspect.rb +0 -20
  442. data/spec/unit/alf-core/relation/test_relops.rb +0 -55
  443. data/spec/unit/alf-core/relation/test_to_a.rb +0 -41
  444. data/spec/unit/alf-core/renderer/test_initialize.rb +0 -60
  445. data/spec/unit/alf-core/test_aggregator.rb +0 -58
  446. data/spec/unit/alf-core/test_environment.rb +0 -30
  447. data/spec/unit/alf-core/test_operator.rb +0 -16
  448. data/spec/unit/alf-core/test_reader.rb +0 -40
  449. data/spec/unit/alf-core/test_relation.rb +0 -75
  450. data/spec/unit/alf-core/test_renderer.rb +0 -53
  451. data/spec/unit/alf-core/text/test_cell.rb +0 -35
  452. data/spec/unit/alf-core/text/test_row.rb +0 -30
  453. data/spec/unit/alf-core/text/test_table.rb +0 -39
  454. data/spec/unit/alf-core/tools/test_class_name.rb +0 -16
  455. data/spec/unit/alf-core/tools/test_coalesce.rb +0 -19
  456. data/spec/unit/alf-core/tools/test_coerce.rb +0 -16
  457. data/spec/unit/alf-core/tools/test_ruby_case.rb +0 -16
  458. data/spec/unit/alf-core/tools/test_to_lispy.rb +0 -145
  459. data/spec/unit/alf-core/tools/test_to_relation.rb +0 -39
  460. data/spec/unit/alf-core/tools/test_to_ruby_literal.rb +0 -10
  461. data/spec/unit/alf-core/tools/test_tuple_handle.rb +0 -52
  462. data/spec/unit/alf-core/tools/test_tuple_heading.rb +0 -15
  463. data/spec/unit/alf-core/tools/test_varargs.rb +0 -19
  464. data/spec/unit/alf-core/types/test_attr_list.rb +0 -188
  465. data/spec/unit/alf-core/types/test_attr_name.rb +0 -78
  466. data/spec/unit/alf-core/types/test_boolean.rb +0 -42
  467. data/spec/unit/alf-core/types/test_class_methods.rb +0 -24
  468. data/spec/unit/alf-core/types/test_heading.rb +0 -146
  469. data/spec/unit/alf-core/types/test_ordering.rb +0 -185
  470. data/spec/unit/alf-core/types/test_renaming.rb +0 -72
  471. data/spec/unit/alf-core/types/test_size.rb +0 -74
  472. data/spec/unit/alf-core/types/test_summarization.rb +0 -95
  473. data/spec/unit/alf-core/types/test_tuple_computation.rb +0 -96
  474. data/spec/unit/alf-core/types/test_tuple_expression.rb +0 -122
  475. data/spec/unit/alf-core/types/test_tuple_predicate.rb +0 -108
  476. data/spec/unit/alf-csv/input.csv +0 -3
  477. data/spec/unit/alf-csv/test_reader.rb +0 -66
  478. data/spec/unit/alf-csv/test_renderer.rb +0 -73
  479. data/spec/unit/alf-engine/compact/test_set.rb +0 -33
  480. data/spec/unit/alf-engine/compact/test_uniq.rb +0 -33
  481. data/spec/unit/alf-engine/group/test_hash.rb +0 -34
  482. data/spec/unit/alf-engine/join/test_hash.rb +0 -55
  483. data/spec/unit/alf-engine/materialize/test_array.rb +0 -28
  484. data/spec/unit/alf-engine/materialize/test_hash.rb +0 -76
  485. data/spec/unit/alf-engine/quota/test_cesure.rb +0 -34
  486. data/spec/unit/alf-engine/rank/test_cesure.rb +0 -47
  487. data/spec/unit/alf-engine/semi/test_hash.rb +0 -58
  488. data/spec/unit/alf-engine/sort/test_in_memory.rb +0 -32
  489. data/spec/unit/alf-engine/summarize/test_cesure.rb +0 -36
  490. data/spec/unit/alf-engine/summarize/test_hash.rb +0 -36
  491. data/spec/unit/alf-engine/test_aggregate.rb +0 -26
  492. data/spec/unit/alf-engine/test_autonum.rb +0 -24
  493. data/spec/unit/alf-engine/test_clip.rb +0 -34
  494. data/spec/unit/alf-engine/test_coerce.rb +0 -35
  495. data/spec/unit/alf-engine/test_compact.rb +0 -33
  496. data/spec/unit/alf-engine/test_concat.rb +0 -38
  497. data/spec/unit/alf-engine/test_defaults.rb +0 -37
  498. data/spec/unit/alf-engine/test_filter.rb +0 -23
  499. data/spec/unit/alf-engine/test_generator.rb +0 -25
  500. data/spec/unit/alf-engine/test_rename.rb +0 -24
  501. data/spec/unit/alf-engine/test_set_attr.rb +0 -38
  502. data/spec/unit/alf-engine/test_sort.rb +0 -32
  503. data/spec/unit/alf-engine/test_ungroup.rb +0 -28
  504. data/spec/unit/alf-engine/test_unwrap.rb +0 -20
  505. data/spec/unit/alf-engine/test_wrap.rb +0 -26
  506. data/spec/unit/alf-logs/apache_combined.log +0 -5
  507. data/spec/unit/alf-logs/postgresql.log +0 -29
  508. data/spec/unit/alf-logs/test_reader.rb +0 -57
  509. data/spec/unit/alf-sequel/alf.db +0 -0
  510. data/spec/unit/alf-sequel/test_environment.rb +0 -74
  511. data/spec/unit/alf-shell/doc_manager/dynamic.md +0 -1
  512. data/spec/unit/alf-shell/doc_manager/example.md +0 -1
  513. data/spec/unit/alf-shell/doc_manager/example_1.txt +0 -11
  514. data/spec/unit/alf-shell/doc_manager/static.md +0 -1
  515. data/spec/unit/alf-shell/doc_manager/test_call.rb +0 -48
  516. data/spec/unit/alf-shell/main/test_class_methods.rb +0 -44
  517. data/spec/unit/alf-shell/operator/test_autonum.rb +0 -28
  518. data/spec/unit/alf-shell/operator/test_clip.rb +0 -29
  519. data/spec/unit/alf-shell/operator/test_coerce.rb +0 -21
  520. data/spec/unit/alf-shell/operator/test_compact.rb +0 -16
  521. data/spec/unit/alf-shell/operator/test_defaults.rb +0 -29
  522. data/spec/unit/alf-shell/operator/test_extend.rb +0 -21
  523. data/spec/unit/alf-shell/operator/test_generator.rb +0 -37
  524. data/spec/unit/alf-shell/operator/test_group.rb +0 -32
  525. data/spec/unit/alf-shell/operator/test_heading.rb +0 -16
  526. data/spec/unit/alf-shell/operator/test_intersect.rb +0 -18
  527. data/spec/unit/alf-shell/operator/test_join.rb +0 -18
  528. data/spec/unit/alf-shell/operator/test_matching.rb +0 -18
  529. data/spec/unit/alf-shell/operator/test_minus.rb +0 -18
  530. data/spec/unit/alf-shell/operator/test_not_matching.rb +0 -18
  531. data/spec/unit/alf-shell/operator/test_project.rb +0 -38
  532. data/spec/unit/alf-shell/operator/test_quota.rb +0 -23
  533. data/spec/unit/alf-shell/operator/test_rank.rb +0 -30
  534. data/spec/unit/alf-shell/operator/test_rename.rb +0 -21
  535. data/spec/unit/alf-shell/operator/test_restrict.rb +0 -35
  536. data/spec/unit/alf-shell/operator/test_sort.rb +0 -49
  537. data/spec/unit/alf-shell/operator/test_summarize.rb +0 -30
  538. data/spec/unit/alf-shell/operator/test_ungroup.rb +0 -28
  539. data/spec/unit/alf-shell/operator/test_union.rb +0 -18
  540. data/spec/unit/alf-shell/operator/test_unwrap.rb +0 -28
  541. data/spec/unit/alf-shell/operator/test_wrap.rb +0 -30
  542. data/tasks/clean.rake +0 -3
  543. data/tasks/debug_mail.rake +0 -75
  544. data/tasks/debug_mail.txt +0 -18
  545. data/tasks/gh-pages.rake +0 -68
  546. data/tasks/integration_test.rake +0 -43
  547. data/tasks/regression_test.rake +0 -44
  548. data/tasks/unit_test.rake +0 -44
  549. data/tasks/yard.rake +0 -51
@@ -1,18 +0,0 @@
1
- module Alf
2
- module Operator
3
- module Relational
4
- class Restrict
5
- include Relational, Unary
6
-
7
- signature do |s|
8
- s.argument :predicate, TuplePredicate, "true"
9
- end
10
-
11
- def compile
12
- Engine::Filter.new(operand, predicate)
13
- end
14
-
15
- end # class Restrict
16
- end # module Relational
17
- end # module Operator
18
- end # module Alf
@@ -1,27 +0,0 @@
1
- module Alf
2
- module Operator
3
- module Relational
4
- class Summarize
5
- include Relational, Unary
6
-
7
- signature do |s|
8
- s.argument :by, AttrList, []
9
- s.argument :summarization, Summarization, {}
10
- s.option :allbut, Boolean, false, "Summarize on all but specified attributes?"
11
- end
12
-
13
- # (see Operator#compile)
14
- def compile
15
- if @allbut
16
- Engine::Summarize::Hash.new(operand, by, summarization, allbut)
17
- else
18
- op = Engine::Sort.new(operand, by.to_ordering)
19
- op = Engine::Summarize::Cesure.new(op, by, summarization, allbut)
20
- op
21
- end
22
- end
23
-
24
- end # class Summarize
25
- end # module Relational
26
- end # module Operator
27
- end # module Alf
@@ -1,19 +0,0 @@
1
- module Alf
2
- module Operator
3
- module Relational
4
- class Ungroup
5
- include Relational, Unary
6
-
7
- signature do |s|
8
- s.argument :attribute, AttrName, :grouped
9
- end
10
-
11
- # (see Operator#compile)
12
- def compile
13
- Engine::Ungroup.new(operand, attribute)
14
- end
15
-
16
- end # class Ungroup
17
- end # module Relational
18
- end # module Operator
19
- end # module Alf
@@ -1,20 +0,0 @@
1
- module Alf
2
- module Operator
3
- module Relational
4
- class Union
5
- include Relational, Binary
6
-
7
- signature do |s|
8
- end
9
-
10
- # (see Operator#compile)
11
- def compile
12
- op = Engine::Concat.new([left, right])
13
- op = Engine::Compact.new(op)
14
- op
15
- end
16
-
17
- end # class Union
18
- end # module Relational
19
- end # module Operator
20
- end # module Alf
@@ -1,19 +0,0 @@
1
- module Alf
2
- module Operator
3
- module Relational
4
- class Unwrap
5
- include Relational, Unary
6
-
7
- signature do |s|
8
- s.argument :attribute, AttrName, :wrapped
9
- end
10
-
11
- # (see Operator#compile)
12
- def compile
13
- Engine::Unwrap.new(operand, attribute)
14
- end
15
-
16
- end # class Unwrap
17
- end # module Relational
18
- end # module Operator
19
- end # module Alf
@@ -1,20 +0,0 @@
1
- module Alf
2
- module Operator
3
- module Relational
4
- class Wrap
5
- include Relational, Unary
6
-
7
- signature do |s|
8
- s.argument :attributes, AttrList, []
9
- s.argument :as, AttrName, :wrapped
10
- end
11
-
12
- # (see Operator#compile)
13
- def compile
14
- Engine::Wrap.new(operand, attributes, as, false)
15
- end
16
-
17
- end # class Wrap
18
- end # module Relational
19
- end # module Operator
20
- end # module Alf
@@ -1,233 +0,0 @@
1
- module Alf
2
- module Operator
3
- # Provides an operator signature
4
- class Signature
5
-
6
- # @return [Class] the operator class to which this signature belongs
7
- attr_reader :operator
8
-
9
- # @return [Array] signature arguments
10
- attr_reader :arguments
11
-
12
- # @return [Array] signature options
13
- attr_reader :options
14
-
15
- # Creates an empty signature instance
16
- #
17
- # @param [Class] the operator class to which this signature belongs
18
- def initialize(operator)
19
- @operator = operator
20
- @arguments = []
21
- @options = []
22
- yield(self) if block_given?
23
- end
24
-
25
- # Adds an argument to the signature
26
- #
27
- # @param [Symbol] name argument name
28
- # @param [Class] domain argument domain
29
- # @param [Object] default (optional) default value
30
- def argument(name, domain, default = nil, descr = nil)
31
- arguments << [name, domain, default, descr]
32
- end
33
-
34
- # Adds an option to the signature
35
- #
36
- # @param [Symbol] name argument name
37
- # @param [Class] domain argument domain
38
- # @param [Object] default (optional) default value
39
- def option(name, domain, default = nil, descr = nil)
40
- options << [name, domain, default, descr]
41
- end
42
-
43
- # Builds an option parser instance `opt` prepared for installing options on
44
- # `receiver`.
45
- #
46
- # @param [Hash|Operator] a receiver for option values
47
- # @param [OptionParser] opt the parser to fill with options
48
- # @return [OptionParser] `opt`
49
- def option_parser(receiver, opt = OptionParser.new)
50
- options.each do |option|
51
- name, dom, defa, descr = option
52
- opt.on(option_name(option), descr || "") do |val|
53
- if receiver.is_a?(Hash)
54
- receiver[name] = val
55
- else
56
- receiver.send(:"#{name}=", val)
57
- end
58
- end
59
- end
60
- opt
61
- end
62
-
63
- # Installs the signature on the operator class
64
- #
65
- # This method installs an attr reader and an attr writer for each
66
- # signature argument and each signature option.
67
- #
68
- # @return [Hash] the default options to use
69
- def install
70
- clazz = operator
71
- code = (arguments + options).each{|siginfo|
72
- name, domain, = siginfo
73
- clazz.send(:attr_reader, name)
74
- clazz.send(:define_method, :"#{name}=") do |val|
75
- instance_variable_set(:"@#{name}", Tools.coerce(val, domain))
76
- end
77
- clazz.send(:private, :"#{name}=")
78
- }
79
- default_options
80
- end
81
-
82
- # Parses arguments `args` passed to the operator `initialize` and
83
- # sets attributes accordingly on `receiver`.
84
- #
85
- # @param [Array] args an array of initialize arguments
86
- # @param [Operator] receiver an operator instance
87
- # @return [Operator] installed `receiver`
88
- def parse_args(args, receiver)
89
-
90
- # 1) Check and set operands, passed as an array as first argument
91
- invalid_args!(args) unless args.first.is_a?(Array)
92
- receiver.operands = args.shift
93
-
94
- # 2) Extract options if provided
95
- optargs = default_options
96
- if args.size == (1+arguments.size)
97
- # options are passed as last argument
98
- invalid_args!(args) unless args.last.is_a?(Hash)
99
- optargs = optargs.merge(args.pop)
100
- elsif args.size > arguments.size
101
- # too many arguments here
102
- invalid_args!(args)
103
- end
104
-
105
- # 3) Set options now, including default ones
106
- optargs.each_pair do |name,val|
107
- receiver.send(:"#{name}=", val)
108
- end
109
-
110
- # 4) Parse other arguments now
111
- with_each_arg(args) do |name,dom,value|
112
- invalid_args!(args) if value.nil?
113
- receiver.send(:"#{name}=", value)
114
- end
115
-
116
- receiver
117
- end
118
-
119
- # Converts commandline arguments to operator constructor arguments
120
- def argv2args(argv)
121
- # First split over --
122
- argv = Quickl.split_commandline_args(argv)
123
-
124
- # Parse the options and replace argv[0] by remaining arguments
125
- opts = {}
126
- argv[0] = option_parser(opts).parse!(argv[0])
127
- opts = default_options.merge(opts)
128
-
129
- # Operands are argv[0], and can be removed
130
- oper = argv.shift
131
-
132
- # Coerce each remaining argument according to the signature
133
- args = []
134
- with_each_arg(argv) do |name,dom,value|
135
- invalid_args!(args) if value.nil?
136
- args << dom.from_argv(Array(value))
137
- end
138
-
139
- [oper, args, opts]
140
- end
141
-
142
- # Collects signature values on a given operator.
143
- #
144
- # This methods returns a triple `[datasets, arguments, options]` with
145
- # the respective values collected on `op`.
146
- #
147
- # @param [Operator] op an operator, which should be an instance of
148
- # `self.operator`
149
- # @return [Array] a triple [datasets, arguments, options] with operands,
150
- # then signature values
151
- def collect_on(op)
152
- oper = op.operands
153
- args = arguments.map{|name,_| op.send(name) }
154
- opts = Hash[options.map{|name,dom,defa,_|
155
- val = op.send(name)
156
- (val == defa) ? nil : [name, val]
157
- }.compact]
158
- [oper, args, opts]
159
- end
160
-
161
- # Returns a lispy synopsis for this signature
162
- #
163
- # Example:
164
- #
165
- # Alf::Operator::Relational::Project.signature.to_shell
166
- # # => "(project operand, attributes:AttrList, {allbut: Boolean})"
167
- def to_lispy
168
- cmd = operator.rubycase_name
169
- oper = operator.nullary? ? "" :
170
- (operator.unary? ? "operand" : "left, right")
171
-
172
- args = arguments.collect{|name,dom,_|
173
- dom.to_s =~ /::([A-Za-z]+)$/
174
- "#{name}:#{$1}"
175
- }.join(", ")
176
- args = (args.empty? ? "#{oper}" : "#{oper}, #{args}").strip
177
-
178
- opts = options.collect{|name,dom,_|
179
- dom.to_s =~ /::([A-Za-z]+)$/
180
- "#{name}: #{$1}"
181
- }.join(', ')
182
- opts = opts.empty? ? "" : "{#{opts}}"
183
-
184
- argopt = [args, opts].select{|s| !s.empty?}.join(', ')
185
- "(#{cmd} #{argopt}".strip + ")"
186
- end
187
-
188
- # Returns a shell synopsis for this signature.
189
- #
190
- # Example:
191
- #
192
- # Alf::Operator::Relational::Project.signature.to_shell
193
- # # => "alf project [--allbut] [OPERAND] -- ATTRIBUTES"
194
- def to_shell
195
- oper = operator.nullary? ? "" :
196
- (operator.unary? ? "[OPERAND]" : "[LEFT] RIGHT")
197
- opts = options.collect{|opt| "[#{option_name(opt)}]" }.join(" ")
198
- args = arguments.collect{|arg,_| "#{arg.to_s.upcase}" }.join(" -- ")
199
- optargs = "#{opts} #{oper} " + (args.empty? ? "" : "-- #{args}")
200
- "alf #{operator.rubycase_name} #{optargs.strip}".strip
201
- end
202
-
203
- private
204
-
205
- # @return the default options as a Hash
206
- def default_options
207
- @default_options ||=
208
- Hash[options.select{|opt| !opt[2].nil? }.
209
- map{|opt| [opt[0], opt[2]]}]
210
- end
211
-
212
- # @return the name to use in shell for `option`
213
- def option_name(option)
214
- name, domain, defa, = option
215
- domain == Boolean ? "--#{name}" : "--#{name}=#{name.to_s.upcase}"
216
- end
217
-
218
- # Yields `(name,dom,value)` triples for each argument value
219
- def with_each_arg(args)
220
- arguments.zip(args).collect do |sigpart,subargs|
221
- name, dom, default = sigpart
222
- val = Array(subargs).empty? ? default : subargs
223
- yield(name, dom, val)
224
- end
225
- end
226
-
227
- def invalid_args!(args, msg = "Invalid `#{args.inspect}` for #{self}")
228
- raise ArgumentError, msg, caller
229
- end
230
-
231
- end # class Signature
232
- end # module Operator
233
- end # module Alf
@@ -1,16 +0,0 @@
1
- module Alf
2
- module Operator
3
- #
4
- # Specialization of Operator for operators that work on a unary input
5
- #
6
- module Unary
7
- include Operator
8
-
9
- # Simply returns the first operand
10
- def operand
11
- operands.first
12
- end
13
-
14
- end # module Unary
15
- end # module Operator
16
- end # module Alf
@@ -1,37 +0,0 @@
1
- module Alf
2
- #
3
- # Implements an Iterator at the interface with the outside world.
4
- #
5
- # The contrat of a Reader is simply to be an Iterator. Unlike operators,
6
- # however, readers are not expected to take other iterators as input, but IO
7
- # objects, database tables, or something similar instead. This base class
8
- # provides a default behavior for readers that works with IO objects. It can
9
- # be safely extended, overriden, or even mimiced (provided that you include
10
- # and implement the Iterator contract).
11
- #
12
- # This class also provides a registration mechanism to help getting Reader
13
- # instances for specific file extensions. A typical scenario for using this
14
- # registration mechanism is as follows:
15
- #
16
- # # Registers a reader kind named :foo, associated with ".foo" file
17
- # # extensions and the FooFileDecoder class (typically a subclass of
18
- # # Reader)
19
- # Reader.register(:foo, [".foo"], FooFileDecoder)
20
- #
21
- # # Later on, you can request a reader instance for a .foo file, as
22
- # # illustrated below.
23
- # r = Reader.reader('/a/path/to/a/file.foo')
24
- #
25
- # # Also, a factory method is automatically installed on the Reader class
26
- # # itself. This factory method can be used with a String, or an IO object.
27
- # r = Reader.foo([a path or a IO object])
28
- #
29
- class Reader
30
- include Iterator
31
-
32
- require 'alf/reader/class_methods'
33
- require 'alf/reader/instance_methods'
34
- require 'alf/reader/rash'
35
- require 'alf/reader/alf_file'
36
- end # class Reader
37
- end # module Alf
@@ -1,24 +0,0 @@
1
- module Alf
2
- class Reader
3
- #
4
- # Specialization of the Reader contract for .alf files.
5
- #
6
- # A .alf file simply contains a query expression in the Lispy DSL. This
7
- # reader decodes and compiles the expression and delegates the enumeration
8
- # to the obtained operator.
9
- #
10
- # Note that an Environment must be wired at creation time. A
11
- # NoSuchDatasetError will certainly occur otherwise.
12
- #
13
- class AlfFile < Reader
14
-
15
- # (see Reader#each)
16
- def each
17
- op = Alf.lispy(environment).compile(input_text, input_path)
18
- op.each(&Proc.new)
19
- end
20
-
21
- Reader.register(:alf, [".alf"], self)
22
- end # module AlfFile
23
- end # class Reader
24
- end # module Alf
@@ -1,91 +0,0 @@
1
- module Alf
2
- class Reader
3
- module ClassMethods
4
-
5
- # @return [Array<Reader>] registered readers
6
- def readers
7
- @readers ||= []
8
- end
9
-
10
- # Registers a reader class associated with specific file extensions.
11
- #
12
- # Registered class must provide a constructor with the following signature
13
- # `new(path_or_io, environment = nil, options = {})`. The registration
14
- # name must be a symbol which can safely be used as a ruby method name.
15
- # A factory method of that name and signature is automatically installed
16
- # on the Reader class.
17
- #
18
- # @param [Symbol] name a name for the kind of data decoded
19
- # @param [Array] extensions file extensions mapped to the registered reader
20
- # class (should include the '.', e.g. '.foo')
21
- # @param [Class] class Reader subclass used to decode this kind of files
22
- def register(name, extensions, clazz)
23
- readers << [name, extensions, clazz]
24
- (class << self; self; end).
25
- send(:define_method, name) do |*args|
26
- clazz.new(*args)
27
- end
28
- end
29
-
30
- # When filepath looks like a String or a path, returns a reader instance
31
- # for the source it denotes. Otherwise, delegates the call to
32
- # `coerce(filepath)`.
33
- #
34
- # @param [:to_str|:to_path] filepath path to a file for which extension
35
- # is recognized
36
- # @param [Array] args optional additional arguments that must be passed at
37
- # reader's class new method.
38
- # @return [Reader] a reader instance built from arguments
39
- # @raise [ArgumentError] if `filepath` is not recognized or no reader can
40
- # be found for this extension.
41
- def reader(filepath, *args)
42
- if looks_a_path?(filepath)
43
- ext = File.extname(filepath.to_s)
44
- has_reader_for_ext!(ext).new(filepath.to_s, *args)
45
- elsif args.empty?
46
- coerce(filepath)
47
- else
48
- raise ArgumentError, "Unable to return a reader for #{filepath} and #{args}"
49
- end
50
- end
51
-
52
- # Coerces `arg` to a Reader instance, using an optional environment to
53
- # convert named datasets.
54
- #
55
- # This method automatically provides readers for Strings and Symbols
56
- # through `environment` (**not** through the reader factory) and for IO
57
- # objects through a Rash reader.
58
- #
59
- # @param [Object] arg any value to coerce to a Reader instance
60
- # @param [Environment] environment to resolved named datasets (optional)
61
- def coerce(arg, environment = nil)
62
- case arg
63
- when Reader
64
- arg
65
- when IO, StringIO
66
- rash(arg, environment)
67
- else
68
- raise ArgumentError, "Unable to coerce #{arg.inspect} to a reader"
69
- end
70
- end
71
-
72
- private
73
-
74
- # Checks if `path` looks like a usable path
75
- def looks_a_path?(path)
76
- return false if path.is_a?(StringIO)
77
- path.respond_to?(:to_str) or path.respond_to?(:to_path)
78
- end
79
-
80
- # @return [Class] the reader class to use for `ext` file extension.
81
- # @raise [ArgumentError] if no such reader class can be found
82
- def has_reader_for_ext!(ext)
83
- entry = readers.find{|r| r[1].include?(ext)}
84
- return entry[2] if entry
85
- raise ArgumentError, "No registered reader for #{ext}"
86
- end
87
-
88
- end # module ClassMethods
89
- extend(ClassMethods)
90
- end # class Reader
91
- end # module Alf