module ActiveRecord::SafeInitialize

Constants

VERSION

Public Instance Methods

safe_initialize(*attributes, &block) click to toggle source
# File lib/active_record/safe_initialize.rb, line 7
def safe_initialize(*attributes, &block)
  options = attributes.extract_options!
  default = options.fetch(:with, block)
  raise ArgumentError, "Missing initialization value" unless default
  warn "Both :with and block are present; using :with value" if options[:with] && block_given?

  after_initialize(options) do
    attributes.each do |attribute|
      if has_attribute?(attribute) && read_attribute(attribute).nil?
        value = default
        value = instance_exec(&value) if value.respond_to?(:call)
        value = self.send(value) if value.is_a?(Symbol)

        self.send "#{attribute}=", value
      end
    end
  end
end