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,97 +0,0 @@
|
|
|
1
|
-
module Alf
|
|
2
|
-
class Reader
|
|
3
|
-
module InstanceMethods
|
|
4
|
-
|
|
5
|
-
# Default reader options
|
|
6
|
-
DEFAULT_OPTIONS = {}
|
|
7
|
-
|
|
8
|
-
# @return [Environment] Wired environment
|
|
9
|
-
attr_accessor :environment
|
|
10
|
-
|
|
11
|
-
# @return [String or IO] Input IO, or file name
|
|
12
|
-
attr_accessor :input
|
|
13
|
-
|
|
14
|
-
# @return [Hash] Reader's options
|
|
15
|
-
attr_accessor :options
|
|
16
|
-
|
|
17
|
-
# Creates a reader instance.
|
|
18
|
-
#
|
|
19
|
-
# @param [String or IO] path to a file or IO object for input
|
|
20
|
-
# @param [Environment] environment wired environment, serving this reader
|
|
21
|
-
# @param [Hash] options Reader's options (see doc of subclasses)
|
|
22
|
-
def initialize(*args)
|
|
23
|
-
@input, @environment, @options = case args.first
|
|
24
|
-
when String, IO, StringIO
|
|
25
|
-
Tools.varargs(args, [args.first.class, Environment, Hash])
|
|
26
|
-
else
|
|
27
|
-
Tools.varargs(args, [String, Environment, Hash])
|
|
28
|
-
end
|
|
29
|
-
@options = self.class.const_get(:DEFAULT_OPTIONS).merge(@options || {})
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# (see Iterator#each)
|
|
33
|
-
#
|
|
34
|
-
# @private the default implementation reads lines of the input stream and
|
|
35
|
-
# yields the block with <code>line2tuple(line)</code> on each of them. This
|
|
36
|
-
# method may be overriden if this behavior does not fit reader's needs.
|
|
37
|
-
def each
|
|
38
|
-
each_input_line do |line|
|
|
39
|
-
tuple = line2tuple(line)
|
|
40
|
-
yield tuple unless tuple.nil?
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
protected
|
|
45
|
-
|
|
46
|
-
# @return the input file path, or nil if this Reader is bound to an IO
|
|
47
|
-
# directly.
|
|
48
|
-
def input_path
|
|
49
|
-
input.is_a?(String) ? input : nil
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# Coerces the input object to an IO and yields the block with it.
|
|
53
|
-
#
|
|
54
|
-
# StringIO and IO input are yield directly while file paths are first
|
|
55
|
-
# opened in read mode and then yield.
|
|
56
|
-
def with_input_io
|
|
57
|
-
case input
|
|
58
|
-
when IO, StringIO
|
|
59
|
-
yield input
|
|
60
|
-
when String
|
|
61
|
-
File.open(input, 'r'){|io| yield io}
|
|
62
|
-
else
|
|
63
|
-
raise "Unable to convert #{input} to an IO object"
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
# Returns the whole input text.
|
|
68
|
-
#
|
|
69
|
-
# This feature should only be used by subclasses on inputs that are
|
|
70
|
-
# small enough to fit in memory. Consider implementing readers without this
|
|
71
|
-
# feature on files that could be larger.
|
|
72
|
-
def input_text
|
|
73
|
-
with_input_io{|io| io.readlines.join}
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
# Yields the block with each line of the input text in turn.
|
|
77
|
-
#
|
|
78
|
-
# This method is an helper for files that capture one tuple on each input
|
|
79
|
-
# line. It should be used in those cases, as the resulting reader will not
|
|
80
|
-
# load all input in memory but serve tuples on demand.
|
|
81
|
-
def each_input_line
|
|
82
|
-
with_input_io{|io| io.each_line(&Proc.new)}
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
# Converts a line previously read from the input stream to a tuple.
|
|
86
|
-
#
|
|
87
|
-
# The line is simply ignored is this method return nil. Errors should be
|
|
88
|
-
# properly handled by raising exceptions. This method MUST be implemented
|
|
89
|
-
# by subclasses unless each is overriden.
|
|
90
|
-
def line2tuple(line)
|
|
91
|
-
end
|
|
92
|
-
undef :line2tuple
|
|
93
|
-
|
|
94
|
-
end # module InstanceMethods
|
|
95
|
-
include InstanceMethods
|
|
96
|
-
end # class Reader
|
|
97
|
-
end # module Alf
|
data/lib/alf/reader/rash.rb
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
module Alf
|
|
2
|
-
class Reader
|
|
3
|
-
#
|
|
4
|
-
# Specialization of the Reader contract for .rash files.
|
|
5
|
-
#
|
|
6
|
-
# A .rash file/stream contains one ruby hash literal on each line. This
|
|
7
|
-
# reader simply decodes each of them in turn with Kernel.eval, providing a
|
|
8
|
-
# state-less reader (that is, tuples are not all loaded in memory at once).
|
|
9
|
-
#
|
|
10
|
-
class Rash < Reader
|
|
11
|
-
|
|
12
|
-
# (see Reader#line2tuple)
|
|
13
|
-
def line2tuple(line)
|
|
14
|
-
begin
|
|
15
|
-
h = Kernel.eval(line)
|
|
16
|
-
raise "hash expected, got #{h}" unless h.is_a?(Hash)
|
|
17
|
-
rescue Exception => ex
|
|
18
|
-
$stderr << "Skipping #{line.strip}: #{ex.message}\n"
|
|
19
|
-
nil
|
|
20
|
-
else
|
|
21
|
-
return h
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
Reader.register(:rash, [".rash"], self)
|
|
26
|
-
end # class Rash
|
|
27
|
-
end # class Reader
|
|
28
|
-
end # module Alf
|
data/lib/alf/relation.rb
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
module Alf
|
|
2
|
-
#
|
|
3
|
-
# Defines an in-memory relation data structure.
|
|
4
|
-
#
|
|
5
|
-
# A relation is a set of tuples; a tuple is a set of attribute (name, value)
|
|
6
|
-
# pairs. The class implements such a data structure with full relational
|
|
7
|
-
# algebra installed as instance methods.
|
|
8
|
-
#
|
|
9
|
-
# Relation values can be obtained in various ways, for example by invoking
|
|
10
|
-
# a relational operator on an existing relation. Relation literals are simply
|
|
11
|
-
# constructed as follows:
|
|
12
|
-
#
|
|
13
|
-
# Alf::Relation[
|
|
14
|
-
# # ... a comma list of ruby hashes ...
|
|
15
|
-
# ]
|
|
16
|
-
#
|
|
17
|
-
# See main Alf documentation about relational operators.
|
|
18
|
-
#
|
|
19
|
-
class Relation
|
|
20
|
-
include Iterator
|
|
21
|
-
|
|
22
|
-
require "alf/relation/class_methods"
|
|
23
|
-
require "alf/relation/instance_methods"
|
|
24
|
-
|
|
25
|
-
DEE = Relation.coerce([{}])
|
|
26
|
-
DUM = Relation.coerce([])
|
|
27
|
-
end # class Relation
|
|
28
|
-
end # module Alf
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
module Alf
|
|
2
|
-
class Relation
|
|
3
|
-
module ClassMethods
|
|
4
|
-
|
|
5
|
-
#
|
|
6
|
-
# Coerces `val` to a relation.
|
|
7
|
-
#
|
|
8
|
-
# Recognized arguments are: Relation (identity coercion), Set of ruby hashes,
|
|
9
|
-
# Array of ruby hashes, Alf::Iterator.
|
|
10
|
-
#
|
|
11
|
-
# @return [Relation] a relation instance for the given set of tuples
|
|
12
|
-
# @raise [ArgumentError] when `val` is not recognized
|
|
13
|
-
#
|
|
14
|
-
def coerce(val)
|
|
15
|
-
Alf::Tools.to_relation(val)
|
|
16
|
-
rescue Myrrha::Error
|
|
17
|
-
raise ArgumentError, "Unable to coerce `#{val}` to a Relation"
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# (see Relation.coerce)
|
|
21
|
-
def [](*tuples)
|
|
22
|
-
coerce(tuples)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
end # module ClassMethods
|
|
26
|
-
extend(ClassMethods)
|
|
27
|
-
end # class Relation
|
|
28
|
-
end # module Alf
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
module Alf
|
|
2
|
-
class Relation
|
|
3
|
-
module InstanceMethods
|
|
4
|
-
|
|
5
|
-
protected
|
|
6
|
-
|
|
7
|
-
# @return [Set] the set of tuples
|
|
8
|
-
attr_reader :tuples
|
|
9
|
-
|
|
10
|
-
public
|
|
11
|
-
|
|
12
|
-
# Creates a Relation instance.
|
|
13
|
-
#
|
|
14
|
-
# @param [Set] tuples a set of tuples
|
|
15
|
-
def initialize(tuples)
|
|
16
|
-
raise ArgumentError unless tuples.is_a?(Set)
|
|
17
|
-
@tuples = tuples
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# (see Iterator#each)
|
|
21
|
-
def each(&block)
|
|
22
|
-
tuples.each(&block)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# Returns relation's cardinality (number of tuples).
|
|
26
|
-
#
|
|
27
|
-
# @return [Integer] relation's cardinality
|
|
28
|
-
def cardinality
|
|
29
|
-
tuples.size
|
|
30
|
-
end
|
|
31
|
-
alias :size :cardinality
|
|
32
|
-
alias :count :cardinality
|
|
33
|
-
|
|
34
|
-
# Returns true if this relation is empty
|
|
35
|
-
def empty?
|
|
36
|
-
cardinality == 0
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# Install the DSL through iteration over defined operators
|
|
40
|
-
Operator::each do |op_class|
|
|
41
|
-
meth_name = Tools.ruby_case(Tools.class_name(op_class)).to_sym
|
|
42
|
-
if op_class.unary?
|
|
43
|
-
define_method(meth_name) do |*args|
|
|
44
|
-
op = op_class.new(*args.unshift([self]))
|
|
45
|
-
Relation.coerce(op)
|
|
46
|
-
end
|
|
47
|
-
elsif op_class.binary?
|
|
48
|
-
define_method(meth_name) do |right, *args|
|
|
49
|
-
op = op_class.new(*args.unshift([self, Iterator.coerce(right)]))
|
|
50
|
-
Relation.coerce(op)
|
|
51
|
-
end
|
|
52
|
-
elsif op_class.nullary?
|
|
53
|
-
define_method(meth_name) do |*args|
|
|
54
|
-
op = op_class.new(*args)
|
|
55
|
-
Relation.coerce(op)
|
|
56
|
-
end
|
|
57
|
-
else
|
|
58
|
-
raise "Unexpected operator #{op_class}"
|
|
59
|
-
end
|
|
60
|
-
end # Operators::each
|
|
61
|
-
|
|
62
|
-
alias :+ :union
|
|
63
|
-
alias :- :minus
|
|
64
|
-
|
|
65
|
-
# Shortcut for project(attributes, :allbut => true)
|
|
66
|
-
def allbut(attributes)
|
|
67
|
-
project(attributes, :allbut => true)
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
# (see Object#hash)
|
|
71
|
-
def hash
|
|
72
|
-
@tuples.hash
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
# (see Object#==)
|
|
76
|
-
def ==(other)
|
|
77
|
-
return nil unless other.is_a?(Relation)
|
|
78
|
-
other.tuples == self.tuples
|
|
79
|
-
end
|
|
80
|
-
alias :eql? :==
|
|
81
|
-
|
|
82
|
-
# Returns a textual representation of this relation
|
|
83
|
-
def to_s
|
|
84
|
-
Alf::Renderer.text(self).execute("")
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
# Returns an array with all tuples in this relation.
|
|
88
|
-
#
|
|
89
|
-
# @param [Tools::Ordering] an optional ordering key (any argument
|
|
90
|
-
# recognized by Ordering.coerce is supported here).
|
|
91
|
-
# @return [Array] an array of hashes, in requested order (if specified)
|
|
92
|
-
def to_a(okey = nil)
|
|
93
|
-
okey = Tools.coerce(okey, Ordering) if okey
|
|
94
|
-
ary = tuples.to_a
|
|
95
|
-
ary.sort!(&okey.sorter) if okey
|
|
96
|
-
ary
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
# Returns a json representation of this Relation.
|
|
100
|
-
def to_json(*args)
|
|
101
|
-
to_a.to_json(*args)
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
# Returns a literal representation of this relation
|
|
105
|
-
def to_ruby_literal
|
|
106
|
-
"Alf::Relation[" +
|
|
107
|
-
tuples.collect{|t| Tools.to_ruby_literal(t)}.join(', ') + "]"
|
|
108
|
-
end
|
|
109
|
-
alias :inspect :to_ruby_literal
|
|
110
|
-
|
|
111
|
-
# Returns self
|
|
112
|
-
def to_relation
|
|
113
|
-
self
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
end # module InstanceMethods
|
|
117
|
-
include(InstanceMethods)
|
|
118
|
-
end # class Relation
|
|
119
|
-
end # module Alf
|
data/lib/alf/renderer.rb
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
module Alf
|
|
2
|
-
#
|
|
3
|
-
# Renders a relation (given by any Iterator) in a specific format.
|
|
4
|
-
#
|
|
5
|
-
# A renderer takes an Iterator instance as input and renders it on an output
|
|
6
|
-
# stream. Renderers are **not** iterators themselves. Their usage is made
|
|
7
|
-
# via their {#execute} method.
|
|
8
|
-
#
|
|
9
|
-
# Similarly to the {Reader} class, this one provides a registration mechanism
|
|
10
|
-
# for specific output formats. The common scenario is as follows:
|
|
11
|
-
#
|
|
12
|
-
# # Register a new renderer for :foo format (automatically provides the
|
|
13
|
-
# # '--foo Render output as a foo stream' option of 'alf show') and with
|
|
14
|
-
# # the FooRenderer class for handling rendering.
|
|
15
|
-
# Renderer.register(:foo, "as a foo stream", FooRenderer)
|
|
16
|
-
#
|
|
17
|
-
# # Later on, you can request a renderer instance for a specific format
|
|
18
|
-
# # as follows (wiring input is optional)
|
|
19
|
-
# r = Renderer.renderer(:foo, [an Iterator])
|
|
20
|
-
#
|
|
21
|
-
# # Also, a factory method is automatically installed on the Renderer class
|
|
22
|
-
# # itself.
|
|
23
|
-
# r = Renderer.foo([an Iterator])
|
|
24
|
-
#
|
|
25
|
-
class Renderer
|
|
26
|
-
require 'alf/renderer/class_methods'
|
|
27
|
-
require 'alf/renderer/instance_methods'
|
|
28
|
-
require 'alf/renderer/rash'
|
|
29
|
-
require 'alf/renderer/text'
|
|
30
|
-
|
|
31
|
-
end # class Renderer
|
|
32
|
-
end # module Alf
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
module Alf
|
|
2
|
-
class Renderer
|
|
3
|
-
module ClassMethods
|
|
4
|
-
|
|
5
|
-
#
|
|
6
|
-
# Returns registered renderers
|
|
7
|
-
#
|
|
8
|
-
def renderers
|
|
9
|
-
@renderers ||= []
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
#
|
|
13
|
-
# Register a renderering class with a given name and description.
|
|
14
|
-
#
|
|
15
|
-
# Registered class must at least provide a constructor with an empty
|
|
16
|
-
# signature. The name must be a symbol which can safely be used as a ruby
|
|
17
|
-
# method name. A factory class method of that name and degelation signature
|
|
18
|
-
# is automatically installed on the Renderer class.
|
|
19
|
-
#
|
|
20
|
-
# @param [Symbol] name a name for the output format
|
|
21
|
-
# @param [String] description an output format description (for 'alf show')
|
|
22
|
-
# @param [Class] clazz Renderer subclass used to render in this format
|
|
23
|
-
#
|
|
24
|
-
def register(name, description, clazz)
|
|
25
|
-
renderers << [name, description, clazz]
|
|
26
|
-
(class << self; self; end).
|
|
27
|
-
send(:define_method, name) do |*args|
|
|
28
|
-
clazz.new(*args)
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
#
|
|
33
|
-
# Returns a Renderer instance for the given output format name.
|
|
34
|
-
#
|
|
35
|
-
# @param [Symbol] name name of an output format previously registered
|
|
36
|
-
# @param [...] args other arguments to pass to the renderer constructor
|
|
37
|
-
# @return [Renderer] a Renderer instance, already wired if args are
|
|
38
|
-
# provided
|
|
39
|
-
#
|
|
40
|
-
def renderer(name, *args)
|
|
41
|
-
if r = renderers.find{|triple| triple[0] == name}
|
|
42
|
-
r[2].new(*args)
|
|
43
|
-
else
|
|
44
|
-
raise "No renderer registered for #{name}"
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
#
|
|
49
|
-
# Yields each (name,description,clazz) previously registered in turn
|
|
50
|
-
#
|
|
51
|
-
def each_renderer
|
|
52
|
-
renderers.each(&Proc.new)
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
end # module ClassMethods
|
|
56
|
-
extend(ClassMethods)
|
|
57
|
-
end # class Renderer
|
|
58
|
-
end # module Alf
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
module Alf
|
|
2
|
-
class Renderer
|
|
3
|
-
module InstanceMethods
|
|
4
|
-
|
|
5
|
-
# Default renderer options
|
|
6
|
-
DEFAULT_OPTIONS = {}
|
|
7
|
-
|
|
8
|
-
# Renderer input (typically an Iterator)
|
|
9
|
-
attr_accessor :input
|
|
10
|
-
|
|
11
|
-
# @return [Environment] Optional wired environment
|
|
12
|
-
attr_accessor :environment
|
|
13
|
-
|
|
14
|
-
# @return [Hash] Renderer's options
|
|
15
|
-
attr_accessor :options
|
|
16
|
-
|
|
17
|
-
# Creates a reader instance.
|
|
18
|
-
#
|
|
19
|
-
# @param [Iterator] iterator an Iterator of tuples to render
|
|
20
|
-
# @param [Environment] environment wired environment, serving this reader
|
|
21
|
-
# @param [Hash] options Reader's options (see doc of subclasses)
|
|
22
|
-
def initialize(*args)
|
|
23
|
-
@input, @environment, @options = case args.first
|
|
24
|
-
when Array
|
|
25
|
-
Tools.varargs(args, [Array, Environment, Hash])
|
|
26
|
-
else
|
|
27
|
-
Tools.varargs(args, [Iterator, Environment, Hash])
|
|
28
|
-
end
|
|
29
|
-
@options = self.class.const_get(:DEFAULT_OPTIONS).merge(@options || {})
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# Executes the rendering, outputting the resulting tuples on the provided
|
|
33
|
-
# output buffer.
|
|
34
|
-
#
|
|
35
|
-
# The default implementation simply coerces the input as an Iterator and
|
|
36
|
-
# delegates the call to {#render}.
|
|
37
|
-
def execute(output = $stdout)
|
|
38
|
-
render(Iterator.coerce(input, environment), output)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
protected
|
|
42
|
-
|
|
43
|
-
# Renders tuples served by the iterator to the output buffer provided and
|
|
44
|
-
# returns the latter.
|
|
45
|
-
#
|
|
46
|
-
# This method must be implemented by subclasses unless {#execute} is
|
|
47
|
-
# overriden.
|
|
48
|
-
def render(iterator, output)
|
|
49
|
-
end
|
|
50
|
-
undef :render
|
|
51
|
-
|
|
52
|
-
end # module InstanceMethods
|
|
53
|
-
include InstanceMethods
|
|
54
|
-
end # class Renderer
|
|
55
|
-
end # module Alf
|