Module: DefaultValueFor::InstanceMethods

Defined in:
lib/default_value_for.rb

Instance Method Summary collapse

Instance Method Details

#initialize(attributes = nil, options = {}) ⇒ Object



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/default_value_for.rb', line 124

def initialize(attributes = nil, options = {})
  @initialization_attributes = attributes.is_a?(Hash) ? attributes.stringify_keys : {}

  unless options[:without_protection]
    if respond_to?(:mass_assignment_options, true) && options.has_key?(:as)
      @initialization_attributes = sanitize_for_mass_assignment(@initialization_attributes, options[:as])
    elsif respond_to?(:sanitize_for_mass_assignment, true)
      @initialization_attributes = sanitize_for_mass_assignment(@initialization_attributes)
    else
      @initialization_attributes = remove_attributes_protected_from_mass_assignment(@initialization_attributes)
    end
  end

  if ActiveRecord::VERSION::MAJOR > 3 || (ActiveRecord::VERSION::MAJOR == 3 && ActiveRecord::VERSION::MINOR > 0)
    super(attributes, options)
  else
    super(attributes)
  end
end

#set_default_valuesObject



144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# File 'lib/default_value_for.rb', line 144

def set_default_values
  self.class._all_default_attribute_values.each do |attribute, container|
    next unless self.new_record? || self.class._all_default_attribute_values_not_allowing_nil.include?(attribute)

    connection_default_value_defined = new_record? && respond_to?("#{attribute}_changed?") && !__send__("#{attribute}_changed?")

    next unless connection_default_value_defined || self.attributes[attribute].blank?

    # allow explicitly setting nil through allow nil option
    next if @initialization_attributes.is_a?(Hash) && @initialization_attributes.has_key?(attribute) && !self.class._all_default_attribute_values_not_allowing_nil.include?(attribute)

    __send__("#{attribute}=", container.evaluate(self))
    changed_attributes.delete(attribute)
  end
end