Sha256: a2d32f022e033c874d2b373f89a6085c3fdae78817dec76846add3dc4b3a2f92

Contents?: true

Size: 726 Bytes

Versions: 3

Compression:

Stored size: 726 Bytes

Contents

module Rasti
  module Types
    class Enum

      include Castable

      attr_reader :values

      def self.[](*values)
        new values
      end

      def to_s
        "#{self.class}[#{values.map(&:inspect).join(', ')}]"
      end
      alias_method :inspect, :to_s

      private

      def initialize(values)
        @values = values.map(&:to_s)
        define_getters
      end

      def valid?(value)
        values.include? String.cast(value)
      rescue
        false
      end

      def transform(value)
        String.cast value
      end

      def define_getters
        values.each do |value|
          define_singleton_method(Inflecto.underscore(value)) { value }
        end
      end

    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rasti-types-1.1.2 lib/rasti/types/enum.rb
rasti-types-1.1.1 lib/rasti/types/enum.rb
rasti-types-1.1.0 lib/rasti/types/enum.rb