class Dieses::Support::Enum

Attributes

value[R]

Public Class Methods

call(value) click to toggle source
# File lib/dieses/support/enum.rb, line 51
def self.call(value)
  new(value)
end
of(*members) click to toggle source
# File lib/dieses/support/enum.rb, line 41
def of(*members) # rubocop:disable Metrics/MethodLength
  values Set.new(members.map(&:to_sym)).freeze

  members.each do |member|
    define_method("#{member}?") do
      value == member
    end
  end

  Class.new(self) do
    def self.call(value)
      new(value)
    end

    define_singleton_method(:default) { members.first }
  end
end

Private Class Methods

new(value) click to toggle source
# File lib/dieses/support/enum.rb, line 12
def initialize(value)
  self.value = value
end

Public Instance Methods

==(other)
Alias for: eql?
eql?(other) click to toggle source
# File lib/dieses/support/enum.rb, line 22
def eql?(other)
  return false unless other.is_a? self.class

  value == other.value
end
Also aliased as: ==
hash() click to toggle source
# File lib/dieses/support/enum.rb, line 30
def hash
  self.class.hash ^ values.hash ^ value.hash
end
to_s() click to toggle source
# File lib/dieses/support/enum.rb, line 34
def to_s
  value.to_s
end
value=(value) click to toggle source
# File lib/dieses/support/enum.rb, line 16
def value=(value)
  raise ArgumentError, "Invalid enum value: #{value}" unless self.class.values.member?(value = value.to_sym)

  @value = value
end