help modifying validates_inclusion_of to accept a proc

Hi all,

I'm hoping to get some help with validates_inclusion_of. I'm trying
to modify the method so that it accepts a symbol or Proc, so that the
list of valid values is computed dynamically at the time of
validation. However, I'm starting to think this might not even be
possible, given the way validations are implemented. It looks as
though when I pass in a proc, it is called just once and the value
stored. Can anyone advise on how modify this so that the proc is
actually called upon validation? I appreciate any tips.

This is what I have so far:

module ActiveRecord
  module Validations
    module ClassMethods

      def validates_inclusion_of(*attr_names)
        configuration = { :message =>
ActiveRecord::Errors.default_error_messages[:inclusion], :on
=> :save }

        enum = configuration[:in] || configuration[:within]

        # allow :in parameter to be a symbol or proc
        if enum.is_a? Symbol then
          testenum = send(enum)
        elsif enum.is_a? Proc then
          testenum =
          testenum = enum
        raise(ArgumentError, "An object with the method include? is
required must be supplied as the :in option of the configuration
hash") unless testenum.respond_to?("include?")

        validates_each(attr_names, configuration) do |record,
attr_name, value|
          # NPG package the value in an array if necessary
          if !value.respond_to? :each then
            value = [ value ] #
          # NPG allow :in parameter to be a proc
          if enum.is_a? Symbol then
            enum = send(enum)
          if enum.is_a? Proc then
            enum =

          value.each do |val| # iterate over each value in the field
            record.errors.add(attr_name, configuration[:message] %
val) unless enum.include?(val)