aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/plugins/strip_attributes/lib
diff options
context:
space:
mode:
authorfrancis <francis>2008-12-02 12:21:01 +0000
committerfrancis <francis>2008-12-02 12:21:01 +0000
commit1a5af1342b5bfa6983b1eba512f3b8276b1feb82 (patch)
tree46daedca302e742d6d6f3e32abea4230068ed4ea /vendor/plugins/strip_attributes/lib
parenta3f3a831c306d30ad05b0695b5211533ac00cb22 (diff)
Strip Attributes plugin
Diffstat (limited to 'vendor/plugins/strip_attributes/lib')
-rw-r--r--vendor/plugins/strip_attributes/lib/strip_attributes.rb31
1 files changed, 31 insertions, 0 deletions
diff --git a/vendor/plugins/strip_attributes/lib/strip_attributes.rb b/vendor/plugins/strip_attributes/lib/strip_attributes.rb
new file mode 100644
index 000000000..493db56bf
--- /dev/null
+++ b/vendor/plugins/strip_attributes/lib/strip_attributes.rb
@@ -0,0 +1,31 @@
+module StripAttributes
+ # Strips whitespace from model fields and converts blank values to nil.
+ def strip_attributes!(options = nil)
+ before_validation do |record|
+ attributes = StripAttributes.narrow(record.attributes, options)
+ attributes.each do |attr, value|
+ if value.respond_to?(:strip)
+ record[attr] = (value.blank?) ? nil : value.strip
+ end
+ end
+ end
+ end
+
+ # Necessary because Rails has removed the narrowing of attributes using :only
+ # and :except on Base#attributes
+ def self.narrow(attributes, options)
+ if options.nil?
+ attributes
+ else
+ if except = options[:except]
+ except = Array(except).collect { |attribute| attribute.to_s }
+ attributes.except(*except)
+ elsif only = options[:only]
+ only = Array(only).collect { |attribute| attribute.to_s }
+ attributes.slice(*only)
+ else
+ raise ArgumentError, "Options does not specify :except or :only (#{options.keys.inspect})"
+ end
+ end
+ end
+end