module SumsUp::Core::Parser
Validates and normalizes arguments passed to SumsUp.define.
Constants
- LOWER_SNAKE_CASE_REGEXP
Public Instance Methods
parse_variant_specs!(no_arg_variants, arg_variants)
click to toggle source
# File lib/sums_up/core/parser.rb, line 11 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.map { |key, ary| [key, [*ary]] }.to_h) end
validate_name_format!(variant_name)
click to toggle source
# File lib/sums_up/core/parser.rb, line 38 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
validate_unique!(variant_names)
click to toggle source
# File lib/sums_up/core/parser.rb, line 24 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
validate_variant_args!(variant_args)
click to toggle source
# File lib/sums_up/core/parser.rb, line 51 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