Module: DefaultValueFor::InstanceMethods

Defined in:
lib/default_value_for.rb

Instance Method Summary collapse

Instance Method Details

#attributes_for_create(attribute_names) ⇒ Object



146
147
148
149
# File 'lib/default_value_for.rb', line 146

def attributes_for_create(attribute_names)
  attribute_names += _default_attribute_values.keys.map(&:to_s)
  super
end

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



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

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 self.class.respond_to? :protected_attributes
    super(attributes, options)
  else
    super(attributes)
  end
end

#set_default_valuesObject



151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# File 'lib/default_value_for.rb', line 151

def set_default_values
  self.class._all_default_attribute_values.each do |attribute, container|
    next unless 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?")

    column = self.class.columns.detect {|c| c.name == attribute}
    attribute_blank = if column && column.type == :boolean
      attributes[attribute].nil?
    else
      attributes[attribute].blank?
    end
    next unless connection_default_value_defined || 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