Module: ActiveRecord::SafeInitialize

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

Constant Summary collapse

VERSION =
'0.1.0'

Instance Method Summary collapse

Instance Method Details

#safe_initialize(*attributes) ⇒ Object

Raises:

  • (ArgumentError)


7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/active_record/safe_initialize.rb', line 7

def safe_initialize(*attributes)
  options = attributes.extract_options!
  raise ArgumentError, "Missing initialization value" unless options[:with]

  after_initialize do
    attributes.each do |attribute|
      if has_attribute?(attribute) && read_attribute(attribute).nil?
        value = options[:with]
        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