app/models/rule_types.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true

module RuleTypes
  class UnsupportedKind < StandardError; end

  RULE_TYPE_MULTI_ENTITIES = "multi-entities"
  RULE_TYPE_ACTIVITY = "activity"
  RULE_TYPE_PACKAGE = "package"
  RULE_TYPE_PAYMENT = "payment"
  RULE_TYPE_ZONE = "zone"
  RULE_TYPE_ZONE_ACTIVITY = "zone_activity"

  RULE_TYPES = [
    RULE_TYPE_PAYMENT, RULE_TYPE_ACTIVITY,
    RULE_TYPE_PACKAGE, RULE_TYPE_MULTI_ENTITIES,
    RULE_TYPE_ZONE, RULE_TYPE_ZONE_ACTIVITY
  ].freeze

  RULE_TYPES_MAPPING = {
    RULE_TYPE_ACTIVITY       => RuleTypes::ActivityRuleType,
    RULE_TYPE_PACKAGE        => RuleTypes::PackageRuleType,
    RULE_TYPE_PAYMENT        => RuleTypes::PaymentRuleType,
    RULE_TYPE_MULTI_ENTITIES => RuleTypes::MultiEntityRuleType,
    RULE_TYPE_ZONE           => RuleTypes::ZoneRuleType,
    RULE_TYPE_ZONE_ACTIVITY  => RuleTypes::ZoneActivityRuleType
  }.freeze

  def self.from_rule(rule)
    klazz = RULE_TYPES_MAPPING.fetch(rule.kind) do
      raise UnsupportedKind, "unsupported kind '#{rule.kind}' see #{RULE_TYPES}"
    end
    klazz.new(rule)
  end
end