Sha256: 33b37ca4ab50b4f082763695429b4356003516e4218f1ac5403f15a9921bb639
Contents?: true
Size: 1.79 KB
Versions: 1
Compression:
Stored size: 1.79 KB
Contents
# frozen_string_literal: true module SumsUp module Core # Validates and normalizes arguments passed to SumsUp.define. module Parser LOWER_SNAKE_CASE_REGEXP = /\A[[:lower:]]+(_[[:lower:]]+)*\z/.freeze module_function def parse_variant_specs!(no_arg_variants, arg_variants) variant_names = no_arg_variants + arg_variants.keys validate_unique!(variant_names) variant_names.each(&method(:validate_name_format!)) arg_variants.each_value(&method(:validate_variant_args!)) no_arg_variants .map { |variant| [variant, []] } .to_h .merge(arg_variants.transform_values { |ary| [*ary] }) end def validate_unique!(variant_names) duplicates = variant_names .group_by(&:itself) .select { |_, values| values.length > 1 } .keys return if duplicates.empty? raise( DuplicateNameError, "Duplicated names: #{duplicates.join(', ')}" ) end def validate_name_format!(variant_name) unless variant_name.is_a?(Symbol) raise(VariantNameError, "Expected a Symbol, got: #{variant_name}") end return if LOWER_SNAKE_CASE_REGEXP.match?(variant_name.to_s) raise( VariantNameError, "Name is not lower_snake_case: #{variant_name}" ) end def validate_variant_args!(variant_args) case variant_args when Symbol validate_name_format!(variant_args) when Array variant_args.each(&method(:validate_name_format!)) validate_unique!(variant_args) else raise( VariantArgsError, "Expected a Symbol or Array, got: #{variant_args}" ) end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
sums_up-1.0.0 | lib/sums_up/core/parser.rb |