class Coupdoeil::Hovercard::Option

def inherited(subclass)

def inherited(subclass)
  super
  subclass.class_eval do
    @key = name.demodulize.underscore.to_sym
  end
end

def initialize(value)

def initialize(value)
  value = value.to_s if value.is_a? Symbol
  @value = value
end

def into_bits(value) = parse(value)

def into_bits(value) = parse(value)

def raise_invalid_option(message)

def raise_invalid_option(message)
  raise InvalidOptionError,
        "Invalid value '#{value}' (#{value.class.name}) for #{self.class.key} option. #{message}"
end

def validate! = raise(NotImplementedError)

def validate! = raise(NotImplementedError)

def validate_inclusion!

def validate_inclusion!
  values = self.class.const_get("VALUES")
  return if value.in?(values)
  values_sentence = values.to_sentence(two_words_connector: " or ", last_word_connector: " or ")
  raise_invalid_option "Value must be one of: #{values_sentence}"
end