class Enumerize::Predicates::Builder

def build(klass)

def build(klass)
  warn_on_already_defined_methods
  klass.delegate(*names, to: @attr.name, prefix: @options[:prefix], allow_nil: true)
end

def initialize(attr, options)

def initialize(attr, options)
  @attr    = attr
  @options = options.is_a?(Hash) ? options : {}
end

def names

def names
  values.map { |v| "#{v.tr('-', '_')}?" }
end

def values

def values
  values = @attr.values
  if @options[:only]
    values &= Array(@options[:only]).map(&:to_s)
  end
  if @options[:except]
    values -= Array(@options[:except]).map(&:to_s)
  end
  values
end

def warn_on_already_defined_methods

def warn_on_already_defined_methods
  names.each do |name|
    method_name = [@options[:prefix], name].compact.join('_')
    if @attr.klass.respond_to?(method_name)
      warn(
        "Predicate method `#{name}` is already defined as #{@attr.klass.name}##{name}. Use enumerize's :prefix option to avoid it"
      )
    end
  end
end