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