axiom 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -1
- data/.rspec +1 -0
- data/.ruby-gemset +1 -0
- data/.travis.yml +11 -20
- data/Gemfile +5 -2
- data/Gemfile.devtools +26 -28
- data/Guardfile +18 -9
- data/README.md +20 -39
- data/axiom.gemspec +17 -18
- data/benchmarks/memory.rb +14 -14
- data/benchmarks/speed.rb +14 -14
- data/config/devtools.yml +2 -0
- data/config/flay.yml +1 -1
- data/config/flog.yml +1 -1
- data/config/reek.yml +3 -3
- data/config/rubocop.yml +62 -0
- data/lib/axiom.rb +17 -20
- data/lib/axiom/aggregate.rb +2 -5
- data/lib/axiom/aggregate/count.rb +4 -4
- data/lib/axiom/aggregate/maximum.rb +3 -3
- data/lib/axiom/aggregate/mean.rb +9 -9
- data/lib/axiom/aggregate/minimum.rb +3 -3
- data/lib/axiom/aggregate/standard_deviation.rb +5 -4
- data/lib/axiom/aggregate/sum.rb +4 -4
- data/lib/axiom/aggregate/variance.rb +15 -12
- data/lib/axiom/algebra/extension.rb +2 -2
- data/lib/axiom/algebra/projection.rb +3 -3
- data/lib/axiom/algebra/rename/aliases.rb +6 -6
- data/lib/axiom/algebra/restriction.rb +1 -1
- data/lib/axiom/algebra/summarization.rb +5 -7
- data/lib/axiom/algebra/summarization/summaries.rb +2 -2
- data/lib/axiom/algebra/union.rb +1 -1
- data/lib/axiom/attribute.rb +24 -33
- data/lib/axiom/attribute/boolean.rb +10 -20
- data/lib/axiom/attribute/class.rb +5 -5
- data/lib/axiom/attribute/date.rb +5 -19
- data/lib/axiom/attribute/date_time.rb +5 -19
- data/lib/axiom/attribute/decimal.rb +5 -5
- data/lib/axiom/attribute/float.rb +5 -7
- data/lib/axiom/attribute/integer.rb +5 -5
- data/lib/axiom/attribute/numeric.rb +15 -39
- data/lib/axiom/attribute/object.rb +5 -5
- data/lib/axiom/attribute/string.rb +16 -63
- data/lib/axiom/attribute/time.rb +5 -19
- data/lib/axiom/function.rb +14 -2
- data/lib/axiom/function/binary.rb +17 -0
- data/lib/axiom/function/connective.rb +6 -3
- data/lib/axiom/function/connective/conjunction.rb +2 -2
- data/lib/axiom/function/connective/disjunction.rb +2 -2
- data/lib/axiom/function/numeric.rb +13 -0
- data/lib/axiom/function/numeric/absolute.rb +1 -1
- data/lib/axiom/function/numeric/division.rb +18 -2
- data/lib/axiom/function/numeric/exponentiation.rb +1 -1
- data/lib/axiom/function/numeric/modulo.rb +1 -1
- data/lib/axiom/function/numeric/square_root.rb +19 -3
- data/lib/axiom/function/predicate.rb +6 -3
- data/lib/axiom/function/predicate/exclusion.rb +2 -2
- data/lib/axiom/function/predicate/inclusion.rb +2 -2
- data/lib/axiom/function/proposition.rb +12 -9
- data/lib/axiom/function/string/length.rb +6 -3
- data/lib/axiom/function/unary.rb +12 -0
- data/lib/axiom/relation.rb +31 -50
- data/lib/axiom/relation/base.rb +3 -3
- data/lib/axiom/relation/empty.rb +3 -32
- data/lib/axiom/relation/header.rb +31 -15
- data/lib/axiom/relation/keys.rb +4 -4
- data/lib/axiom/relation/materialized.rb +2 -1
- data/lib/axiom/relation/operation/limit.rb +51 -0
- data/lib/axiom/relation/operation/order.rb +21 -28
- data/lib/axiom/relation/operation/order/direction_set.rb +1 -1
- data/lib/axiom/relation/proxy.rb +2 -2
- data/lib/axiom/relation/variable.rb +117 -0
- data/lib/axiom/support/equalizer.rb +9 -2
- data/lib/axiom/support/evaluator.rb +4 -1
- data/lib/axiom/tuple.rb +2 -2
- data/lib/axiom/version.rb +1 -1
- data/spec/integration/axiom/algebra/join_spec.rb +2 -2
- data/spec/integration/axiom/algebra/product_spec.rb +2 -2
- data/spec/integration/axiom/algebra/projection_spec.rb +6 -6
- data/spec/integration/axiom/algebra/summarization_spec.rb +9 -9
- data/spec/integration/axiom/relation/efficient_enumerable_spec.rb +18 -18
- data/spec/integration/axiom/relation/mutable_enumerator_spec.rb +51 -0
- data/spec/integration/axiom/relation/variable/thread_safe_spec.rb +45 -0
- data/spec/integration/axiom/relation/writable_relations_spec.rb +14 -14
- data/spec/shared/invertible_method_behaviour.rb +1 -1
- data/spec/spec_helper.rb +23 -15
- data/spec/support/config_alias.rb +2 -0
- data/spec/unit/axiom/aggregate/call_spec.rb +5 -5
- data/spec/unit/axiom/aggregate/class_methods/finalize_spec.rb +3 -3
- data/spec/unit/axiom/aggregate/count/class_methods/call_spec.rb +3 -3
- data/spec/unit/axiom/aggregate/count/class_methods/type_spec.rb +11 -0
- data/spec/unit/axiom/aggregate/count/methods/count_spec.rb +1 -1
- data/spec/unit/axiom/aggregate/default_spec.rb +2 -2
- data/spec/unit/axiom/aggregate/finalize_spec.rb +3 -3
- data/spec/unit/axiom/aggregate/maximum/class_methods/call_spec.rb +3 -3
- data/spec/unit/axiom/aggregate/maximum/methods/maximum_spec.rb +2 -2
- data/spec/unit/axiom/aggregate/maximum/type_spec.rb +4 -4
- data/spec/unit/axiom/aggregate/mean/class_methods/call_spec.rb +6 -6
- data/spec/unit/axiom/aggregate/mean/class_methods/default_spec.rb +1 -1
- data/spec/unit/axiom/aggregate/mean/class_methods/finalize_spec.rb +4 -4
- data/spec/unit/axiom/aggregate/mean/class_methods/type_spec.rb +11 -0
- data/spec/unit/axiom/aggregate/mean/methods/mean_spec.rb +2 -2
- data/spec/unit/axiom/aggregate/minimum/class_methods/call_spec.rb +3 -3
- data/spec/unit/axiom/aggregate/minimum/methods/minimum_spec.rb +2 -2
- data/spec/unit/axiom/aggregate/minimum/type_spec.rb +4 -4
- data/spec/unit/axiom/aggregate/standard_deviation/class_methods/finalize_spec.rb +4 -4
- data/spec/unit/axiom/aggregate/standard_deviation/class_methods/type_spec.rb +11 -0
- data/spec/unit/axiom/aggregate/standard_deviation/methods/standard_deviation_spec.rb +2 -2
- data/spec/unit/axiom/aggregate/sum/class_methods/call_spec.rb +3 -3
- data/spec/unit/axiom/aggregate/sum/default_spec.rb +3 -3
- data/spec/unit/axiom/aggregate/sum/methods/sum_spec.rb +1 -1
- data/spec/unit/axiom/aggregate/sum/type_spec.rb +4 -4
- data/spec/unit/axiom/aggregate/variance/class_methods/call_spec.rb +9 -9
- data/spec/unit/axiom/aggregate/variance/class_methods/default_spec.rb +1 -1
- data/spec/unit/axiom/aggregate/variance/class_methods/finalize_spec.rb +11 -3
- data/spec/unit/axiom/aggregate/variance/class_methods/type_spec.rb +11 -0
- data/spec/unit/axiom/aggregate/variance/methods/variance_spec.rb +2 -2
- data/spec/unit/axiom/algebra/difference/delete_spec.rb +6 -6
- data/spec/unit/axiom/algebra/difference/each_spec.rb +6 -6
- data/spec/unit/axiom/algebra/difference/insert_spec.rb +5 -5
- data/spec/unit/axiom/algebra/difference/methods/difference_spec.rb +5 -5
- data/spec/unit/axiom/algebra/extension/class_methods/new_spec.rb +4 -4
- data/spec/unit/axiom/algebra/extension/delete_spec.rb +11 -11
- data/spec/unit/axiom/algebra/extension/each_spec.rb +7 -7
- data/spec/unit/axiom/algebra/extension/eql_spec.rb +5 -5
- data/spec/unit/axiom/algebra/extension/extensions_spec.rb +3 -3
- data/spec/unit/axiom/algebra/extension/hash_spec.rb +3 -3
- data/spec/unit/axiom/algebra/extension/header_spec.rb +4 -4
- data/spec/unit/axiom/algebra/extension/insert_spec.rb +11 -11
- data/spec/unit/axiom/algebra/extension/methods/extend_spec.rb +6 -6
- data/spec/unit/axiom/algebra/extension/operand_spec.rb +4 -4
- data/spec/unit/axiom/algebra/intersection/delete_spec.rb +6 -6
- data/spec/unit/axiom/algebra/intersection/each_spec.rb +6 -6
- data/spec/unit/axiom/algebra/intersection/insert_spec.rb +5 -5
- data/spec/unit/axiom/algebra/intersection/methods/intersect_spec.rb +5 -5
- data/spec/unit/axiom/algebra/join/class_methods/new_spec.rb +5 -5
- data/spec/unit/axiom/algebra/join/delete_spec.rb +8 -8
- data/spec/unit/axiom/algebra/join/each_spec.rb +15 -15
- data/spec/unit/axiom/algebra/join/insert_spec.rb +8 -8
- data/spec/unit/axiom/algebra/join/join_header_spec.rb +4 -4
- data/spec/unit/axiom/algebra/join/methods/join_spec.rb +6 -6
- data/spec/unit/axiom/algebra/product/class_methods/new_spec.rb +6 -6
- data/spec/unit/axiom/algebra/product/delete_spec.rb +4 -4
- data/spec/unit/axiom/algebra/product/each_spec.rb +8 -8
- data/spec/unit/axiom/algebra/product/insert_spec.rb +4 -4
- data/spec/unit/axiom/algebra/product/methods/product_spec.rb +4 -4
- data/spec/unit/axiom/algebra/projection/delete_spec.rb +11 -11
- data/spec/unit/axiom/algebra/projection/each_spec.rb +7 -7
- data/spec/unit/axiom/algebra/projection/eql_spec.rb +5 -5
- data/spec/unit/axiom/algebra/projection/hash_spec.rb +4 -4
- data/spec/unit/axiom/algebra/projection/header_spec.rb +3 -3
- data/spec/unit/axiom/algebra/projection/insert_spec.rb +14 -14
- data/spec/unit/axiom/algebra/projection/methods/project_spec.rb +5 -5
- data/spec/unit/axiom/algebra/projection/methods/remove_spec.rb +5 -5
- data/spec/unit/axiom/algebra/rename/aliases/class_methods/coerce_spec.rb +2 -2
- data/spec/unit/axiom/algebra/rename/aliases/each_spec.rb +4 -4
- data/spec/unit/axiom/algebra/rename/aliases/element_reader_spec.rb +2 -2
- data/spec/unit/axiom/algebra/rename/aliases/to_hash_spec.rb +2 -2
- data/spec/unit/axiom/algebra/rename/aliases/union_spec.rb +1 -1
- data/spec/unit/axiom/algebra/rename/aliases_spec.rb +2 -2
- data/spec/unit/axiom/algebra/rename/delete_spec.rb +6 -6
- data/spec/unit/axiom/algebra/rename/directions_spec.rb +4 -4
- data/spec/unit/axiom/algebra/rename/each_spec.rb +6 -6
- data/spec/unit/axiom/algebra/rename/eql_spec.rb +5 -5
- data/spec/unit/axiom/algebra/rename/hash_spec.rb +3 -3
- data/spec/unit/axiom/algebra/rename/header_spec.rb +3 -3
- data/spec/unit/axiom/algebra/rename/insert_spec.rb +6 -6
- data/spec/unit/axiom/algebra/rename/methods/rename_spec.rb +4 -4
- data/spec/unit/axiom/algebra/restriction/delete_spec.rb +9 -9
- data/spec/unit/axiom/algebra/restriction/each_spec.rb +12 -12
- data/spec/unit/axiom/algebra/restriction/eql_spec.rb +4 -4
- data/spec/unit/axiom/algebra/restriction/hash_spec.rb +3 -3
- data/spec/unit/axiom/algebra/restriction/insert_spec.rb +9 -9
- data/spec/unit/axiom/algebra/restriction/methods/restrict_spec.rb +12 -15
- data/spec/unit/axiom/algebra/restriction/predicate_spec.rb +4 -4
- data/spec/unit/axiom/algebra/summarization/class_methods/new_spec.rb +6 -6
- data/spec/unit/axiom/algebra/summarization/delete_spec.rb +3 -3
- data/spec/unit/axiom/algebra/summarization/each_spec.rb +5 -5
- data/spec/unit/axiom/algebra/summarization/eql_spec.rb +3 -3
- data/spec/unit/axiom/algebra/summarization/hash_spec.rb +2 -2
- data/spec/unit/axiom/algebra/summarization/header_spec.rb +3 -3
- data/spec/unit/axiom/algebra/summarization/insert_spec.rb +3 -3
- data/spec/unit/axiom/algebra/summarization/methods/summarize_spec.rb +15 -15
- data/spec/unit/axiom/algebra/summarization/summaries/summarize_by_spec.rb +6 -6
- data/spec/unit/axiom/algebra/summarization/summaries/to_hash_spec.rb +2 -2
- data/spec/unit/axiom/algebra/summarization/summarize_per_spec.rb +3 -3
- data/spec/unit/axiom/algebra/summarization/summarizers_spec.rb +3 -3
- data/spec/unit/axiom/algebra/summarization/summary/call_spec.rb +4 -4
- data/spec/unit/axiom/algebra/summarization/summary/summarize_by_spec.rb +9 -6
- data/spec/unit/axiom/algebra/union/delete_spec.rb +6 -6
- data/spec/unit/axiom/algebra/union/each_spec.rb +9 -9
- data/spec/unit/axiom/algebra/union/insert_spec.rb +5 -5
- data/spec/unit/axiom/algebra/union/methods/union_spec.rb +5 -5
- data/spec/unit/axiom/aliasable/inheritable_alias_spec.rb +6 -6
- data/spec/unit/axiom/attribute/{date/class_methods/primitive_spec.rb → boolean/class_methods/type_spec.rb} +3 -3
- data/spec/unit/axiom/attribute/boolean/{valid_value_predicate_spec.rb → include_predicate_spec.rb} +2 -2
- data/spec/unit/axiom/attribute/call_spec.rb +8 -4
- data/spec/unit/axiom/attribute/{time/class_methods/primitive_spec.rb → class/class_methods/type_spec.rb} +3 -3
- data/spec/unit/axiom/attribute/class_methods/coerce_spec.rb +6 -6
- data/spec/unit/axiom/attribute/class_methods/infer_type_spec.rb +15 -15
- data/spec/unit/axiom/attribute/class_methods/name_from_spec.rb +4 -4
- data/spec/unit/axiom/attribute/class_methods/new_spec.rb +1 -1
- data/spec/unit/axiom/attribute/{float/class_methods/primitive_spec.rb → date/class_methods/type_spec.rb} +3 -3
- data/spec/unit/axiom/attribute/{class/class_methods/primitive_spec.rb → date_time/class_methods/type_spec.rb} +3 -3
- data/spec/unit/axiom/attribute/decimal/class_methods/type_spec.rb +13 -0
- data/spec/unit/axiom/attribute/eql_spec.rb +5 -1
- data/spec/unit/axiom/attribute/equality_operator_spec.rb +5 -1
- data/spec/unit/axiom/attribute/float/class_methods/type_spec.rb +13 -0
- data/spec/unit/axiom/attribute/hash_spec.rb +6 -2
- data/spec/unit/axiom/attribute/{valid_value_predicate_spec.rb → include_predicate_spec.rb} +4 -8
- data/spec/unit/axiom/attribute/integer/class_methods/type_spec.rb +13 -0
- data/spec/unit/axiom/attribute/name_spec.rb +5 -1
- data/spec/unit/axiom/attribute/numeric/class_methods/type_spec.rb +13 -0
- data/spec/unit/axiom/attribute/numeric/eql_spec.rb +2 -2
- data/spec/unit/axiom/attribute/numeric/equality_operator_spec.rb +2 -2
- data/spec/unit/axiom/attribute/numeric/hash_spec.rb +6 -6
- data/spec/unit/axiom/attribute/numeric/{valid_value_predicate_spec.rb → include_predicate_spec.rb} +3 -3
- data/spec/unit/axiom/attribute/object/class_methods/type_spec.rb +13 -0
- data/spec/unit/axiom/attribute/optional_predicate_spec.rb +31 -0
- data/spec/unit/axiom/attribute/rename_spec.rb +9 -5
- data/spec/unit/axiom/attribute/required_predicate_spec.rb +8 -4
- data/spec/unit/axiom/attribute/string/class_methods/type_spec.rb +13 -0
- data/spec/unit/axiom/attribute/string/eql_spec.rb +5 -5
- data/spec/unit/axiom/attribute/string/equality_operator_spec.rb +5 -5
- data/spec/unit/axiom/attribute/string/hash_spec.rb +9 -9
- data/spec/unit/axiom/attribute/string/{valid_value_predicate_spec.rb → include_predicate_spec.rb} +3 -3
- data/spec/unit/axiom/attribute/time/class_methods/type_spec.rb +13 -0
- data/spec/unit/axiom/attribute/type_spec.rb +4 -4
- data/spec/unit/axiom/equalizer/class_method/new_spec.rb +11 -11
- data/spec/unit/axiom/equalizer/methods/eql_spec.rb +1 -1
- data/spec/unit/axiom/evaluator/context/add_spec.rb +5 -5
- data/spec/unit/axiom/evaluator/context/element_reader_spec.rb +5 -5
- data/spec/unit/axiom/evaluator/context/functions_spec.rb +1 -1
- data/spec/unit/axiom/evaluator/context/method_missing_spec.rb +5 -5
- data/spec/unit/axiom/evaluator/context/respond_to_predicate_spec.rb +3 -3
- data/spec/unit/axiom/evaluator/context/send_spec.rb +9 -9
- data/spec/unit/axiom/evaluator/context/yield_spec.rb +3 -3
- data/spec/unit/axiom/function/binary/call_spec.rb +4 -4
- data/spec/unit/axiom/function/binary/equality_operator_spec.rb +6 -6
- data/spec/unit/axiom/function/binary/invertible/class_methods/included_spec.rb +5 -5
- data/spec/unit/axiom/function/binary/invertible/inverse_spec.rb +5 -5
- data/spec/unit/axiom/function/binary/rename_spec.rb +9 -9
- data/spec/unit/axiom/function/binary/type_spec.rb +53 -0
- data/spec/unit/axiom/function/class_methods/extract_value_spec.rb +5 -5
- data/spec/unit/axiom/function/class_methods/rename_attributes_spec.rb +3 -3
- data/spec/unit/axiom/function/class_methods/type_spec.rb +12 -0
- data/spec/unit/axiom/function/comparable/class_methods/included_spec.rb +5 -5
- data/spec/unit/axiom/function/connective/class_methods/type_spec.rb +11 -0
- data/spec/unit/axiom/function/connective/conjunction/methods/and_spec.rb +5 -5
- data/spec/unit/axiom/function/connective/disjunction/methods/or_spec.rb +5 -5
- data/spec/unit/axiom/function/connective/negation/class_methods/operation_spec.rb +1 -1
- data/spec/unit/axiom/function/connective/negation/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/connective/negation/methods/not_spec.rb +6 -6
- data/spec/unit/axiom/function/numeric/absolute/class_methods/operation_spec.rb +1 -1
- data/spec/unit/axiom/function/numeric/absolute/methods/absolute_spec.rb +2 -2
- data/spec/unit/axiom/function/numeric/addition/class_methods/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/numeric/addition/methods/add_spec.rb +4 -4
- data/spec/unit/axiom/function/numeric/class_methods/type_spec.rb +11 -0
- data/spec/unit/axiom/function/numeric/division/class_methods/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/numeric/division/class_methods/type_spec.rb +11 -0
- data/spec/unit/axiom/function/numeric/division/methods/divide_spec.rb +4 -4
- data/spec/unit/axiom/function/numeric/division/type_spec.rb +1 -1
- data/spec/unit/axiom/function/numeric/exponentiation/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/numeric/exponentiation/methods/exponent_spec.rb +4 -4
- data/spec/unit/axiom/function/numeric/modulo/methods/modulo_spec.rb +4 -4
- data/spec/unit/axiom/function/numeric/multiplication/class_methods/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/numeric/multiplication/methods/multiply_spec.rb +4 -4
- data/spec/unit/axiom/function/numeric/square_root/class_methods/type_spec.rb +11 -0
- data/spec/unit/axiom/function/numeric/square_root/methods/square_root_spec.rb +2 -2
- data/spec/unit/axiom/function/numeric/square_root/type_spec.rb +1 -1
- data/spec/unit/axiom/function/numeric/subtraction/class_methods/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/numeric/subtraction/methods/subtract_spec.rb +4 -4
- data/spec/unit/axiom/function/numeric/unary_minus/class_methods/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/numeric/unary_minus/class_methods/operation_spec.rb +1 -1
- data/spec/unit/axiom/function/numeric/unary_minus/methods/unary_minus_spec.rb +2 -2
- data/spec/unit/axiom/function/numeric/unary_plus/class_methods/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/numeric/unary_plus/class_methods/operation_spec.rb +1 -1
- data/spec/unit/axiom/function/numeric/unary_plus/methods/unary_plus_spec.rb +2 -2
- data/spec/unit/axiom/function/predicate/call_spec.rb +5 -5
- data/spec/unit/axiom/function/predicate/class_methods/type_spec.rb +11 -0
- data/spec/unit/axiom/function/predicate/enumerable/call_spec.rb +11 -11
- data/spec/unit/axiom/function/predicate/enumerable/class_methods/compare_method_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/equality/class_methods/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/equality/class_methods/reverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/equality/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/exclusion/class_methods/call_spec.rb +4 -4
- data/spec/unit/axiom/function/predicate/exclusion/class_methods/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/exclusion/inverse_spec.rb +3 -3
- data/spec/unit/axiom/function/predicate/exclusion/methods/exclude_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/greater_than/class_methods/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/greater_than/class_methods/reverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/greater_than/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/greater_than_or_equal_to/class_methods/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/greater_than_or_equal_to/class_methods/reverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/greater_than_or_equal_to/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/inclusion/class_methods/call_spec.rb +4 -4
- data/spec/unit/axiom/function/predicate/inclusion/class_methods/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/inclusion/inverse_spec.rb +3 -3
- data/spec/unit/axiom/function/predicate/inclusion/methods/include_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/inequality/class_methods/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/inequality/class_methods/reverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/inequality/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/less_than/class_methods/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/less_than/class_methods/reverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/less_than/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/less_than_or_equal_to/class_methods/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/less_than_or_equal_to/class_methods/reverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/less_than_or_equal_to/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/match/class_methods/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/match/inverse_spec.rb +2 -2
- data/spec/unit/axiom/function/predicate/no_match/class_methods/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/predicate/no_match/inverse_spec.rb +2 -2
- data/spec/unit/axiom/function/proposition/call_spec.rb +2 -2
- data/spec/unit/axiom/function/proposition/class_methods/new_spec.rb +4 -4
- data/spec/unit/axiom/function/proposition/class_methods/type_spec.rb +11 -0
- data/spec/unit/axiom/function/proposition/contradiction/and_spec.rb +2 -2
- data/spec/unit/axiom/function/proposition/contradiction/class_methods/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/proposition/contradiction/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/proposition/contradiction/or_spec.rb +2 -2
- data/spec/unit/axiom/function/proposition/inverse_spec.rb +6 -6
- data/spec/unit/axiom/function/proposition/rename_spec.rb +1 -1
- data/spec/unit/axiom/function/proposition/tautology/and_spec.rb +2 -2
- data/spec/unit/axiom/function/proposition/tautology/class_methods/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/proposition/tautology/inverse_spec.rb +1 -1
- data/spec/unit/axiom/function/proposition/tautology/or_spec.rb +2 -2
- data/spec/unit/axiom/function/rename_spec.rb +1 -1
- data/spec/unit/axiom/function/string/length/class_methods/type_spec.rb +11 -0
- data/spec/unit/axiom/function/string/length/methods/length_spec.rb +1 -1
- data/spec/unit/axiom/function/type_spec.rb +8 -1
- data/spec/unit/axiom/function/unary/call_spec.rb +7 -7
- data/spec/unit/axiom/function/unary/callable/call_spec.rb +4 -4
- data/spec/unit/axiom/function/unary/callable/included_spec.rb +1 -1
- data/spec/unit/axiom/function/unary/equality_operator_spec.rb +5 -5
- data/spec/unit/axiom/function/unary/hash_spec.rb +5 -5
- data/spec/unit/axiom/function/unary/invertible/class_methods/included_spec.rb +5 -5
- data/spec/unit/axiom/function/unary/invertible/inverse_spec.rb +2 -2
- data/spec/unit/axiom/function/unary/rename_spec.rb +7 -7
- data/spec/unit/axiom/function/unary/type_spec.rb +26 -0
- data/spec/unit/axiom/operation/binary/eql_spec.rb +4 -4
- data/spec/unit/axiom/operation/binary/hash_spec.rb +2 -2
- data/spec/unit/axiom/operation/binary/left_spec.rb +2 -2
- data/spec/unit/axiom/operation/binary/right_spec.rb +2 -2
- data/spec/unit/axiom/operation/unary/eql_spec.rb +2 -2
- data/spec/unit/axiom/operation/unary/hash_spec.rb +1 -1
- data/spec/unit/axiom/operation/unary/operand_spec.rb +2 -2
- data/spec/unit/axiom/relation/base/class_methods/new_spec.rb +20 -8
- data/spec/unit/axiom/relation/base/eql_spec.rb +12 -12
- data/spec/unit/axiom/relation/base/hash_spec.rb +4 -4
- data/spec/unit/axiom/relation/base/name_spec.rb +5 -34
- data/spec/unit/axiom/relation/class_methods/coerce_spec.rb +11 -5
- data/spec/unit/axiom/relation/class_methods/new_spec.rb +15 -7
- data/spec/unit/axiom/relation/directions_spec.rb +2 -2
- data/spec/unit/axiom/relation/each_spec.rb +10 -10
- data/spec/unit/axiom/relation/element_reader_spec.rb +4 -4
- data/spec/unit/axiom/relation/empty/class_methods/new_spec.rb +6 -20
- data/spec/unit/axiom/relation/empty/each_spec.rb +7 -22
- data/spec/unit/axiom/relation/empty/empty_predicate_spec.rb +1 -1
- data/spec/unit/axiom/relation/empty/header_spec.rb +3 -3
- data/spec/unit/axiom/relation/empty/size_spec.rb +1 -1
- data/spec/unit/axiom/relation/empty_predicate_spec.rb +2 -2
- data/spec/unit/axiom/relation/eql_spec.rb +10 -10
- data/spec/unit/axiom/relation/equality_operator_spec.rb +24 -14
- data/spec/unit/axiom/relation/hash_spec.rb +3 -3
- data/spec/unit/axiom/relation/header/call_spec.rb +5 -5
- data/spec/unit/axiom/relation/header/class_methods/coerce_spec.rb +13 -13
- data/spec/unit/axiom/relation/header/class_methods/new_spec.rb +4 -4
- data/spec/unit/axiom/relation/header/context_spec.rb +27 -0
- data/spec/unit/axiom/relation/header/difference_spec.rb +19 -19
- data/spec/unit/axiom/relation/header/each_spec.rb +6 -6
- data/spec/unit/axiom/relation/header/empty_predicate_spec.rb +1 -1
- data/spec/unit/axiom/relation/header/eql_spec.rb +6 -6
- data/spec/unit/axiom/relation/header/equality_operator_spec.rb +8 -8
- data/spec/unit/axiom/relation/header/extend_spec.rb +9 -9
- data/spec/unit/axiom/relation/header/hash_spec.rb +3 -3
- data/spec/unit/axiom/relation/header/intersect_spec.rb +19 -19
- data/spec/unit/axiom/relation/header/keys_spec.rb +5 -5
- data/spec/unit/axiom/relation/header/project_spec.rb +11 -11
- data/spec/unit/axiom/relation/header/rename_spec.rb +6 -6
- data/spec/unit/axiom/relation/header/to_ary_spec.rb +3 -3
- data/spec/unit/axiom/relation/header/union_spec.rb +20 -20
- data/spec/unit/axiom/relation/header_spec.rb +2 -2
- data/spec/unit/axiom/relation/include_predicate_spec.rb +4 -4
- data/spec/unit/axiom/relation/keys/class_methods/coerce_spec.rb +4 -4
- data/spec/unit/axiom/relation/keys/class_methods/new_spec.rb +5 -5
- data/spec/unit/axiom/relation/keys/difference_spec.rb +7 -7
- data/spec/unit/axiom/relation/keys/each_spec.rb +6 -6
- data/spec/unit/axiom/relation/keys/empty_predicate_spec.rb +1 -1
- data/spec/unit/axiom/relation/keys/extend_spec.rb +7 -7
- data/spec/unit/axiom/relation/keys/intersect_spec.rb +6 -6
- data/spec/unit/axiom/relation/keys/project_spec.rb +8 -8
- data/spec/unit/axiom/relation/keys/rename_spec.rb +5 -5
- data/spec/unit/axiom/relation/keys/to_ary_spec.rb +3 -3
- data/spec/unit/axiom/relation/keys/union_spec.rb +8 -8
- data/spec/unit/axiom/relation/materialize_spec.rb +3 -3
- data/spec/unit/axiom/relation/materialized/class_methods/new_spec.rb +19 -7
- data/spec/unit/axiom/relation/materialized/directions_spec.rb +4 -4
- data/spec/unit/axiom/relation/materialized/empty_predicate_spec.rb +2 -2
- data/spec/unit/axiom/relation/materialized/materialize_spec.rb +2 -2
- data/spec/unit/axiom/relation/materialized/materialized_predicate_spec.rb +1 -1
- data/spec/unit/axiom/relation/materialized/size_spec.rb +1 -1
- data/spec/unit/axiom/relation/materialized_predicate_spec.rb +1 -1
- data/spec/unit/axiom/relation/operation/binary/class_methods/included_spec.rb +5 -5
- data/spec/unit/axiom/relation/operation/binary/class_methods/new_spec.rb +3 -3
- data/spec/unit/axiom/relation/operation/binary/header_spec.rb +5 -5
- data/spec/unit/axiom/relation/operation/combination/class_methods/combine_tuples_spec.rb +18 -11
- data/spec/unit/axiom/relation/operation/combination/header_spec.rb +5 -5
- data/spec/unit/axiom/relation/operation/deletion/initialize_spec.rb +2 -2
- data/spec/unit/axiom/relation/operation/deletion/methods/delete_spec.rb +5 -5
- data/spec/unit/axiom/relation/operation/insertion/initialize_spec.rb +2 -2
- data/spec/unit/axiom/relation/operation/insertion/methods/insert_spec.rb +5 -5
- data/spec/unit/axiom/relation/operation/limit/class_methods/new_spec.rb +2 -2
- data/spec/unit/axiom/relation/operation/limit/delete_spec.rb +4 -4
- data/spec/unit/axiom/relation/operation/limit/directions_spec.rb +4 -4
- data/spec/unit/axiom/relation/operation/limit/each_spec.rb +7 -7
- data/spec/unit/axiom/relation/operation/limit/eql_spec.rb +6 -6
- data/spec/unit/axiom/relation/operation/limit/hash_spec.rb +4 -4
- data/spec/unit/axiom/relation/operation/limit/insert_spec.rb +4 -4
- data/spec/unit/axiom/relation/operation/limit/limit_spec.rb +4 -4
- data/spec/unit/axiom/relation/operation/limit/methods/first_spec.rb +6 -6
- data/spec/unit/axiom/relation/operation/limit/methods/last_spec.rb +6 -6
- data/spec/unit/axiom/relation/operation/limit/methods/one_spec.rb +63 -0
- data/spec/unit/axiom/relation/operation/limit/methods/take_spec.rb +4 -4
- data/spec/unit/axiom/relation/operation/offset/class_methods/new_spec.rb +2 -2
- data/spec/unit/axiom/relation/operation/offset/delete_spec.rb +4 -4
- data/spec/unit/axiom/relation/operation/offset/directions_spec.rb +4 -4
- data/spec/unit/axiom/relation/operation/offset/each_spec.rb +7 -7
- data/spec/unit/axiom/relation/operation/offset/eql_spec.rb +6 -6
- data/spec/unit/axiom/relation/operation/offset/hash_spec.rb +4 -4
- data/spec/unit/axiom/relation/operation/offset/insert_spec.rb +4 -4
- data/spec/unit/axiom/relation/operation/offset/methods/drop_spec.rb +4 -4
- data/spec/unit/axiom/relation/operation/offset/offset_spec.rb +4 -4
- data/spec/unit/axiom/relation/operation/order/ascending/class_methods/reverse_spec.rb +1 -1
- data/spec/unit/axiom/relation/operation/order/ascending/reverse_spec.rb +1 -1
- data/spec/unit/axiom/relation/operation/order/class_methods/new_spec.rb +117 -15
- data/spec/unit/axiom/relation/operation/order/delete_spec.rb +11 -11
- data/spec/unit/axiom/relation/operation/order/descending/class_methods/reverse_spec.rb +1 -1
- data/spec/unit/axiom/relation/operation/order/descending/reverse_spec.rb +1 -1
- data/spec/unit/axiom/relation/operation/order/direction/attribute_spec.rb +1 -1
- data/spec/unit/axiom/relation/operation/order/direction/call_spec.rb +5 -5
- data/spec/unit/axiom/relation/operation/order/direction/class_methods/coerce_spec.rb +3 -3
- data/spec/unit/axiom/relation/operation/order/direction/eql_predicate_spec.rb +1 -1
- data/spec/unit/axiom/relation/operation/order/direction/name_spec.rb +1 -1
- data/spec/unit/axiom/relation/operation/order/direction/rename_spec.rb +6 -6
- data/spec/unit/axiom/relation/operation/order/direction/reverse_spec.rb +4 -4
- data/spec/unit/axiom/relation/operation/order/direction_set/attributes_spec.rb +3 -3
- data/spec/unit/axiom/relation/operation/order/direction_set/class_methods/coerce_spec.rb +11 -11
- data/spec/unit/axiom/relation/operation/order/direction_set/class_methods/new_spec.rb +2 -2
- data/spec/unit/axiom/relation/operation/order/direction_set/eql_spec.rb +2 -2
- data/spec/unit/axiom/relation/operation/order/direction_set/equality_operator_spec.rb +7 -7
- data/spec/unit/axiom/relation/operation/order/direction_set/hash_spec.rb +1 -1
- data/spec/unit/axiom/relation/operation/order/direction_set/project_spec.rb +5 -5
- data/spec/unit/axiom/relation/operation/order/direction_set/rename_spec.rb +6 -6
- data/spec/unit/axiom/relation/operation/order/direction_set/reverse_spec.rb +5 -5
- data/spec/unit/axiom/relation/operation/order/direction_set/sort_tuples_spec.rb +12 -12
- data/spec/unit/axiom/relation/operation/order/direction_set/to_ary_spec.rb +3 -3
- data/spec/unit/axiom/relation/operation/order/directions_spec.rb +4 -4
- data/spec/unit/axiom/relation/operation/order/each_spec.rb +7 -7
- data/spec/unit/axiom/relation/operation/order/eql_spec.rb +5 -5
- data/spec/unit/axiom/relation/operation/order/hash_spec.rb +1 -1
- data/spec/unit/axiom/relation/operation/order/header_spec.rb +4 -4
- data/spec/unit/axiom/relation/operation/order/insert_spec.rb +11 -11
- data/spec/unit/axiom/relation/operation/order/methods/sort_by_spec.rb +127 -20
- data/spec/unit/axiom/relation/operation/order/methods/sort_spec.rb +19 -0
- data/spec/unit/axiom/relation/operation/reverse/class_methods/new_spec.rb +2 -2
- data/spec/unit/axiom/relation/operation/reverse/directions_spec.rb +4 -4
- data/spec/unit/axiom/relation/operation/reverse/each_spec.rb +7 -7
- data/spec/unit/axiom/relation/operation/reverse/methods/reverse_spec.rb +3 -3
- data/spec/unit/axiom/relation/operation/set/class_methods/included_spec.rb +5 -5
- data/spec/unit/axiom/relation/operation/set/class_methods/new_spec.rb +6 -6
- data/spec/unit/axiom/relation/operation/set/header_spec.rb +5 -5
- data/spec/unit/axiom/relation/operation/unary/header_spec.rb +5 -5
- data/spec/unit/axiom/relation/proxy/each_spec.rb +8 -8
- data/spec/unit/axiom/relation/proxy/hash_spec.rb +4 -4
- data/spec/unit/axiom/relation/proxy/method_missing_spec.rb +4 -4
- data/spec/unit/axiom/relation/proxy/respond_to_predicate_spec.rb +4 -4
- data/spec/unit/axiom/relation/replace_spec.rb +6 -6
- data/spec/unit/axiom/relation/variable/class_methods/new_spec.rb +35 -0
- data/spec/unit/axiom/relation/variable/delete_spec.rb +18 -0
- data/spec/unit/axiom/relation/variable/insert_spec.rb +18 -0
- data/spec/unit/axiom/relation/variable/materialized/delete_spec.rb +18 -0
- data/spec/unit/axiom/relation/variable/materialized/insert_spec.rb +18 -0
- data/spec/unit/axiom/relation/variable/materialized/replace_spec.rb +18 -0
- data/spec/unit/axiom/relation/variable/replace_spec.rb +18 -0
- data/spec/unit/axiom/tuple/call_spec.rb +3 -4
- data/spec/unit/axiom/tuple/class_methods/coerce_spec.rb +6 -6
- data/spec/unit/axiom/tuple/data_spec.rb +2 -2
- data/spec/unit/axiom/tuple/eql_spec.rb +5 -5
- data/spec/unit/axiom/tuple/equality_operator_spec.rb +6 -6
- data/spec/unit/axiom/tuple/extend_spec.rb +12 -12
- data/spec/unit/axiom/tuple/hash_spec.rb +3 -3
- data/spec/unit/axiom/tuple/header_spec.rb +3 -3
- data/spec/unit/axiom/tuple/join_spec.rb +6 -6
- data/spec/unit/axiom/tuple/predicate_spec.rb +5 -5
- data/spec/unit/axiom/tuple/project_spec.rb +5 -5
- data/spec/unit/axiom/tuple/to_ary_spec.rb +3 -3
- data/spec/unit/axiom/visitable/accept_spec.rb +1 -1
- data/spec/unit/range/to_inclusive_spec.rb +1 -1
- data/spec/unit/time/pred_spec.rb +1 -1
- metadata +92 -614
- checksums.yaml +0 -7
- data/.rvmrc +0 -1
- data/lib/axiom/function/numeric/binary.rb +0 -26
- data/lib/axiom/function/numeric/unary.rb +0 -26
- data/spec/support/ice_nine_config.rb +0 -6
- data/spec/unit/axiom/aggregate/count/type_spec.rb +0 -12
- data/spec/unit/axiom/aggregate/mean/type_spec.rb +0 -12
- data/spec/unit/axiom/aggregate/standard_deviation/type_spec.rb +0 -12
- data/spec/unit/axiom/aggregate/type_spec.rb +0 -13
- data/spec/unit/axiom/aggregate/variance/type_spec.rb +0 -12
- data/spec/unit/axiom/attribute/boolean/class_methods/primitive_spec.rb +0 -13
- data/spec/unit/axiom/attribute/date/range_spec.rb +0 -11
- data/spec/unit/axiom/attribute/date_time/class_methods/primitive_spec.rb +0 -13
- data/spec/unit/axiom/attribute/date_time/range_spec.rb +0 -11
- data/spec/unit/axiom/attribute/decimal/class_methods/primitive_spec.rb +0 -13
- data/spec/unit/axiom/attribute/float/size_spec.rb +0 -21
- data/spec/unit/axiom/attribute/integer/class_methods/primitive_spec.rb +0 -13
- data/spec/unit/axiom/attribute/numeric/class_methods/primitive_spec.rb +0 -13
- data/spec/unit/axiom/attribute/numeric/size_spec.rb +0 -33
- data/spec/unit/axiom/attribute/object/class_methods/primitive_spec.rb +0 -13
- data/spec/unit/axiom/attribute/string/class_methods/primitive_spec.rb +0 -13
- data/spec/unit/axiom/attribute/string/max_length_spec.rb +0 -20
- data/spec/unit/axiom/attribute/string/min_length_spec.rb +0 -20
- data/spec/unit/axiom/attribute/time/range_spec.rb +0 -11
- data/spec/unit/axiom/attribute/valid_primitive_predicate_spec.rb +0 -30
- data/spec/unit/axiom/function/connective/type_spec.rb +0 -12
- data/spec/unit/axiom/function/numeric/binary/type_spec.rb +0 -33
- data/spec/unit/axiom/function/numeric/unary/type_spec.rb +0 -21
- data/spec/unit/axiom/function/predicate/type_spec.rb +0 -14
- data/spec/unit/axiom/function/proposition/type_spec.rb +0 -12
- data/spec/unit/axiom/function/string/length/type_spec.rb +0 -11
- data/spec/unit/axiom/relation/one_spec.rb +0 -36
@@ -157,9 +157,9 @@ module Axiom
|
|
157
157
|
# @return [Extension]
|
158
158
|
#
|
159
159
|
# @api private
|
160
|
-
def coerce_to_extensions(extensions = Undefined)
|
160
|
+
def coerce_to_extensions(extensions = Undefined, &block)
|
161
161
|
if extensions.equal?(Undefined)
|
162
|
-
|
162
|
+
header.context(&block).functions
|
163
163
|
else
|
164
164
|
extensions
|
165
165
|
end
|
@@ -39,7 +39,7 @@ module Axiom
|
|
39
39
|
# @api public
|
40
40
|
def each
|
41
41
|
return to_enum unless block_given?
|
42
|
-
seen =
|
42
|
+
seen = {}
|
43
43
|
operand.each do |tuple|
|
44
44
|
tuple = tuple.project(header)
|
45
45
|
yield seen[tuple] = tuple unless seen.key?(tuple)
|
@@ -158,7 +158,7 @@ module Axiom
|
|
158
158
|
# Return a relation with only the attributes specified
|
159
159
|
#
|
160
160
|
# @example
|
161
|
-
# projection = relation.project([
|
161
|
+
# projection = relation.project([:a, :b, :c])
|
162
162
|
#
|
163
163
|
# @param [#to_ary] attributes
|
164
164
|
# the attributes to keep in the header
|
@@ -173,7 +173,7 @@ module Axiom
|
|
173
173
|
# Return a relation with attributes not specified
|
174
174
|
#
|
175
175
|
# @example
|
176
|
-
# projection = relation.remove([
|
176
|
+
# projection = relation.remove([:a, b, c])
|
177
177
|
#
|
178
178
|
# @param [#to_ary] attributes
|
179
179
|
# the attributes to remove from the header
|
@@ -87,12 +87,12 @@ module Axiom
|
|
87
87
|
other_aliases = other.to_hash.dup
|
88
88
|
inverted = other_aliases.invert
|
89
89
|
|
90
|
+
# Remove aliases that cancel out, and preserve different aliases
|
90
91
|
each do |old_attribute, new_attribute|
|
91
92
|
old_attribute = inverted.fetch(old_attribute, old_attribute)
|
93
|
+
other_aliases.delete(old_attribute)
|
92
94
|
|
93
|
-
|
94
|
-
other_aliases.delete(new_attribute)
|
95
|
-
else
|
95
|
+
unless old_attribute.eql?(new_attribute)
|
96
96
|
other_aliases[old_attribute] = new_attribute
|
97
97
|
end
|
98
98
|
end
|
@@ -143,8 +143,8 @@ module Axiom
|
|
143
143
|
#
|
144
144
|
# @api public
|
145
145
|
def inverse
|
146
|
-
self.class.new(@aliases.invert)
|
147
|
-
memoize(:inverse, self)
|
146
|
+
self.class.new(@aliases.invert)
|
147
|
+
.memoize(:inverse, self)
|
148
148
|
end
|
149
149
|
|
150
150
|
# Compare the aliases with other aliases for equivalency
|
@@ -208,7 +208,7 @@ module Axiom
|
|
208
208
|
def self.coerce_alias_pair(attributes, old_attr, new_attr)
|
209
209
|
old_attr = attributes[old_attr]
|
210
210
|
new_attr = old_attr.rename(new_attr) if new_attr.kind_of?(Symbol)
|
211
|
-
[
|
211
|
+
[old_attr, new_attr]
|
212
212
|
end
|
213
213
|
|
214
214
|
private_class_method :coerce_alias_pair
|
@@ -104,7 +104,7 @@ module Axiom
|
|
104
104
|
# restriction = relation.restrict(id: 1)
|
105
105
|
#
|
106
106
|
# @example restriction using an Array
|
107
|
-
# restriction = relation.restrict([
|
107
|
+
# restriction = relation.restrict([[:id, 1]])
|
108
108
|
#
|
109
109
|
# @param [Array] args
|
110
110
|
# optional arguments
|
@@ -162,17 +162,17 @@ module Axiom
|
|
162
162
|
# end
|
163
163
|
#
|
164
164
|
# @example with a relation
|
165
|
-
# summarization = relation.summarize(relation.project([
|
165
|
+
# summarization = relation.summarize(relation.project([:name])) do |context|
|
166
166
|
# context.add(:count, context[:id].count)
|
167
167
|
# end
|
168
168
|
#
|
169
169
|
# @example with a header
|
170
|
-
# summarization = relation.summarize([
|
170
|
+
# summarization = relation.summarize([:name]) do |context|
|
171
171
|
# context.add(:count, context[:id].count)
|
172
172
|
# end
|
173
173
|
#
|
174
174
|
# @example with summarizers
|
175
|
-
# summarization = relation.summarize([
|
175
|
+
# summarization = relation.summarize([:name], summarizers)
|
176
176
|
#
|
177
177
|
# @param [Relation, Header, #to_ary] summarize_with
|
178
178
|
#
|
@@ -225,11 +225,9 @@ module Axiom
|
|
225
225
|
# @return [#to_hash]
|
226
226
|
#
|
227
227
|
# @api private
|
228
|
-
def coerce_to_summarizers(summarize_per, summarizers = Undefined)
|
228
|
+
def coerce_to_summarizers(summarize_per, summarizers = Undefined, &block)
|
229
229
|
if summarizers.equal?(Undefined)
|
230
|
-
|
231
|
-
yield context
|
232
|
-
}.functions
|
230
|
+
(header - summarize_per.header).context(&block).functions
|
233
231
|
else
|
234
232
|
summarizers
|
235
233
|
end
|
data/lib/axiom/algebra/union.rb
CHANGED
data/lib/axiom/attribute.rb
CHANGED
@@ -6,7 +6,9 @@ module Axiom
|
|
6
6
|
class Attribute
|
7
7
|
extend Aliasable, DescendantsTracker
|
8
8
|
include AbstractType, ::Comparable, Visitable
|
9
|
-
include Equalizer.new(:name, :required?)
|
9
|
+
include Equalizer.new(:name, :type, :required?)
|
10
|
+
|
11
|
+
abstract_singleton_method :type
|
10
12
|
|
11
13
|
# The attribute name
|
12
14
|
#
|
@@ -15,13 +17,12 @@ module Axiom
|
|
15
17
|
# @api private
|
16
18
|
attr_reader :name
|
17
19
|
|
18
|
-
# The attribute
|
20
|
+
# The attribute type
|
19
21
|
#
|
20
|
-
# @return [
|
22
|
+
# @return [Class<Types::Object>]
|
21
23
|
#
|
22
24
|
# @api private
|
23
|
-
attr_reader :
|
24
|
-
private :options
|
25
|
+
attr_reader :type
|
25
26
|
|
26
27
|
# Coerce an object into an Attribute
|
27
28
|
#
|
@@ -66,12 +67,10 @@ module Axiom
|
|
66
67
|
#
|
67
68
|
# @api private
|
68
69
|
def self.infer_type(operand)
|
69
|
-
|
70
|
-
|
71
|
-
when FalseClass then Boolean
|
70
|
+
if operand.respond_to?(:type)
|
71
|
+
operand.type
|
72
72
|
else
|
73
|
-
type
|
74
|
-
descendants.detect { |descendant| type <= descendant.primitive }
|
73
|
+
Types::Type.descendants.detect { |type| type.include?(operand) }
|
75
74
|
end
|
76
75
|
end
|
77
76
|
|
@@ -89,8 +88,8 @@ module Axiom
|
|
89
88
|
# @api private
|
90
89
|
def initialize(name, options = EMPTY_HASH)
|
91
90
|
@name = name.to_sym
|
92
|
-
@
|
93
|
-
@
|
91
|
+
@required = options.fetch(:required, true)
|
92
|
+
@type = self.class.type
|
94
93
|
end
|
95
94
|
|
96
95
|
# Extract the value corresponding to this attribute from a tuple
|
@@ -122,16 +121,11 @@ module Axiom
|
|
122
121
|
#
|
123
122
|
# @api public
|
124
123
|
def rename(new_name)
|
125
|
-
name.equal?(new_name)
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
# @return [Class<Attribute>]
|
131
|
-
#
|
132
|
-
# @api public
|
133
|
-
def type
|
134
|
-
self.class
|
124
|
+
if name.equal?(new_name)
|
125
|
+
self
|
126
|
+
else
|
127
|
+
self.class.new(new_name, required: required?)
|
128
|
+
end
|
135
129
|
end
|
136
130
|
|
137
131
|
# Test if the attribute is required
|
@@ -146,25 +140,22 @@ module Axiom
|
|
146
140
|
@required
|
147
141
|
end
|
148
142
|
|
149
|
-
# Test if
|
143
|
+
# Test if the attribute is optional
|
150
144
|
#
|
151
145
|
# @example
|
152
|
-
# attribute.
|
153
|
-
#
|
154
|
-
# @param [Object] value
|
155
|
-
# the value to test
|
146
|
+
# attribute.optional? # => true or false
|
156
147
|
#
|
157
148
|
# @return [Boolean]
|
158
149
|
#
|
159
150
|
# @api public
|
160
|
-
def
|
161
|
-
|
151
|
+
def optional?
|
152
|
+
! required?
|
162
153
|
end
|
163
154
|
|
164
155
|
# Test if the value matches the attribute constraints
|
165
156
|
#
|
166
157
|
# @example
|
167
|
-
# attribute.
|
158
|
+
# attribute.include?(value) # => true or false
|
168
159
|
#
|
169
160
|
# @param [Object] value
|
170
161
|
# the value to test
|
@@ -172,8 +163,8 @@ module Axiom
|
|
172
163
|
# @return [Boolean]
|
173
164
|
#
|
174
165
|
# @api public
|
175
|
-
def
|
176
|
-
valid_or_optional?(value
|
166
|
+
def include?(value)
|
167
|
+
valid_or_optional?(value, &type.method(:include?))
|
177
168
|
end
|
178
169
|
|
179
170
|
private
|
@@ -189,7 +180,7 @@ module Axiom
|
|
189
180
|
#
|
190
181
|
# @api private
|
191
182
|
def valid_or_optional?(value)
|
192
|
-
value.nil? ?
|
183
|
+
value.nil? ? optional? : yield(value)
|
193
184
|
end
|
194
185
|
|
195
186
|
# Coerce the object into an Attribute
|
@@ -9,33 +9,23 @@ module Axiom
|
|
9
9
|
Function::Connective::Disjunction::Methods,
|
10
10
|
Function::Connective::Negation::Methods
|
11
11
|
|
12
|
-
# The
|
12
|
+
# The attribute type
|
13
13
|
#
|
14
14
|
# @example
|
15
|
-
# Boolean.
|
15
|
+
# type = Axiom::Attribute::Boolean.type # => Axiom::Types::Boolean
|
16
16
|
#
|
17
|
-
# @return [Class<
|
17
|
+
# @return [Class<Types::Boolean>]
|
18
18
|
#
|
19
19
|
# @api public
|
20
|
-
def self.
|
21
|
-
|
22
|
-
end
|
23
|
-
|
24
|
-
# Test if the value is a boolean
|
25
|
-
#
|
26
|
-
# @example
|
27
|
-
# boolean.valid_value?(value) # => true or false
|
28
|
-
#
|
29
|
-
# @param [Object] value
|
30
|
-
# the value to test
|
31
|
-
#
|
32
|
-
# @return [Boolean]
|
33
|
-
#
|
34
|
-
# @api public
|
35
|
-
def valid_value?(value)
|
36
|
-
valid_or_optional?(value) { super || value.kind_of?(FalseClass) }
|
20
|
+
def self.type
|
21
|
+
Types::Boolean
|
37
22
|
end
|
38
23
|
|
39
24
|
end # class Boolean
|
25
|
+
|
26
|
+
# Add aliases for Boolean
|
27
|
+
TrueClass = Boolean
|
28
|
+
FalseClass = Boolean
|
29
|
+
|
40
30
|
end # class Attribute
|
41
31
|
end # module Axiom
|
@@ -6,16 +6,16 @@ module Axiom
|
|
6
6
|
# Represents a Class value in a relation tuple
|
7
7
|
class Class < Object
|
8
8
|
|
9
|
-
# The
|
9
|
+
# The attribute type
|
10
10
|
#
|
11
11
|
# @example
|
12
|
-
# Class.
|
12
|
+
# type = Axiom::Attribute::Class.type # => Axiom::Types::Class
|
13
13
|
#
|
14
|
-
# @return [Class
|
14
|
+
# @return [Class<Types::Class>]
|
15
15
|
#
|
16
16
|
# @api public
|
17
|
-
def self.
|
18
|
-
::Class
|
17
|
+
def self.type
|
18
|
+
Types::Class
|
19
19
|
end
|
20
20
|
|
21
21
|
end # class Class
|
data/lib/axiom/attribute/date.rb
CHANGED
@@ -7,30 +7,16 @@ module Axiom
|
|
7
7
|
class Date < Object
|
8
8
|
include Comparable
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
# The Date primitive
|
13
|
-
#
|
14
|
-
# @example
|
15
|
-
# Date.primitive # => ::Date
|
16
|
-
#
|
17
|
-
# @return [Class<::Date>]
|
18
|
-
#
|
19
|
-
# @api public
|
20
|
-
def self.primitive
|
21
|
-
::Date
|
22
|
-
end
|
23
|
-
|
24
|
-
# The Date range for a valid value
|
10
|
+
# The attribute type
|
25
11
|
#
|
26
12
|
# @example
|
27
|
-
# Date.
|
13
|
+
# type = Axiom::Attribute::Date.type # => Axiom::Types::Date
|
28
14
|
#
|
29
|
-
# @return [
|
15
|
+
# @return [Class<Types::Date>]
|
30
16
|
#
|
31
17
|
# @api public
|
32
|
-
def
|
33
|
-
|
18
|
+
def self.type
|
19
|
+
Types::Date
|
34
20
|
end
|
35
21
|
|
36
22
|
end # class Date
|
@@ -7,30 +7,16 @@ module Axiom
|
|
7
7
|
class DateTime < Object
|
8
8
|
include Comparable
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
# The DateTime primitive
|
13
|
-
#
|
14
|
-
# @example
|
15
|
-
# DateTime.primitive # => ::DateTime
|
16
|
-
#
|
17
|
-
# @return [Class<::DateTime>]
|
18
|
-
#
|
19
|
-
# @api public
|
20
|
-
def self.primitive
|
21
|
-
::DateTime
|
22
|
-
end
|
23
|
-
|
24
|
-
# The DateTime range for a valid value
|
10
|
+
# The attribute type
|
25
11
|
#
|
26
12
|
# @example
|
27
|
-
# DateTime.
|
13
|
+
# type = Axiom::Attribute::DateTime.type # => Axiom::Types::DateTime
|
28
14
|
#
|
29
|
-
# @return [
|
15
|
+
# @return [Class<Types::DateTime>]
|
30
16
|
#
|
31
17
|
# @api public
|
32
|
-
def
|
33
|
-
|
18
|
+
def self.type
|
19
|
+
Types::DateTime
|
34
20
|
end
|
35
21
|
|
36
22
|
end # class DateTime
|
@@ -6,16 +6,16 @@ module Axiom
|
|
6
6
|
# Represents a Decimal value in a relation tuple
|
7
7
|
class Decimal < Numeric
|
8
8
|
|
9
|
-
# The
|
9
|
+
# The attribute type
|
10
10
|
#
|
11
11
|
# @example
|
12
|
-
# Decimal.
|
12
|
+
# type = Axiom::Attribute::Decimal.type # => Axiom::Types::Decimal
|
13
13
|
#
|
14
|
-
# @return [Class<
|
14
|
+
# @return [Class<Types::Decimal>]
|
15
15
|
#
|
16
16
|
# @api public
|
17
|
-
def self.
|
18
|
-
|
17
|
+
def self.type
|
18
|
+
Types::Decimal
|
19
19
|
end
|
20
20
|
|
21
21
|
end # class Decimal
|
@@ -6,18 +6,16 @@ module Axiom
|
|
6
6
|
# Represents a Float value in a relation tuple
|
7
7
|
class Float < Numeric
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
# The Float primitive
|
9
|
+
# The attribute type
|
12
10
|
#
|
13
11
|
# @example
|
14
|
-
# Float.
|
12
|
+
# type = Axiom::Attribute::Float.type # => Axiom::Types::Float
|
15
13
|
#
|
16
|
-
# @return [Class
|
14
|
+
# @return [Class<Types::Float>]
|
17
15
|
#
|
18
16
|
# @api public
|
19
|
-
def self.
|
20
|
-
::Float
|
17
|
+
def self.type
|
18
|
+
Types::Float
|
21
19
|
end
|
22
20
|
|
23
21
|
end # class Float
|