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
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
module Alf
|
|
2
|
-
class Aggregator
|
|
3
|
-
#
|
|
4
|
-
# This module defines methods for the default implementation of Alf's
|
|
5
|
-
# aggregators.
|
|
6
|
-
#
|
|
7
|
-
module InstanceMethods
|
|
8
|
-
|
|
9
|
-
# @return [Hash] Aggregation options
|
|
10
|
-
attr_reader :options
|
|
11
|
-
|
|
12
|
-
# @return [TupleExpression] the underlying functor
|
|
13
|
-
attr_reader :functor
|
|
14
|
-
|
|
15
|
-
# @return [String] source code of the aggregator, if any
|
|
16
|
-
attr_accessor :source
|
|
17
|
-
|
|
18
|
-
# Creates an Aggregator instance.
|
|
19
|
-
#
|
|
20
|
-
# Example:
|
|
21
|
-
#
|
|
22
|
-
# Aggregator.new{ size * price }
|
|
23
|
-
#
|
|
24
|
-
def initialize(options = {}, &block)
|
|
25
|
-
@handle = Tools::TupleHandle.new
|
|
26
|
-
@options = default_options.merge(options)
|
|
27
|
-
@functor = Tools.coerce(block, TupleExpression)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
# Returns the default options to use
|
|
31
|
-
#
|
|
32
|
-
# @return [Hash] the default aggregation options
|
|
33
|
-
def default_options
|
|
34
|
-
{}
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# Returns the least value, which is the one to use on an empty
|
|
38
|
-
# set.
|
|
39
|
-
#
|
|
40
|
-
# This method is intended to be overriden by subclasses; default
|
|
41
|
-
# implementation returns nil.
|
|
42
|
-
#
|
|
43
|
-
# @return [Object] the least value for this aggregator
|
|
44
|
-
def least
|
|
45
|
-
nil
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# This method is called on each aggregated tuple and must return
|
|
49
|
-
# an updated _memo_ value. It can be seen as the block typically
|
|
50
|
-
# given to Enumerable.inject.
|
|
51
|
-
#
|
|
52
|
-
# The default implementation collects the pre-value on the tuple
|
|
53
|
-
# and delegates to _happens.
|
|
54
|
-
#
|
|
55
|
-
# @param [Object] memo the current aggregation value
|
|
56
|
-
# @param [Hash] tuple the current iterated tuple
|
|
57
|
-
# @return [Object] updated memo value
|
|
58
|
-
def happens(memo, tuple)
|
|
59
|
-
_happens(memo, @functor.evaluate(@handle.set(tuple)))
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
# This method finalizes an aggregation.
|
|
63
|
-
#
|
|
64
|
-
# Argument _memo_ is either _least_ or the result of aggregating
|
|
65
|
-
# through _happens_. The default implementation simply returns
|
|
66
|
-
# _memo_. The method is intended to be overriden for complex
|
|
67
|
-
# aggregations that need statefull information such as `avg`.
|
|
68
|
-
#
|
|
69
|
-
# @param [Object] memo the current aggregation value
|
|
70
|
-
# @return [Object] the aggregation value, as finalized
|
|
71
|
-
def finalize(memo)
|
|
72
|
-
memo
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
# Aggregates over an enumeration of tuples.
|
|
76
|
-
#
|
|
77
|
-
# @param [Enumerable<Tuple>] an enumerable of tuples
|
|
78
|
-
# @return [Object] the computed aggregation value
|
|
79
|
-
def aggregate(enum)
|
|
80
|
-
finalize(enum.inject(least){|m,t| happens(m, t)})
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
# Asserts that this aggregator knows its source code or raises a
|
|
84
|
-
# NotImplementedError.
|
|
85
|
-
#
|
|
86
|
-
# @return [String] the source code when known
|
|
87
|
-
def has_source_code!
|
|
88
|
-
if source.nil?
|
|
89
|
-
raise NotImplementedError, "No known source code for this aggregator"
|
|
90
|
-
else
|
|
91
|
-
source
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
# Checks equality with another aggregator
|
|
96
|
-
#
|
|
97
|
-
# @param [Aggregator] other another aggregator
|
|
98
|
-
# @return [Boolean] true is self and other are equal, false otherwise
|
|
99
|
-
def ==(other)
|
|
100
|
-
return false unless other.is_a?(Aggregator)
|
|
101
|
-
has_source_code! == other.has_source_code!
|
|
102
|
-
rescue NotImplementedError
|
|
103
|
-
super
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
protected
|
|
107
|
-
|
|
108
|
-
# @see happens.
|
|
109
|
-
#
|
|
110
|
-
# This method is intended to be overriden and returns _value_
|
|
111
|
-
# by default, making this aggregator a "Last(...)" aggregator.
|
|
112
|
-
def _happens(memo, value)
|
|
113
|
-
value
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
end # module InstanceMethods
|
|
117
|
-
include(InstanceMethods)
|
|
118
|
-
end # class Aggregator
|
|
119
|
-
end # module Alf
|
data/lib/alf/aggregator/max.rb
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
module Alf
|
|
2
|
-
class Aggregator
|
|
3
|
-
#
|
|
4
|
-
# Defines a `max()` aggregation operator.
|
|
5
|
-
#
|
|
6
|
-
# Example:
|
|
7
|
-
#
|
|
8
|
-
# # direct ruby usage
|
|
9
|
-
# Alf::Aggregator.max{ qty }.aggregate(...)
|
|
10
|
-
#
|
|
11
|
-
# # lispy
|
|
12
|
-
# (summarize :supplies, [:sid], :max => max{ qty })
|
|
13
|
-
#
|
|
14
|
-
class Max < Aggregator
|
|
15
|
-
|
|
16
|
-
# Returns nil as least value.
|
|
17
|
-
#
|
|
18
|
-
# @see Aggregator::InstanceMethods#least
|
|
19
|
-
def least()
|
|
20
|
-
nil
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Aggregates on a tuple occurence through `memo > val ? memo : val`
|
|
24
|
-
#
|
|
25
|
-
# @see Aggregator::InstanceMethods#_happens
|
|
26
|
-
def _happens(memo, val)
|
|
27
|
-
memo.nil? ? val : (memo > val ? memo : val)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
end # class Max
|
|
31
|
-
end # class Aggregator
|
|
32
|
-
end # module Alf
|
data/lib/alf/aggregator/min.rb
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
module Alf
|
|
2
|
-
class Aggregator
|
|
3
|
-
#
|
|
4
|
-
# Defines a `min()` aggregation operator.
|
|
5
|
-
#
|
|
6
|
-
# Example:
|
|
7
|
-
#
|
|
8
|
-
# # direct ruby usage
|
|
9
|
-
# Alf::Aggregator.min{ qty }.aggregate(...)
|
|
10
|
-
#
|
|
11
|
-
# # lispy
|
|
12
|
-
# (summarize :supplies, [:sid], :max => min{ qty })
|
|
13
|
-
#
|
|
14
|
-
class Min < Aggregator
|
|
15
|
-
|
|
16
|
-
# Returns nil as least value.
|
|
17
|
-
#
|
|
18
|
-
# @see Aggregator::InstanceMethods#least
|
|
19
|
-
def least()
|
|
20
|
-
nil
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Aggregates on a tuple occurence through `memo < val ? memo : val`
|
|
24
|
-
#
|
|
25
|
-
# @see Aggregator::InstanceMethods#_happens
|
|
26
|
-
def _happens(memo, val)
|
|
27
|
-
memo.nil? ? val : (memo < val ? memo : val)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
end # class Min
|
|
31
|
-
end # class Aggregator
|
|
32
|
-
end # module Alf
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
module Alf
|
|
2
|
-
class Aggregator
|
|
3
|
-
#
|
|
4
|
-
# Defines a `stddev()` aggregation operator.
|
|
5
|
-
#
|
|
6
|
-
# Example:
|
|
7
|
-
#
|
|
8
|
-
# # direct ruby usage
|
|
9
|
-
# Alf::Aggregator.stddev{ qty }.aggregate(...)
|
|
10
|
-
#
|
|
11
|
-
# # lispy
|
|
12
|
-
# (summarize :supplies, [:sid], :stddev => stddev{ qty })
|
|
13
|
-
#
|
|
14
|
-
class Stddev < Variance
|
|
15
|
-
|
|
16
|
-
# Finalizes the computation.
|
|
17
|
-
#
|
|
18
|
-
# @see Aggregator::InstanceMethods#finalize
|
|
19
|
-
def finalize(memo)
|
|
20
|
-
Math.sqrt(super(memo))
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
end # class Stddev
|
|
24
|
-
end # class Aggregator
|
|
25
|
-
end # module Alf
|
data/lib/alf/aggregator/sum.rb
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
module Alf
|
|
2
|
-
class Aggregator
|
|
3
|
-
#
|
|
4
|
-
# Defines a `sum()` aggregation operator.
|
|
5
|
-
#
|
|
6
|
-
# Example:
|
|
7
|
-
#
|
|
8
|
-
# # direct ruby usage
|
|
9
|
-
# Alf::Aggregator.sum{ qty }.aggregate(...)
|
|
10
|
-
#
|
|
11
|
-
# # lispy
|
|
12
|
-
# (summarize :supplies, [:sid], :total => sum{ qty })
|
|
13
|
-
#
|
|
14
|
-
class Sum < Aggregator
|
|
15
|
-
|
|
16
|
-
# Returns 0 as least value.
|
|
17
|
-
#
|
|
18
|
-
# @see Aggregator::InstanceMethods#least
|
|
19
|
-
def least()
|
|
20
|
-
0
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Aggregates on a tuple occurence through `memo + val`
|
|
24
|
-
#
|
|
25
|
-
# @see Aggregator::InstanceMethods#_happens
|
|
26
|
-
def _happens(memo, val)
|
|
27
|
-
memo + val
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
end # class Sum
|
|
31
|
-
end # class Aggregator
|
|
32
|
-
end # module Alf
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
module Alf
|
|
2
|
-
class Aggregator
|
|
3
|
-
#
|
|
4
|
-
# Defines a `variance()` aggregation operator.
|
|
5
|
-
#
|
|
6
|
-
# Example:
|
|
7
|
-
#
|
|
8
|
-
# # direct ruby usage
|
|
9
|
-
# Alf::Aggregator.variance{ qty }.aggregate(...)
|
|
10
|
-
#
|
|
11
|
-
# # lispy
|
|
12
|
-
# (summarize :supplies, [:sid], :total => variance{ qty })
|
|
13
|
-
#
|
|
14
|
-
class Variance < Aggregator
|
|
15
|
-
|
|
16
|
-
# Returns the least value.
|
|
17
|
-
#
|
|
18
|
-
# @see Aggregator::InstanceMethods#least
|
|
19
|
-
def least()
|
|
20
|
-
[0, 0.0, 0.0]
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Aggregates on a tuple occurence.
|
|
24
|
-
#
|
|
25
|
-
# @see Aggregator::InstanceMethods#_happens
|
|
26
|
-
def _happens(memo, val)
|
|
27
|
-
count, mean, m2 = memo
|
|
28
|
-
count += 1
|
|
29
|
-
delta = val - mean
|
|
30
|
-
mean += (delta / count)
|
|
31
|
-
m2 += delta*(val - mean)
|
|
32
|
-
[count, mean, m2]
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
# Finalizes the computation.
|
|
36
|
-
#
|
|
37
|
-
# @see Aggregator::InstanceMethods#finalize
|
|
38
|
-
def finalize(memo)
|
|
39
|
-
count, mean, m2 = memo
|
|
40
|
-
m2 / count
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
end # class Variance
|
|
44
|
-
end # class Aggregator
|
|
45
|
-
end # module Alf
|
data/lib/alf/environment.rb
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
module Alf
|
|
2
|
-
#
|
|
3
|
-
# An environment encapsulates the interface with the outside world, providing
|
|
4
|
-
# base iterators for named datasets.
|
|
5
|
-
#
|
|
6
|
-
# An environment is typically obtained through the factory defined by this
|
|
7
|
-
# class:
|
|
8
|
-
#
|
|
9
|
-
# # Returns the default environment (examples, for now)
|
|
10
|
-
# Alf::Environment.default
|
|
11
|
-
#
|
|
12
|
-
# # Returns an environment on Alf's examples
|
|
13
|
-
# Alf::Environment.examples
|
|
14
|
-
#
|
|
15
|
-
# # Returns an environment on a specific folder, automatically
|
|
16
|
-
# # resolving datasources via recognized file extensions (see Reader)
|
|
17
|
-
# Alf::Environment.folder('path/to/a/folder')
|
|
18
|
-
#
|
|
19
|
-
# You can implement your own environment by subclassing this class and
|
|
20
|
-
# implementing the {#dataset} method. As additional support is implemented
|
|
21
|
-
# in the base class, Environment should never be mimiced.
|
|
22
|
-
#
|
|
23
|
-
# This class provides an extension point allowing to participate to auto
|
|
24
|
-
# detection and resolving of the --env=... option when alf is used in shell.
|
|
25
|
-
# See Environment.register, Environment.autodetect and Environment.recognizes?
|
|
26
|
-
# for details.
|
|
27
|
-
#
|
|
28
|
-
class Environment
|
|
29
|
-
require 'alf/environment/class_methods'
|
|
30
|
-
require 'alf/environment/instance_methods'
|
|
31
|
-
require 'alf/environment/folder'
|
|
32
|
-
|
|
33
|
-
end # class Environment
|
|
34
|
-
end # module Alf
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
module Alf
|
|
2
|
-
class Environment
|
|
3
|
-
#
|
|
4
|
-
# Installs class-level methods for Alf environments.
|
|
5
|
-
#
|
|
6
|
-
module ClassMethods
|
|
7
|
-
|
|
8
|
-
# Returns registered environments
|
|
9
|
-
#
|
|
10
|
-
# @return [Array<Environment>] registered environments.
|
|
11
|
-
def environments
|
|
12
|
-
@environments ||= []
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
# Register an environment class under a specific name.
|
|
16
|
-
#
|
|
17
|
-
# Registered class must implement a recognizes? method that takes an array
|
|
18
|
-
# of arguments; it must returns true if an environment instance can be
|
|
19
|
-
# built using those arguments, false otherwise.
|
|
20
|
-
#
|
|
21
|
-
# Example:
|
|
22
|
-
#
|
|
23
|
-
# Environment.register(:sqlite, MySQLiteEnvClass)
|
|
24
|
-
# Environment.sqlite(...) # MySQLiteEnvClass.new(...)
|
|
25
|
-
# Environment.autodetect(...) # => MySQLiteEnvClass.new(...)
|
|
26
|
-
#
|
|
27
|
-
# @see also autodetect and recognizes?
|
|
28
|
-
# @param [Symbol] name name of the environment kind
|
|
29
|
-
# @param [Class] clazz class that implemented the environment
|
|
30
|
-
def register(name, clazz)
|
|
31
|
-
environments << [name, clazz]
|
|
32
|
-
(class << self; self; end).
|
|
33
|
-
send(:define_method, name) do |*args|
|
|
34
|
-
clazz.new(*args)
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
# Auto-detect the environment to use for specific arguments.
|
|
39
|
-
#
|
|
40
|
-
# This method returns an instance of the first registered Environment
|
|
41
|
-
# class that returns true to an invocation of recognizes?(args). It raises
|
|
42
|
-
# an ArgumentError if no such class can be found.
|
|
43
|
-
#
|
|
44
|
-
# @param [Array] args arguments for the Environment constructor
|
|
45
|
-
# @return [Environment] an environment instance
|
|
46
|
-
# @raise [ArgumentError] when no registered class recognizes the arguments
|
|
47
|
-
def autodetect(*args)
|
|
48
|
-
if (args.size == 1) and args.first.is_a?(Environment)
|
|
49
|
-
return args.first
|
|
50
|
-
else
|
|
51
|
-
name, clazz = environments.find{|nc| nc.last.recognizes?(args)}
|
|
52
|
-
return clazz.new(*args) if clazz
|
|
53
|
-
end
|
|
54
|
-
envs = environments.map{|r| r.last.name}.join(', ')
|
|
55
|
-
raise ArgumentError, "Unable to auto-detect Environment with #{args.inspect} [#{envs}]"
|
|
56
|
-
end
|
|
57
|
-
alias :coerce :autodetect
|
|
58
|
-
|
|
59
|
-
# Returns true _args_ can be used for building an environment instance,
|
|
60
|
-
# false otherwise.
|
|
61
|
-
#
|
|
62
|
-
# When returning true, an immediate invocation of new(*args) should
|
|
63
|
-
# succeed. While runtime exception are admitted (no such database, for
|
|
64
|
-
# example), argument errors should not occur (missing argument, wrong
|
|
65
|
-
# typing, etc.).
|
|
66
|
-
#
|
|
67
|
-
# Please be specific in the implementation of this extension point, as
|
|
68
|
-
# registered environments for a chain and each of them should have a
|
|
69
|
-
# chance of being selected.
|
|
70
|
-
#
|
|
71
|
-
# @param [Array] args arguments for the Environment constructor
|
|
72
|
-
# @return [Boolean] true if an environment may be built using `args`,
|
|
73
|
-
# false otherwise.
|
|
74
|
-
def recognizes?(args)
|
|
75
|
-
false
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
# Returns Alf's default environment
|
|
79
|
-
#
|
|
80
|
-
# @return [Environment] the default environment instance.
|
|
81
|
-
def default
|
|
82
|
-
examples
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
# Returns an environment on Alf's examples
|
|
86
|
-
#
|
|
87
|
-
# @return [Environment] an environment on Alf's examples.
|
|
88
|
-
def examples
|
|
89
|
-
folder File.expand_path('../../../../examples/operators', __FILE__)
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
end # module ClassMethods
|
|
93
|
-
extend(ClassMethods)
|
|
94
|
-
end # class Environment
|
|
95
|
-
end # module Alf
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
module Alf
|
|
2
|
-
class Environment
|
|
3
|
-
#
|
|
4
|
-
# Specialization of Environment to work on files of a given folder.
|
|
5
|
-
#
|
|
6
|
-
# This kind of environment resolves datasets by simply looking at
|
|
7
|
-
# recognized files in a specific folder. "Recognized" files are simply
|
|
8
|
-
# those for which a Reader subclass has been previously registered.
|
|
9
|
-
# This environment then serves reader instances.
|
|
10
|
-
#
|
|
11
|
-
class Folder < Environment
|
|
12
|
-
|
|
13
|
-
class << self
|
|
14
|
-
|
|
15
|
-
# (see Environment.recognizes?)
|
|
16
|
-
#
|
|
17
|
-
# @return [Boolean] true if args contains one String only, which denotes
|
|
18
|
-
# an existing folder; false otherwise
|
|
19
|
-
def recognizes?(args)
|
|
20
|
-
(args.size == 1) &&
|
|
21
|
-
args.first.is_a?(String) &&
|
|
22
|
-
File.directory?(args.first.to_s)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
end # class << self
|
|
26
|
-
|
|
27
|
-
# Creates an environment instance, wired to the specified folder.
|
|
28
|
-
#
|
|
29
|
-
# @param [String] folder path to the folder to use as dataset source.
|
|
30
|
-
def initialize(folder)
|
|
31
|
-
@folder = folder
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# (see Environment#dataset)
|
|
35
|
-
def dataset(name)
|
|
36
|
-
if file = find_file(name)
|
|
37
|
-
Reader.reader(file, self)
|
|
38
|
-
else
|
|
39
|
-
raise NoSuchDatasetError, "No such dataset #{name} (#{@folder})"
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
protected
|
|
44
|
-
|
|
45
|
-
# Finds a specific file by name
|
|
46
|
-
#
|
|
47
|
-
# @param [String] name the name of a dataset
|
|
48
|
-
# @return [String] path to an existing file if it exists, nil otherwise.
|
|
49
|
-
def find_file(name)
|
|
50
|
-
if File.file?(explicit = File.join(@folder, name.to_s))
|
|
51
|
-
explicit
|
|
52
|
-
else
|
|
53
|
-
Dir[File.join(@folder, "#{name}.*")].find{|f| File.file?(f)}
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
Environment.register(:folder, self)
|
|
58
|
-
end # class Folder
|
|
59
|
-
end # class Environment
|
|
60
|
-
end # module Alf
|