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.
- data/CHANGELOG.md +186 -80
- data/Gemfile +16 -32
- data/Gemfile.lock +35 -34
- data/LICENCE.md +1 -1
- data/Manifest.txt +7 -9
- data/README.md +139 -809
- data/alf.gemspec +6 -15
- data/alf.noespec +16 -34
- data/lib/alf.rb +3 -73
- data/lib/alf/loader.rb +3 -3
- data/lib/alf/version.rb +2 -2
- data/spec/spec_helper.rb +3 -18
- data/spec/test_alf.rb +8 -0
- data/tasks/test.rake +6 -0
- data/test/migrations/test_folder_migration.rb +18 -0
- data/test/migrations/test_sequel_migration.rb +34 -0
- data/test/seeding/test_seeding.rb +49 -0
- data/test/test_alf.rb +8 -0
- data/test/test_helpers.rb +24 -0
- metadata +54 -952
- data/TODO.md +0 -21
- data/bin/alf +0 -27
- data/doc/commands/exec.md +0 -16
- data/doc/commands/help.md +0 -11
- data/doc/commands/main.md +0 -33
- data/doc/commands/show.md +0 -19
- data/doc/operators/non_relational/autonum.md +0 -23
- data/doc/operators/non_relational/clip.md +0 -31
- data/doc/operators/non_relational/coerce.md +0 -15
- data/doc/operators/non_relational/compact.md +0 -20
- data/doc/operators/non_relational/defaults.md +0 -32
- data/doc/operators/non_relational/generator.md +0 -20
- data/doc/operators/non_relational/sort.md +0 -24
- data/doc/operators/relational/extend.md +0 -18
- data/doc/operators/relational/group.md +0 -27
- data/doc/operators/relational/heading.md +0 -20
- data/doc/operators/relational/intersect.md +0 -13
- data/doc/operators/relational/join.md +0 -28
- data/doc/operators/relational/matching.md +0 -24
- data/doc/operators/relational/minus.md +0 -12
- data/doc/operators/relational/not-matching.md +0 -20
- data/doc/operators/relational/project.md +0 -28
- data/doc/operators/relational/quota.md +0 -21
- data/doc/operators/relational/rank.md +0 -27
- data/doc/operators/relational/rename.md +0 -17
- data/doc/operators/relational/restrict.md +0 -25
- data/doc/operators/relational/summarize.md +0 -25
- data/doc/operators/relational/ungroup.md +0 -20
- data/doc/operators/relational/union.md +0 -14
- data/doc/operators/relational/unwrap.md +0 -20
- data/doc/operators/relational/wrap.md +0 -24
- data/examples/csv/suppliers.csv +0 -6
- data/examples/logs/access.log +0 -1000
- data/examples/logs/combined.alf +0 -2
- data/examples/logs/hits.alf +0 -14
- data/examples/logs/not_found.alf +0 -7
- data/examples/logs/robots-cheating.alf +0 -11
- data/examples/logs/robots.alf +0 -8
- data/examples/operators/autonum.alf +0 -6
- data/examples/operators/cities.rash +0 -4
- data/examples/operators/clip.alf +0 -3
- data/examples/operators/compact.alf +0 -2
- data/examples/operators/database.alf +0 -5
- data/examples/operators/defaults.alf +0 -3
- data/examples/operators/extend.alf +0 -3
- data/examples/operators/group.alf +0 -3
- data/examples/operators/intersect.alf +0 -4
- data/examples/operators/join.alf +0 -2
- data/examples/operators/matching.alf +0 -2
- data/examples/operators/minus.alf +0 -8
- data/examples/operators/not_matching.alf +0 -2
- data/examples/operators/nulls.rash +0 -3
- data/examples/operators/parts.rash +0 -6
- data/examples/operators/project.alf +0 -3
- data/examples/operators/pseudo-with.alf +0 -7
- data/examples/operators/quota.alf +0 -4
- data/examples/operators/rank.alf +0 -4
- data/examples/operators/rename.alf +0 -3
- data/examples/operators/restrict.alf +0 -2
- data/examples/operators/schema.yaml +0 -28
- data/examples/operators/sort.alf +0 -4
- data/examples/operators/summarize.alf +0 -16
- data/examples/operators/suppliers.rash +0 -5
- data/examples/operators/supplies.rash +0 -12
- data/examples/operators/ungroup.alf +0 -4
- data/examples/operators/union.alf +0 -3
- data/examples/operators/unwrap.alf +0 -4
- data/examples/operators/wrap.alf +0 -2
- data/lib/alf-csv/alf/csv.rb +0 -3
- data/lib/alf-csv/alf/csv/commons.rb +0 -36
- data/lib/alf-csv/alf/csv/reader.rb +0 -33
- data/lib/alf-csv/alf/csv/renderer.rb +0 -38
- data/lib/alf-engine/alf/engine.rb +0 -25
- data/lib/alf-engine/alf/engine/aggregate.rb +0 -44
- data/lib/alf-engine/alf/engine/autonum.rb +0 -45
- data/lib/alf-engine/alf/engine/cesure.rb +0 -45
- data/lib/alf-engine/alf/engine/clip.rb +0 -53
- data/lib/alf-engine/alf/engine/coerce.rb +0 -46
- data/lib/alf-engine/alf/engine/cog.rb +0 -7
- data/lib/alf-engine/alf/engine/compact.rb +0 -26
- data/lib/alf-engine/alf/engine/compact/set.rb +0 -23
- data/lib/alf-engine/alf/engine/compact/uniq.rb +0 -23
- data/lib/alf-engine/alf/engine/concat.rb +0 -25
- data/lib/alf-engine/alf/engine/defaults.rb +0 -43
- data/lib/alf-engine/alf/engine/filter.rb +0 -41
- data/lib/alf-engine/alf/engine/generator.rb +0 -50
- data/lib/alf-engine/alf/engine/group.rb +0 -7
- data/lib/alf-engine/alf/engine/group/hash.rb +0 -40
- data/lib/alf-engine/alf/engine/join.rb +0 -7
- data/lib/alf-engine/alf/engine/join/hash.rb +0 -35
- data/lib/alf-engine/alf/engine/materialize.rb +0 -8
- data/lib/alf-engine/alf/engine/materialize/array.rb +0 -78
- data/lib/alf-engine/alf/engine/materialize/hash.rb +0 -122
- data/lib/alf-engine/alf/engine/quota.rb +0 -7
- data/lib/alf-engine/alf/engine/quota/cesure.rb +0 -46
- data/lib/alf-engine/alf/engine/rank.rb +0 -7
- data/lib/alf-engine/alf/engine/rank/cesure.rb +0 -48
- data/lib/alf-engine/alf/engine/rename.rb +0 -39
- data/lib/alf-engine/alf/engine/semi.rb +0 -7
- data/lib/alf-engine/alf/engine/semi/hash.rb +0 -39
- data/lib/alf-engine/alf/engine/set_attr.rb +0 -46
- data/lib/alf-engine/alf/engine/sort.rb +0 -28
- data/lib/alf-engine/alf/engine/sort/in_memory.rb +0 -39
- data/lib/alf-engine/alf/engine/summarize.rb +0 -8
- data/lib/alf-engine/alf/engine/summarize/cesure.rb +0 -51
- data/lib/alf-engine/alf/engine/summarize/hash.rb +0 -35
- data/lib/alf-engine/alf/engine/ungroup.rb +0 -29
- data/lib/alf-engine/alf/engine/unwrap.rb +0 -31
- data/lib/alf-engine/alf/engine/wrap.rb +0 -39
- data/lib/alf-logs/alf/logs.rb +0 -1
- data/lib/alf-logs/alf/logs/reader.rb +0 -98
- data/lib/alf-sequel/alf/sequel.rb +0 -2
- data/lib/alf-sequel/alf/sequel/environment.rb +0 -61
- data/lib/alf-sequel/alf/sequel/iterator.rb +0 -21
- data/lib/alf-shell/alf/shell.rb +0 -40
- data/lib/alf-shell/alf/shell/command.rb +0 -26
- data/lib/alf-shell/alf/shell/command/exec.rb +0 -11
- data/lib/alf-shell/alf/shell/command/help.rb +0 -30
- data/lib/alf-shell/alf/shell/command/main.rb +0 -136
- data/lib/alf-shell/alf/shell/command/main/class_methods.rb +0 -46
- data/lib/alf-shell/alf/shell/command/show.rb +0 -63
- data/lib/alf-shell/alf/shell/doc_manager.rb +0 -72
- data/lib/alf-shell/alf/shell/operator.rb +0 -86
- data/lib/alf-yaml/alf/yaml.rb +0 -1
- data/lib/alf-yaml/alf/yaml/renderer.rb +0 -22
- data/lib/alf/aggregator.rb +0 -51
- data/lib/alf/aggregator/avg.rb +0 -39
- data/lib/alf/aggregator/class_methods.rb +0 -77
- data/lib/alf/aggregator/collect.rb +0 -32
- data/lib/alf/aggregator/concat.rb +0 -47
- data/lib/alf/aggregator/count.rb +0 -32
- data/lib/alf/aggregator/instance_methods.rb +0 -119
- data/lib/alf/aggregator/max.rb +0 -32
- data/lib/alf/aggregator/min.rb +0 -32
- data/lib/alf/aggregator/stddev.rb +0 -25
- data/lib/alf/aggregator/sum.rb +0 -32
- data/lib/alf/aggregator/variance.rb +0 -45
- data/lib/alf/environment.rb +0 -34
- data/lib/alf/environment/class_methods.rb +0 -95
- data/lib/alf/environment/folder.rb +0 -60
- data/lib/alf/environment/instance_methods.rb +0 -26
- data/lib/alf/errors.rb +0 -5
- data/lib/alf/ext.rb +0 -4
- data/lib/alf/ext/relation.rb +0 -4
- data/lib/alf/iterator.rb +0 -28
- data/lib/alf/iterator/class_methods.rb +0 -20
- data/lib/alf/iterator/proxy.rb +0 -27
- data/lib/alf/lispy.rb +0 -24
- data/lib/alf/lispy/instance_methods.rb +0 -157
- data/lib/alf/operator.rb +0 -68
- data/lib/alf/operator/binary.rb +0 -21
- data/lib/alf/operator/class_methods.rb +0 -82
- data/lib/alf/operator/experimental.rb +0 -9
- data/lib/alf/operator/instance_methods.rb +0 -29
- data/lib/alf/operator/non_relational/autonum.rb +0 -19
- data/lib/alf/operator/non_relational/clip.rb +0 -20
- data/lib/alf/operator/non_relational/coerce.rb +0 -19
- data/lib/alf/operator/non_relational/compact.rb +0 -18
- data/lib/alf/operator/non_relational/defaults.rb +0 -22
- data/lib/alf/operator/non_relational/generator.rb +0 -20
- data/lib/alf/operator/non_relational/sort.rb +0 -19
- data/lib/alf/operator/nullary.rb +0 -11
- data/lib/alf/operator/relational/extend.rb +0 -19
- data/lib/alf/operator/relational/group.rb +0 -21
- data/lib/alf/operator/relational/heading.rb +0 -20
- data/lib/alf/operator/relational/intersect.rb +0 -18
- data/lib/alf/operator/relational/join.rb +0 -18
- data/lib/alf/operator/relational/matching.rb +0 -18
- data/lib/alf/operator/relational/minus.rb +0 -18
- data/lib/alf/operator/relational/not_matching.rb +0 -18
- data/lib/alf/operator/relational/project.rb +0 -22
- data/lib/alf/operator/relational/quota.rb +0 -23
- data/lib/alf/operator/relational/rank.rb +0 -22
- data/lib/alf/operator/relational/rename.rb +0 -18
- data/lib/alf/operator/relational/restrict.rb +0 -18
- data/lib/alf/operator/relational/summarize.rb +0 -27
- data/lib/alf/operator/relational/ungroup.rb +0 -19
- data/lib/alf/operator/relational/union.rb +0 -20
- data/lib/alf/operator/relational/unwrap.rb +0 -19
- data/lib/alf/operator/relational/wrap.rb +0 -20
- data/lib/alf/operator/signature.rb +0 -233
- data/lib/alf/operator/unary.rb +0 -16
- data/lib/alf/reader.rb +0 -37
- data/lib/alf/reader/alf_file.rb +0 -24
- data/lib/alf/reader/class_methods.rb +0 -91
- data/lib/alf/reader/instance_methods.rb +0 -97
- data/lib/alf/reader/rash.rb +0 -28
- data/lib/alf/relation.rb +0 -28
- data/lib/alf/relation/class_methods.rb +0 -28
- data/lib/alf/relation/instance_methods.rb +0 -119
- data/lib/alf/renderer.rb +0 -32
- data/lib/alf/renderer/class_methods.rb +0 -58
- data/lib/alf/renderer/instance_methods.rb +0 -55
- data/lib/alf/renderer/rash.rb +0 -33
- data/lib/alf/renderer/text.rb +0 -198
- data/lib/alf/tools.rb +0 -15
- data/lib/alf/tools/coerce.rb +0 -25
- data/lib/alf/tools/miscellaneous.rb +0 -111
- data/lib/alf/tools/to_lispy.rb +0 -96
- data/lib/alf/tools/to_relation.rb +0 -54
- data/lib/alf/tools/to_ruby_literal.rb +0 -31
- data/lib/alf/tools/tuple_handle.rb +0 -60
- data/lib/alf/types.rb +0 -49
- data/lib/alf/types/attr_list.rb +0 -160
- data/lib/alf/types/attr_name.rb +0 -66
- data/lib/alf/types/boolean.rb +0 -25
- data/lib/alf/types/heading.rb +0 -135
- data/lib/alf/types/ordering.rb +0 -146
- data/lib/alf/types/renaming.rb +0 -97
- data/lib/alf/types/size.rb +0 -57
- data/lib/alf/types/summarization.rb +0 -138
- data/lib/alf/types/tuple_computation.rb +0 -136
- data/lib/alf/types/tuple_expression.rb +0 -152
- data/lib/alf/types/tuple_predicate.rb +0 -73
- data/spec/integration/__database__/group.alf +0 -3
- data/spec/integration/__database__/parts.rash +0 -6
- data/spec/integration/__database__/suppliers.rash +0 -5
- data/spec/integration/__database__/suppliers_csv.csv +0 -6
- data/spec/integration/__database__/supplies.rash +0 -12
- data/spec/integration/alf/example.rash +0 -1
- data/spec/integration/alf/test_Relation.rb +0 -32
- data/spec/integration/ext/test_relation.rb +0 -16
- data/spec/integration/lispy/test_relation.rb +0 -37
- data/spec/integration/lispy/test_run.rb +0 -40
- data/spec/integration/lispy/test_tuple.rb +0 -36
- data/spec/integration/semantics/test_join.alf +0 -9
- data/spec/integration/semantics/test_minus.alf +0 -5
- data/spec/integration/semantics/test_project.alf +0 -8
- data/spec/integration/semantics/test_rank.alf +0 -34
- data/spec/integration/shell/alf/alf.db +0 -0
- data/spec/integration/shell/alf/alf_e.cmd +0 -1
- data/spec/integration/shell/alf/alf_e.stdout +0 -4
- data/spec/integration/shell/alf/alf_env.cmd +0 -1
- data/spec/integration/shell/alf/alf_env.stdout +0 -5
- data/spec/integration/shell/alf/alf_env_sqlite.cmd +0 -1
- data/spec/integration/shell/alf/alf_env_sqlite.stdout +0 -9
- data/spec/integration/shell/alf/alf_help.cmd +0 -1
- data/spec/integration/shell/alf/alf_help.stdout +0 -69
- data/spec/integration/shell/alf/alf_implicit.alf +0 -1
- data/spec/integration/shell/alf/alf_implicit_exec.cmd +0 -1
- data/spec/integration/shell/alf/alf_implicit_exec.stdout +0 -4
- data/spec/integration/shell/alf/alf_r.cmd +0 -1
- data/spec/integration/shell/alf/alf_r.stdout +0 -5
- data/spec/integration/shell/alf/alf_version.cmd +0 -1
- data/spec/integration/shell/alf/alf_version.stdout +0 -2
- data/spec/integration/shell/alf/alf_yaml.cmd +0 -1
- data/spec/integration/shell/alf/alf_yaml.stdout +0 -22
- data/spec/integration/shell/alf/rel.rash +0 -1
- data/spec/integration/shell/autonum/autonum_0.cmd +0 -1
- data/spec/integration/shell/autonum/autonum_0.stdout +0 -9
- data/spec/integration/shell/autonum/autonum_1.cmd +0 -1
- data/spec/integration/shell/autonum/autonum_1.stdout +0 -9
- data/spec/integration/shell/clip/clip_0.cmd +0 -1
- data/spec/integration/shell/clip/clip_0.stdout +0 -9
- data/spec/integration/shell/clip/clip_1.cmd +0 -1
- data/spec/integration/shell/clip/clip_1.stdout +0 -9
- data/spec/integration/shell/coerce/coerce_1.cmd +0 -1
- data/spec/integration/shell/coerce/coerce_1.stdout +0 -5
- data/spec/integration/shell/compact/compact_0.cmd +0 -1
- data/spec/integration/shell/compact/compact_0.stdout +0 -9
- data/spec/integration/shell/defaults/defaults_0.cmd +0 -1
- data/spec/integration/shell/defaults/defaults_0.stdout +0 -9
- data/spec/integration/shell/defaults/defaults_1.cmd +0 -1
- data/spec/integration/shell/defaults/defaults_1.stdout +0 -9
- data/spec/integration/shell/defaults/defaults_2.cmd +0 -1
- data/spec/integration/shell/defaults/defaults_2.stdout +0 -9
- data/spec/integration/shell/extend/extend_0.cmd +0 -1
- data/spec/integration/shell/extend/extend_0.stdout +0 -16
- data/spec/integration/shell/generator/generator_1.cmd +0 -1
- data/spec/integration/shell/generator/generator_1.stdout +0 -10
- data/spec/integration/shell/generator/generator_2.cmd +0 -1
- data/spec/integration/shell/generator/generator_2.stdout +0 -5
- data/spec/integration/shell/generator/generator_3.cmd +0 -1
- data/spec/integration/shell/generator/generator_3.stdout +0 -5
- data/spec/integration/shell/group/group_0.cmd +0 -1
- data/spec/integration/shell/group/group_0.stdout +0 -32
- data/spec/integration/shell/group/group_1.cmd +0 -1
- data/spec/integration/shell/group/group_1.stdout +0 -32
- data/spec/integration/shell/help/help_1.cmd +0 -1
- data/spec/integration/shell/help/help_1.stdout +0 -24
- data/spec/integration/shell/intersect/intersect_0.cmd +0 -1
- data/spec/integration/shell/intersect/intersect_0.stdout +0 -9
- data/spec/integration/shell/join/join_0.cmd +0 -1
- data/spec/integration/shell/join/join_0.stdout +0 -16
- data/spec/integration/shell/matching/matching_0.cmd +0 -1
- data/spec/integration/shell/matching/matching_0.stdout +0 -8
- data/spec/integration/shell/minus/minus_0.cmd +0 -1
- data/spec/integration/shell/minus/minus_0.stdout +0 -4
- data/spec/integration/shell/not-matching/not-matching_0.cmd +0 -1
- data/spec/integration/shell/not-matching/not-matching_0.stdout +0 -5
- data/spec/integration/shell/project/project_0.cmd +0 -1
- data/spec/integration/shell/project/project_0.stdout +0 -9
- data/spec/integration/shell/project/project_1.cmd +0 -1
- data/spec/integration/shell/project/project_1.stdout +0 -9
- data/spec/integration/shell/quota/quota_0.cmd +0 -1
- data/spec/integration/shell/quota/quota_0.stdout +0 -16
- data/spec/integration/shell/rank/rank_1.cmd +0 -1
- data/spec/integration/shell/rank/rank_1.stdout +0 -10
- data/spec/integration/shell/rank/rank_2.cmd +0 -1
- data/spec/integration/shell/rank/rank_2.stdout +0 -10
- data/spec/integration/shell/rank/rank_3.cmd +0 -1
- data/spec/integration/shell/rank/rank_3.stdout +0 -10
- data/spec/integration/shell/rank/rank_4.cmd +0 -1
- data/spec/integration/shell/rank/rank_4.stdout +0 -6
- data/spec/integration/shell/rank/rank_5.cmd +0 -1
- data/spec/integration/shell/rank/rank_5.stdout +0 -6
- data/spec/integration/shell/rename/rename_0.cmd +0 -1
- data/spec/integration/shell/rename/rename_0.stdout +0 -9
- data/spec/integration/shell/restrict/restrict_0.cmd +0 -1
- data/spec/integration/shell/restrict/restrict_0.stdout +0 -6
- data/spec/integration/shell/restrict/restrict_1.cmd +0 -1
- data/spec/integration/shell/restrict/restrict_1.stdout +0 -6
- data/spec/integration/shell/show/show_base.cmd +0 -1
- data/spec/integration/shell/show/show_base.stdout +0 -9
- data/spec/integration/shell/show/show_base_sort_1.cmd +0 -1
- data/spec/integration/shell/show/show_base_sort_1.stdout +0 -9
- data/spec/integration/shell/show/show_base_sort_2.cmd +0 -1
- data/spec/integration/shell/show/show_base_sort_2.stdout +0 -9
- data/spec/integration/shell/show/show_conflictual.cmd +0 -1
- data/spec/integration/shell/show/show_conflictual.stdout +0 -5
- data/spec/integration/shell/show/show_csv.cmd +0 -1
- data/spec/integration/shell/show/show_csv.stdout +0 -6
- data/spec/integration/shell/show/show_ff.cmd +0 -1
- data/spec/integration/shell/show/show_ff.stdout +0 -10
- data/spec/integration/shell/show/show_rash.cmd +0 -1
- data/spec/integration/shell/show/show_rash.stdout +0 -5
- data/spec/integration/shell/show/show_rash_pretty.cmd +0 -1
- data/spec/integration/shell/show/show_rash_pretty.stdout +0 -30
- data/spec/integration/shell/show/show_yaml.cmd +0 -1
- data/spec/integration/shell/show/show_yaml.stdout +0 -22
- data/spec/integration/shell/sort/sort_0.cmd +0 -1
- data/spec/integration/shell/sort/sort_0.stdout +0 -9
- data/spec/integration/shell/sort/sort_1.cmd +0 -1
- data/spec/integration/shell/sort/sort_1.stdout +0 -9
- data/spec/integration/shell/sort/sort_2.cmd +0 -1
- data/spec/integration/shell/sort/sort_2.stdout +0 -9
- data/spec/integration/shell/sort/sort_3.cmd +0 -1
- data/spec/integration/shell/sort/sort_3.stdout +0 -9
- data/spec/integration/shell/summarize/summarize_0.cmd +0 -1
- data/spec/integration/shell/summarize/summarize_0.stdout +0 -8
- data/spec/integration/shell/ungroup/ungroup_0.cmd +0 -1
- data/spec/integration/shell/ungroup/ungroup_0.stdout +0 -16
- data/spec/integration/shell/union/union_0.cmd +0 -1
- data/spec/integration/shell/union/union_0.stdout +0 -9
- data/spec/integration/shell/unwrap/unwrap_0.cmd +0 -1
- data/spec/integration/shell/unwrap/unwrap_0.stdout +0 -9
- data/spec/integration/shell/wrap/wrap_0.cmd +0 -1
- data/spec/integration/shell/wrap/wrap_0.stdout +0 -9
- data/spec/integration/test_alf.rb +0 -34
- data/spec/integration/test_examples.rb +0 -15
- data/spec/integration/test_lispy.rb +0 -31
- data/spec/integration/test_semantics.rb +0 -40
- data/spec/integration/test_shell.rb +0 -47
- data/spec/regression/alf_file/__FILE__.alf +0 -2
- data/spec/regression/alf_file/suppliers.rash +0 -5
- data/spec/regression/alf_file/test___FILE__.rb +0 -17
- data/spec/regression/heading/test_heading_with_date.rb +0 -12
- data/spec/regression/lispy/test_compile.rb +0 -14
- data/spec/regression/logs/apache_combined.log +0 -5
- data/spec/regression/logs/test_path_attribute.rb +0 -25
- data/spec/regression/relation/test_relation_allbut_all.rb +0 -14
- data/spec/regression/relation/test_relation_with_date.rb +0 -12
- data/spec/regression/restrict/test_restrict_with_keywords.rb +0 -17
- data/spec/shared/a_valid_type_implementation.rb +0 -47
- data/spec/shared/a_value.rb +0 -12
- data/spec/shared/an_operator_class.rb +0 -36
- data/spec/unit/alf-core/aggregator/test_avg.rb +0 -22
- data/spec/unit/alf-core/aggregator/test_collect.rb +0 -25
- data/spec/unit/alf-core/aggregator/test_concat.rb +0 -31
- data/spec/unit/alf-core/aggregator/test_count.rb +0 -17
- data/spec/unit/alf-core/aggregator/test_max.rb +0 -23
- data/spec/unit/alf-core/aggregator/test_min.rb +0 -23
- data/spec/unit/alf-core/aggregator/test_stddev.rb +0 -27
- data/spec/unit/alf-core/aggregator/test_sum.rb +0 -23
- data/spec/unit/alf-core/aggregator/test_variance.rb +0 -29
- data/spec/unit/alf-core/assumptions/test_file.rb +0 -17
- data/spec/unit/alf-core/assumptions/test_instance_eval.rb +0 -15
- data/spec/unit/alf-core/assumptions/test_scoping.rb +0 -29
- data/spec/unit/alf-core/assumptions/test_set.rb +0 -64
- data/spec/unit/alf-core/environment/examples/suppliers.rash +0 -5
- data/spec/unit/alf-core/environment/test_folder.rb +0 -53
- data/spec/unit/alf-core/operator/non_relational/test_autonum.rb +0 -48
- data/spec/unit/alf-core/operator/non_relational/test_clip.rb +0 -35
- data/spec/unit/alf-core/operator/non_relational/test_coerce.rb +0 -29
- data/spec/unit/alf-core/operator/non_relational/test_compact.rb +0 -32
- data/spec/unit/alf-core/operator/non_relational/test_defaults.rb +0 -53
- data/spec/unit/alf-core/operator/non_relational/test_generator.rb +0 -60
- data/spec/unit/alf-core/operator/non_relational/test_sort.rb +0 -60
- data/spec/unit/alf-core/operator/relational/test_extend.rb +0 -28
- data/spec/unit/alf-core/operator/relational/test_group.rb +0 -39
- data/spec/unit/alf-core/operator/relational/test_heading.rb +0 -27
- data/spec/unit/alf-core/operator/relational/test_intersect.rb +0 -58
- data/spec/unit/alf-core/operator/relational/test_join.rb +0 -36
- data/spec/unit/alf-core/operator/relational/test_minus.rb +0 -56
- data/spec/unit/alf-core/operator/relational/test_project.rb +0 -62
- data/spec/unit/alf-core/operator/relational/test_quota.rb +0 -36
- data/spec/unit/alf-core/operator/relational/test_rank.rb +0 -48
- data/spec/unit/alf-core/operator/relational/test_rename.rb +0 -26
- data/spec/unit/alf-core/operator/relational/test_restrict.rb +0 -45
- data/spec/unit/alf-core/operator/relational/test_summarize.rb +0 -44
- data/spec/unit/alf-core/operator/relational/test_ungroup.rb +0 -29
- data/spec/unit/alf-core/operator/relational/test_union.rb +0 -35
- data/spec/unit/alf-core/operator/relational/test_unwrap.rb +0 -26
- data/spec/unit/alf-core/operator/relational/test_wrap.rb +0 -26
- data/spec/unit/alf-core/operator/signature/test_argv2args.rb +0 -82
- data/spec/unit/alf-core/operator/signature/test_collect_on.rb +0 -38
- data/spec/unit/alf-core/operator/signature/test_initialize.rb +0 -17
- data/spec/unit/alf-core/operator/signature/test_install.rb +0 -56
- data/spec/unit/alf-core/operator/signature/test_option_parser.rb +0 -36
- data/spec/unit/alf-core/operator/signature/test_parse_args.rb +0 -90
- data/spec/unit/alf-core/operator/signature/test_to_lispy.rb +0 -102
- data/spec/unit/alf-core/operator/signature/test_to_shell.rb +0 -103
- data/spec/unit/alf-core/operator/test_non_relational.rb +0 -20
- data/spec/unit/alf-core/operator/test_relational.rb +0 -31
- data/spec/unit/alf-core/reader/input.rb +0 -2
- data/spec/unit/alf-core/reader/test_alf_file.rb +0 -30
- data/spec/unit/alf-core/reader/test_initialize.rb +0 -60
- data/spec/unit/alf-core/reader/test_looks_a_path.rb +0 -20
- data/spec/unit/alf-core/reader/test_rash.rb +0 -31
- data/spec/unit/alf-core/relation/test_coerce.rb +0 -53
- data/spec/unit/alf-core/relation/test_inspect.rb +0 -20
- data/spec/unit/alf-core/relation/test_relops.rb +0 -55
- data/spec/unit/alf-core/relation/test_to_a.rb +0 -41
- data/spec/unit/alf-core/renderer/test_initialize.rb +0 -60
- data/spec/unit/alf-core/test_aggregator.rb +0 -58
- data/spec/unit/alf-core/test_environment.rb +0 -30
- data/spec/unit/alf-core/test_operator.rb +0 -16
- data/spec/unit/alf-core/test_reader.rb +0 -40
- data/spec/unit/alf-core/test_relation.rb +0 -75
- data/spec/unit/alf-core/test_renderer.rb +0 -53
- data/spec/unit/alf-core/text/test_cell.rb +0 -35
- data/spec/unit/alf-core/text/test_row.rb +0 -30
- data/spec/unit/alf-core/text/test_table.rb +0 -39
- data/spec/unit/alf-core/tools/test_class_name.rb +0 -16
- data/spec/unit/alf-core/tools/test_coalesce.rb +0 -19
- data/spec/unit/alf-core/tools/test_coerce.rb +0 -16
- data/spec/unit/alf-core/tools/test_ruby_case.rb +0 -16
- data/spec/unit/alf-core/tools/test_to_lispy.rb +0 -145
- data/spec/unit/alf-core/tools/test_to_relation.rb +0 -39
- data/spec/unit/alf-core/tools/test_to_ruby_literal.rb +0 -10
- data/spec/unit/alf-core/tools/test_tuple_handle.rb +0 -52
- data/spec/unit/alf-core/tools/test_tuple_heading.rb +0 -15
- data/spec/unit/alf-core/tools/test_varargs.rb +0 -19
- data/spec/unit/alf-core/types/test_attr_list.rb +0 -188
- data/spec/unit/alf-core/types/test_attr_name.rb +0 -78
- data/spec/unit/alf-core/types/test_boolean.rb +0 -42
- data/spec/unit/alf-core/types/test_class_methods.rb +0 -24
- data/spec/unit/alf-core/types/test_heading.rb +0 -146
- data/spec/unit/alf-core/types/test_ordering.rb +0 -185
- data/spec/unit/alf-core/types/test_renaming.rb +0 -72
- data/spec/unit/alf-core/types/test_size.rb +0 -74
- data/spec/unit/alf-core/types/test_summarization.rb +0 -95
- data/spec/unit/alf-core/types/test_tuple_computation.rb +0 -96
- data/spec/unit/alf-core/types/test_tuple_expression.rb +0 -122
- data/spec/unit/alf-core/types/test_tuple_predicate.rb +0 -108
- data/spec/unit/alf-csv/input.csv +0 -3
- data/spec/unit/alf-csv/test_reader.rb +0 -66
- data/spec/unit/alf-csv/test_renderer.rb +0 -73
- data/spec/unit/alf-engine/compact/test_set.rb +0 -33
- data/spec/unit/alf-engine/compact/test_uniq.rb +0 -33
- data/spec/unit/alf-engine/group/test_hash.rb +0 -34
- data/spec/unit/alf-engine/join/test_hash.rb +0 -55
- data/spec/unit/alf-engine/materialize/test_array.rb +0 -28
- data/spec/unit/alf-engine/materialize/test_hash.rb +0 -76
- data/spec/unit/alf-engine/quota/test_cesure.rb +0 -34
- data/spec/unit/alf-engine/rank/test_cesure.rb +0 -47
- data/spec/unit/alf-engine/semi/test_hash.rb +0 -58
- data/spec/unit/alf-engine/sort/test_in_memory.rb +0 -32
- data/spec/unit/alf-engine/summarize/test_cesure.rb +0 -36
- data/spec/unit/alf-engine/summarize/test_hash.rb +0 -36
- data/spec/unit/alf-engine/test_aggregate.rb +0 -26
- data/spec/unit/alf-engine/test_autonum.rb +0 -24
- data/spec/unit/alf-engine/test_clip.rb +0 -34
- data/spec/unit/alf-engine/test_coerce.rb +0 -35
- data/spec/unit/alf-engine/test_compact.rb +0 -33
- data/spec/unit/alf-engine/test_concat.rb +0 -38
- data/spec/unit/alf-engine/test_defaults.rb +0 -37
- data/spec/unit/alf-engine/test_filter.rb +0 -23
- data/spec/unit/alf-engine/test_generator.rb +0 -25
- data/spec/unit/alf-engine/test_rename.rb +0 -24
- data/spec/unit/alf-engine/test_set_attr.rb +0 -38
- data/spec/unit/alf-engine/test_sort.rb +0 -32
- data/spec/unit/alf-engine/test_ungroup.rb +0 -28
- data/spec/unit/alf-engine/test_unwrap.rb +0 -20
- data/spec/unit/alf-engine/test_wrap.rb +0 -26
- data/spec/unit/alf-logs/apache_combined.log +0 -5
- data/spec/unit/alf-logs/postgresql.log +0 -29
- data/spec/unit/alf-logs/test_reader.rb +0 -57
- data/spec/unit/alf-sequel/alf.db +0 -0
- data/spec/unit/alf-sequel/test_environment.rb +0 -74
- data/spec/unit/alf-shell/doc_manager/dynamic.md +0 -1
- data/spec/unit/alf-shell/doc_manager/example.md +0 -1
- data/spec/unit/alf-shell/doc_manager/example_1.txt +0 -11
- data/spec/unit/alf-shell/doc_manager/static.md +0 -1
- data/spec/unit/alf-shell/doc_manager/test_call.rb +0 -48
- data/spec/unit/alf-shell/main/test_class_methods.rb +0 -44
- data/spec/unit/alf-shell/operator/test_autonum.rb +0 -28
- data/spec/unit/alf-shell/operator/test_clip.rb +0 -29
- data/spec/unit/alf-shell/operator/test_coerce.rb +0 -21
- data/spec/unit/alf-shell/operator/test_compact.rb +0 -16
- data/spec/unit/alf-shell/operator/test_defaults.rb +0 -29
- data/spec/unit/alf-shell/operator/test_extend.rb +0 -21
- data/spec/unit/alf-shell/operator/test_generator.rb +0 -37
- data/spec/unit/alf-shell/operator/test_group.rb +0 -32
- data/spec/unit/alf-shell/operator/test_heading.rb +0 -16
- data/spec/unit/alf-shell/operator/test_intersect.rb +0 -18
- data/spec/unit/alf-shell/operator/test_join.rb +0 -18
- data/spec/unit/alf-shell/operator/test_matching.rb +0 -18
- data/spec/unit/alf-shell/operator/test_minus.rb +0 -18
- data/spec/unit/alf-shell/operator/test_not_matching.rb +0 -18
- data/spec/unit/alf-shell/operator/test_project.rb +0 -38
- data/spec/unit/alf-shell/operator/test_quota.rb +0 -23
- data/spec/unit/alf-shell/operator/test_rank.rb +0 -30
- data/spec/unit/alf-shell/operator/test_rename.rb +0 -21
- data/spec/unit/alf-shell/operator/test_restrict.rb +0 -35
- data/spec/unit/alf-shell/operator/test_sort.rb +0 -49
- data/spec/unit/alf-shell/operator/test_summarize.rb +0 -30
- data/spec/unit/alf-shell/operator/test_ungroup.rb +0 -28
- data/spec/unit/alf-shell/operator/test_union.rb +0 -18
- data/spec/unit/alf-shell/operator/test_unwrap.rb +0 -28
- data/spec/unit/alf-shell/operator/test_wrap.rb +0 -30
- data/tasks/clean.rake +0 -3
- data/tasks/debug_mail.rake +0 -75
- data/tasks/debug_mail.txt +0 -18
- data/tasks/gh-pages.rake +0 -68
- data/tasks/integration_test.rake +0 -43
- data/tasks/regression_test.rake +0 -44
- data/tasks/unit_test.rake +0 -44
- data/tasks/yard.rake +0 -51
data/lib/alf/types/heading.rb
DELETED
|
@@ -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
|
data/lib/alf/types/ordering.rb
DELETED
|
@@ -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
|
data/lib/alf/types/renaming.rb
DELETED
|
@@ -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
|
data/lib/alf/types/size.rb
DELETED
|
@@ -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
|