Module: ActiveRecord::SafeInitialize

Defined in:
lib/active_record/safe_initialize.rb,
lib/active_record/safe_initialize/version.rb

Constant Summary collapse

VERSION =
'0.2.0'

Instance Method Summary collapse

Instance Method Details

#safe_initialize(*attributes, &block) ⇒ Object

Raises:

  • (ArgumentError)


7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 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