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,135 +0,0 @@
1
- module Alf
2
- module Types
3
- #
4
- # Defines a Heading, that is, a set of attribute (name,domain) pairs.
5
- #
6
- class Heading
7
- include Enumerable
8
-
9
- # @return [Hash] a (freezed) hash of (name, type) pairs
10
- attr_reader :attributes
11
-
12
- # Creates a Heading instance
13
- #
14
- # @param [Hash] a hash of attribute (name, type) pairs where name is
15
- # an AttrName and type is a Class
16
- def initialize(attributes)
17
- @attributes = attributes.dup.freeze
18
- end
19
-
20
- class << self
21
-
22
- # Coerces `arg` to a Heading.
23
- #
24
- # Implemented coercions are:
25
- # - Array: [AttrName, Module, ..., AttrName, Module]
26
- # - Hash: {AttrName => Module, ..., AttrName => Module}
27
- #
28
- # @param [Object] arg value to coerce to a Heading
29
- # @return [Heading] a heading instance when coercion succeeds
30
- # @raise [ArgumentError] is coercion fails
31
- def coerce(arg)
32
- case arg
33
- when Heading
34
- arg
35
- when Array
36
- Heading.new Hash[arg.each_slice(2).map{|k,v|
37
- [ Tools.coerce(k, Symbol),
38
- Tools.coerce(v, Module) ]
39
- }]
40
- when Hash
41
- Heading.new Hash[arg.map{|k,v|
42
- [ Tools.coerce(k, Symbol),
43
- Tools.coerce(v, Module) ]
44
- }]
45
- else
46
- raise ArgumentError, "Unable to coerce #{arg.inspect} to a Heading"
47
- end
48
- end
49
- alias :[] :coerce
50
-
51
- # Coerces commandline arguments to a Heading.
52
- #
53
- # This method simply reuses `coerce(Array)` and therefore shares its
54
- # spec.
55
- #
56
- # @param [Array] argv commandline arguments
57
- # @param [Hash] opts options (unused)
58
- # @return [Heading] a heading instance when coercion succeeds
59
- # @raise [ArgumentError] is coercion fails
60
- def from_argv(argv, opts = {})
61
- coerce(argv)
62
- end
63
-
64
- end # class << self
65
-
66
- # Yields each (name,domain) pair in turn.
67
- def each(&block)
68
- attributes.each(&block)
69
- end
70
-
71
- # Returns heading's cardinality, i.e. the number of (name,type) pairs.
72
- #
73
- # @return [Integer] the number of pairs
74
- def cardinality
75
- attributes.size
76
- end
77
- alias :size :cardinality
78
- alias :count :cardinality
79
-
80
- # Computes the union of this heading with `other`.
81
- #
82
- # When self and other have no common attribute names, compute the
83
- # classical set union on pairs. Otherwise, the type of a common attribute
84
- # is returned as the common super type (see `Types.common_super_type`).
85
- #
86
- # @param [Heading] other another heading
87
- # @return [Heading] the union of this heading with `other`
88
- def union(other)
89
- Heading.new attributes.merge(other.attributes){|k,t1,t2|
90
- Types.common_super_type(t1, t2)
91
- }
92
- end
93
- alias :+ :union
94
- alias :join :union
95
-
96
- # Returns heading's hash code
97
- #
98
- # @return [Integer] the heading's hash code
99
- def hash
100
- attributes.hash
101
- end
102
-
103
- # Checks equality with other heading
104
- #
105
- # Classical set equality applies to headings.
106
- #
107
- # @param [Heading] other another heading
108
- # @return [Boolean] true if other is the same heading than self, false
109
- # otherwise
110
- def ==(other)
111
- other.is_a?(Heading) && (attributes == other.attributes)
112
- end
113
- alias :eql? :==
114
-
115
- # Converts this heading to a Hash of (name,type) pairs
116
- #
117
- # @return [Hash] this heading as a Hash of (name, type) pairs
118
- def to_h
119
- attributes.dup
120
- end
121
-
122
- # Returns a Heading literal
123
- #
124
- # @return [String] a Heading literal
125
- def to_ruby_literal
126
- attributes.empty? ?
127
- "Alf::Heading::EMPTY" :
128
- "Alf::Heading[#{Tools.to_ruby_literal(attributes)[1...-1]}]"
129
- end
130
- alias :inspect :to_ruby_literal
131
-
132
- EMPTY = Heading.new({})
133
- end # class Heading
134
- end # module Types
135
- end # module Alf
@@ -1,146 +0,0 @@
1
- module Alf
2
- module Types
3
- #
4
- # Defines an ordering on tuple attributes
5
- #
6
- class Ordering
7
-
8
- # @return [Array] underlying ordering as an array `[[attr1, dir1], ...]`
9
- attr_reader :ordering
10
-
11
- # @return [Proc] a Proc object that sorts tuples according to this
12
- # ordering.
13
- attr_reader :sorter
14
-
15
- # Creates an ordering instance
16
- #
17
- # @param [Array] ordering the underlying ordering info
18
- def initialize(ordering = [])
19
- @ordering = ordering
20
- @sorter = lambda{|t1,t2| compare(t1, t2)}
21
- end
22
-
23
- class << self
24
-
25
- # Coerces `arg` to an ordering.
26
- #
27
- # Implemented coercions are:
28
- # * Ordering (self)
29
- # * Array of AttrName (all attributes in ascending order)
30
- # * Array of [AttrName, :asc|:desc] pairs (obvious semantics)
31
- # * AttrList (all its attributes in ascending order)
32
- #
33
- # @param [Object] arg the value to coerce as an Ordering
34
- # @return [Ordering] when coercion succeeds
35
- # @raises [ArgumentError] when coercion fails
36
- def coerce(arg)
37
- case arg
38
- when Ordering
39
- arg
40
- when AttrList
41
- arg.to_ordering(:asc)
42
- when Array
43
- if arg.all?{|a| a.is_a?(Array)}
44
- Ordering.new(arg)
45
- else
46
- symbolized = arg.collect{|s| Tools.coerce(s, Symbol)}
47
- sliced = symbolized.each_slice(2)
48
- if sliced.all?{|a,o| [:asc,:desc].include?(o)}
49
- Ordering.new sliced.to_a
50
- else
51
- Ordering.new symbolized.map{|a| [a, :asc]}
52
- end
53
- end
54
- else
55
- raise ArgumentError, "Unable to coerce #{arg} to an ordering key"
56
- end
57
- end
58
- alias :[] :coerce
59
-
60
- # Converts commandline arguments to an ordering.
61
- #
62
- # This method reuses the `coerce(Array)` coercion heuristics and
63
- # therefore shares its spec.
64
- #
65
- # @param [Array] argv commandline arguments
66
- # @param [Hash] opts options (not used)
67
- # @return [Ordering] when coercion succeeds
68
- # @raises [ArgumentError] when coercion fails
69
- def from_argv(argv, opts = {})
70
- coerce(argv)
71
- end
72
-
73
- end # class << self
74
-
75
- # Returns the ordering attributes
76
- #
77
- # @return [Array<AttrName>] the list of attribute names
78
- def attributes
79
- @ordering.map{|arg| arg.first}
80
- end
81
-
82
- # Compares two tuples according to this ordering.
83
- #
84
- # Both t1 and t2 should have all attributes used by this ordering.
85
- # Strange results may appear if it's not the case.
86
- #
87
- # @param [Tuple] t1 a tuple
88
- # @param [Tuple] t2 another tuple
89
- # @return [-1, 0 or 1] according to the classical ruby semantics of
90
- # `(t1 <=> t2)`
91
- def compare(t1,t2)
92
- ordering.each do |atr, dir|
93
- x, y = t1[atr], t2[atr]
94
- comp = x.respond_to?(:<=>) ? (x <=> y) : (x.to_s <=> y.to_s)
95
- comp *= -1 if dir == :desc
96
- return comp unless comp == 0
97
- end
98
- return 0
99
- end
100
-
101
- # Computes the union of this ordering with another one.
102
- #
103
- # The union is simply defined by extension of self with other's attributes
104
- # and directions.
105
- #
106
- # @param [Ordering] other another Ordering (coercions will apply)
107
- # @return [Ordering] the union ordering
108
- def +(other)
109
- Ordering.new(ordering + Ordering.coerce(other).ordering)
110
- end
111
-
112
- # Returns the ordering hash code.
113
- #
114
- # @return [Integer] a hash code for this ordering.
115
- def hash
116
- ordering.hash
117
- end
118
-
119
- # Checks equality with another ordering.
120
- #
121
- # @param [Ordering] other another Ordering instance
122
- # @return [Boolean] true if both orderings are the same, false otherwise
123
- def ==(other)
124
- other.is_a?(Ordering) && (other.ordering == ordering)
125
- end
126
- alias :eql? :==
127
-
128
- # Converts to an attribute list.
129
- #
130
- # @return [AttrList] a list of attribute names that participate to the
131
- # ordering
132
- def to_attr_list
133
- AttrList.new(attributes)
134
- end
135
-
136
- # Returns a ruby literal for this ordering.
137
- #
138
- # @return [String] a literal s.t. `eval(self.to_ruby_literal) == self`
139
- def to_ruby_literal
140
- "Alf::Ordering[#{Tools.to_ruby_literal(ordering)}]"
141
- end
142
- alias :inspect :to_ruby_literal
143
-
144
- end # class Ordering
145
- end # module Types
146
- end # module Alf
@@ -1,97 +0,0 @@
1
- module Alf
2
- module Types
3
- #
4
- # Encapsulates a Renaming information
5
- #
6
- class Renaming
7
-
8
- # @return [Hash] a renaming mapping as AttrName -> AttrName
9
- attr_reader :renaming
10
-
11
- # Creates a renaming instance
12
- #
13
- # @param [Hash] a renaming mapping as AttrName -> AttrName
14
- def initialize(renaming)
15
- @renaming = renaming
16
- end
17
-
18
- class << self
19
-
20
- # Coerces `arg` to a renaming
21
- #
22
- # Implemented coercions are:
23
- # - Renaming: self
24
- # - {old1 => new1, ...} with AttrName coercions on olds and news
25
- # - [old1, new1, ...] with AttrName coercions on olds and news
26
- #
27
- # @param [Object] arg the value to coerce to a Renaming
28
- def coerce(arg)
29
- case arg
30
- when Renaming
31
- arg
32
- when Hash
33
- Renaming.new Hash[arg.map{|k,v|
34
- [ Tools.coerce(k, AttrName),
35
- Tools.coerce(v, AttrName) ]
36
- }]
37
- when Array
38
- coerce(Hash[*arg])
39
- else
40
- raise ArgumentError, "Invalid argument `#{arg}` for Renaming()"
41
- end
42
- end
43
- alias :[] :coerce
44
-
45
- # Converts commandline arguments to a renaming.
46
- #
47
- # This method reuses the `coerce(Array)` coercion heuristics and
48
- # therefore shares its spec.
49
- #
50
- # @param [Array] argv commandline arguments
51
- # @param [Hash] opts options (not used)
52
- # @return [Ordering] when coercion succeeds
53
- # @raises [ArgumentError] when coercion fails
54
- def from_argv(argv, opts = {})
55
- coerce(argv)
56
- end
57
-
58
- end # class << self
59
-
60
- # Renames a tuple according to this renaming pairs.
61
- #
62
- # The tuple should have all attributes defined in this renaming. Strange
63
- # results may appear otherwise.
64
- #
65
- # @param [Hash] tuple a tuple to rename
66
- # @return [Hash] the renamed tuple
67
- def rename_tuple(tuple)
68
- Tools.tuple_collect(tuple){|k,v| [@renaming[k] || k, v]}
69
- end
70
-
71
- # Returns the ordering hash code.
72
- #
73
- # @return [Integer] a hash code for this renaming
74
- def hash
75
- renaming.hash
76
- end
77
-
78
- # Checks equality with another Renaming instance.
79
- #
80
- # @param [Renaming] other another renaming instance
81
- # @return [Boolean] true if self and other are equal, false otherwise
82
- def ==(other)
83
- other.is_a?(Renaming) && (other.renaming == renaming)
84
- end
85
- alias :eql? :==
86
-
87
- # Returns a ruby literal for this renaming.
88
- #
89
- # @return [String] a literal s.t. `eval(self.to_ruby_literal) == self`
90
- def to_ruby_literal
91
- "Alf::Renaming[#{Tools.to_ruby_literal(renaming)}]"
92
- end
93
- alias :inspect :to_ruby_literal
94
-
95
- end # class Renaming
96
- end # module Types
97
- end # module Alf
@@ -1,57 +0,0 @@
1
- module Alf
2
- module Types
3
- #
4
- # Defines a Size domain, as a (non strictly) positive integer.
5
- #
6
- class Size < Integer
7
- extend Myrrha::Domain
8
-
9
- # The size predicate
10
- PREDICATE = lambda{|i| i >= 0}
11
-
12
- class << self
13
-
14
- # Returns the domain predicate.
15
- #
16
- # @return [Proc] the domain predicate as a Proc object
17
- def predicate
18
- PREDICATE
19
- end
20
-
21
- # Coerces `arg` to a size
22
- #
23
- # @param [Object] arg any value coercable to an Integer
24
- # @return [Size] the coerced size when success
25
- # @raise [ArgumentError] if the coercion fails
26
- def coerce(arg)
27
- res = Tools.coerce(arg, Integer)
28
- if self === res
29
- res
30
- else
31
- raise ArgumentError, "Invalid value `#{arg}` for Size()"
32
- end
33
- rescue Alf::CoercionError
34
- raise ArgumentError, "Invalid value `#{arg}` for Size()"
35
- end
36
-
37
- # Coerces commandline arguments to a Size.
38
- #
39
- # The `argv` must be empty or a singleton. When empty, `opts[:default]`
40
- # is used, which defaults to 0.
41
- #
42
- # @param [Array<String>] argv commandline arguments
43
- # @param [Hash] opts coercion options
44
- # @return [Size] coerced size as specified on commandline
45
- # @raise [ArgumentError] if the size cannot be coerced from argv
46
- def from_argv(argv, opts = {:default => 0})
47
- if argv.size > 1
48
- raise ArgumentError, "Invalid value #{argv.inspect} for Size()"
49
- end
50
- coerce(argv.first || opts[:default])
51
- end
52
-
53
- end # class << self
54
-
55
- end # Size
56
- end # module Types
57
- end # module Alf
@@ -1,138 +0,0 @@
1
- module Alf
2
- module Types
3
- #
4
- # Encapsulates a Summarization information.
5
- #
6
- class Summarization
7
-
8
- # @return [Hash] the hash of aggregations, AttrName -> Aggregators
9
- attr_reader :aggregations
10
-
11
- # Creates a Summarization instance
12
- #
13
- # @param [Hash] aggs, aggregations as a mapping AttrName -> Aggregators
14
- def initialize(aggs)
15
- @aggregations = aggs
16
- end
17
-
18
- class << self
19
-
20
- # Coerces `arg` to an Summarization
21
- #
22
- # Implemented coercions are:
23
- # - Summarization -> self
24
- # - [attr1, agg1, ...] -> {AttrName(attr1) -> Aggregator(agg1), ...}
25
- # - {attr1 => agg1, ...} -> {AttrName(attr1) -> Aggregator(agg1), ...}
26
- #
27
- # @param [Object] arg any ruby object to coerce to an Summarization
28
- # @return [Summarization] the coerced summarization
29
- # @raise [ArgumentError] is the coercion fails
30
- def coerce(arg)
31
- case arg
32
- when Summarization
33
- arg
34
- when Array
35
- coerce(Hash[*arg])
36
- when Hash
37
- Summarization.new Hash[arg.map{|k,v|
38
- [ Tools.coerce(k, AttrName),
39
- Tools.coerce(v, Aggregator) ]
40
- }]
41
- else
42
- raise ArgumentError, "Invalid arg `#{arg}` for Summarization()"
43
- end
44
- end
45
- alias :[] :coerce
46
-
47
- # Coerces commandline arguments to a Summarization
48
- #
49
- # This method reuses `coerce(Array)` and therefore shares its spec.
50
- #
51
- # @params [Array<String>] argv commandline arguments
52
- # @params [Hash] opts coercion options (not used)
53
- # @return [Summarization] the coerced summarization
54
- # @raise [ArgumentError] is the coercion fails
55
- def from_argv(argv, opts = {})
56
- coerce(argv)
57
- end
58
-
59
- end
60
-
61
- # Computes the least tuple.
62
- #
63
- # @return [Tuple] a tuple with least values for each attribute
64
- def least
65
- Hash[@aggregations.map{|k,v|
66
- [k, v.least]
67
- }]
68
- end
69
-
70
- # Computes the resulting aggregation from aggs if tuple happens.
71
- #
72
- # @return [Tuple] the new aggregated tuple
73
- def happens(aggs, tuple)
74
- Hash[@aggregations.map{|k,v|
75
- [k, v.happens(aggs[k], tuple)]
76
- }]
77
- end
78
-
79
- # Finalizes the summarization
80
- #
81
- # @return [Tuple] the finalized aggregated tuple
82
- def finalize(aggs)
83
- Hash[@aggregations.map{|k,v|
84
- [k, v.finalize(aggs[k])]
85
- }]
86
- end
87
-
88
- # Summarizes an enumeration of tuples.
89
- #
90
- # @param [Enumerable] enum an enumeration of tuples
91
- # @returns [Tuple] The summarization of `enum`
92
- def summarize(enum)
93
- finalize(enum.inject(least){|m,t| happens(m,t)})
94
- end
95
-
96
- # Returns a hash code.
97
- #
98
- # @return [Integer] a hash code for this expression
99
- def hash
100
- aggregations.hash
101
- end
102
-
103
- # Checks equality with another summarization
104
- #
105
- # @param [Summarization] another summariation
106
- # @return [Boolean] true is self and other are equal, false otherwise
107
- def ==(other)
108
- other.is_a?(Summarization) && (other.aggregations == aggregations)
109
- end
110
- alias :eql? :==
111
-
112
- # Converts to an attribute list.
113
- #
114
- # @return [AttrList] a list of computed attribute names
115
- def to_attr_list
116
- AttrList.new(aggregations.keys)
117
- end
118
-
119
- # Returns a ruby literal for this expression.
120
- #
121
- # @return [String] a literal s.t. `eval(self.to_ruby_literal) == self`
122
- def to_ruby_literal
123
- map = Hash[aggregations.map{|k,v|
124
- [k.to_s, "#{v.has_source_code!}"]
125
- }]
126
- "Alf::Summarization[#{Tools.to_ruby_literal(map)}]"
127
- end
128
-
129
- # Returns a string representation of this expression
130
- def inspect
131
- to_ruby_literal
132
- rescue NotImplementedError
133
- super
134
- end
135
-
136
- end # class Summarization
137
- end # module Types
138
- end # module Alf