module SumsUp::Core

Core functionality which builds modules for sum types and classes for variants.

Public Instance Methods

define(*no_arg_variants, **arg_variants, &block) click to toggle source
# File lib/sums_up/core.rb, line 16
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