Module: NormalizeAttributes

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

Defined Under Namespace

Modules: ActiveRecord, Version

Class Method Summary collapse

Class Method Details

.apply_normalizers(record, attribute, normalizers, options) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/normalize_attributes/active_record.rb', line 25

def self.apply_normalizers(record, attribute, normalizers, options)
  value = NormalizeAttributes.retrieve_value(record, attribute, options[:raw])
  normalizers = NormalizeAttributes.retrieve_normalizers(normalizers, value)

  normalizers.each do |normalizer|
    if normalizer.respond_to?(:call)
      value = normalizer.call(value)
    elsif value.respond_to?(normalizer)
      value = value.send(normalizer)
    elsif record.respond_to?(normalizer)
      value = record.send(normalizer, value)
    end
  end

  begin
    record.write_attribute(attribute, value)
  rescue ActiveModel::MissingAttributeError
    record.public_send("#{attribute}=", value)
  end
end

.retrieve_normalizers(normalizers, value) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/normalize_attributes/active_record.rb', line 12

def self.retrieve_normalizers(normalizers, value)
  return normalizers unless normalizers.empty?

  case value
  when String
    [:squish]
  when Array
    [:compact]
  else
    []
  end
end

.retrieve_value(record, attribute, raw) ⇒ Object



2
3
4
5
6
7
8
9
10
# File 'lib/normalize_attributes/active_record.rb', line 2

def self.retrieve_value(record, attribute, raw)
  before_type_cast_method = "#{attribute}_before_type_cast"

  if raw && record.respond_to?(before_type_cast_method)
    record.send(before_type_cast_method)
  else
    record.send(attribute)
  end
end