diff options
author | Mark Longair <mhl@pobox.com> | 2013-11-28 14:36:36 +0000 |
---|---|---|
committer | Mark Longair <mhl@pobox.com> | 2013-11-29 12:22:59 +0000 |
commit | 600c3b356d804546bfa31fef89979cc1c44f3756 (patch) | |
tree | a2e45e35346601236fb92bff70a56989d9161f62 /lib/strip_attributes/strip_attributes.rb | |
parent | 20089cf7b5045d504b7240bc92e2b6068fcc2246 (diff) |
Move strip_attributes out of vendor/plugins
Diffstat (limited to 'lib/strip_attributes/strip_attributes.rb')
-rw-r--r-- | lib/strip_attributes/strip_attributes.rb | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/strip_attributes/strip_attributes.rb b/lib/strip_attributes/strip_attributes.rb new file mode 100644 index 000000000..130d10185 --- /dev/null +++ b/lib/strip_attributes/strip_attributes.rb @@ -0,0 +1,37 @@ +module StripAttributes + # Strips whitespace from model fields and leaves nil values as nil. + # XXX this differs from official StripAttributes, as it doesn't make blank cells null. + def strip_attributes!(options = nil) + before_validation do |record| + attribute_names = StripAttributes.narrow(record.attribute_names, options) + + attribute_names.each do |attribute_name| + value = record[attribute_name] + if value.respond_to?(:strip) + stripped = value.strip + if stripped != value + record[attribute_name] = (value.nil?) ? nil : stripped + end + end + end + end + end + + # Necessary because Rails has removed the narrowing of attributes using :only + # and :except on Base#attributes + def self.narrow(attribute_names, options) + if options.nil? + attribute_names + else + if except = options[:except] + except = Array(except).collect { |attribute| attribute.to_s } + attribute_names - except + elsif only = options[:only] + only = Array(only).collect { |attribute| attribute.to_s } + attribute_names & only + else + raise ArgumentError, "Options does not specify :except or :only (#{options.keys.inspect})" + end + end + end +end |