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
|