Sha256: 69ad1eecef3ccf0c7a7ae8265a6fca253fb87f98f725f1e5fb92cdbf8283f04c

Contents?: true

Size: 795 Bytes

Versions: 4

Compression:

Stored size: 795 Bytes

Contents

module ActiveRecord
  module Enum
    class EnumType < Type::Value # :nodoc:
      delegate :type, to: :subtype

      def initialize(name, mapping, subtype)
        @name = name
        @mapping = mapping
        @subtype = subtype
      end

      def cast(value)
        return if value.blank?

        if valid?(value)
          value.to_s
        else
          assert_valid_value(value)
        end
      end

      def deserialize(value)
        value&.to_sym
      end

      def serialize(value)
        value.to_s
      end

      def valid?(value)
        mapping.include?(value.to_s)
      end

      def assert_valid_value(value)
        unless value.blank? || valid?(value)
          raise ArgumentError, "'#{value}' is not a valid #{name}"
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
sql_enum-0.1.6 lib/active_record/enum/enum_type.rb
sql_enum-0.1.5 lib/active_record/enum/enum_type.rb
sql_enum-0.1.3 lib/active_record/enum/enum_type.rb
sql_enum-0.1.2 lib/active_record/enum/enum_type.rb