Sha256: 77a70cd4f317926b6afee572efe6043f471460989a566eca0806cccc49cbde08
Contents?: true
Size: 920 Bytes
Versions: 3
Compression:
Stored size: 920 Bytes
Contents
# frozen_string_literal: true require 'sums_up/core/functions' require 'sums_up/core/matcher' require 'sums_up/core/parser' require 'sums_up/core/strings' require 'sums_up/core/sum_type' require 'sums_up/core/variant' module SumsUp # Core functionality which builds modules for sum types and classes for # variants. module Core module_function def define(*no_arg_variants, **arg_variants, &block) variant_specs = Parser.parse_variant_specs!(no_arg_variants, arg_variants) variant_names = variant_specs.keys variant_classes = variant_specs.map do |name, members| others = variant_names - [name] matcher_class = Matcher.build_matcher_class(name, others) Variant.build_variant_class(name, others, members, matcher_class) end SumType .build(variant_classes) .tap { |sum_type| sum_type.module_eval(&block) if block } end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
sums_up-1.2.0 | lib/sums_up/core.rb |
sums_up-1.1.0 | lib/sums_up/core.rb |
sums_up-1.0.0 | lib/sums_up/core.rb |