lib/nilify_blanks.rb in nilify_blanks-1.0.1 vs lib/nilify_blanks.rb in nilify_blanks-1.0.2
- old
+ new
@@ -1,48 +1,56 @@
module NilifyBlanks
def self.included(base)
base.extend ClassMethods
end
-
+
module ClassMethods
+
+ def define_attribute_methods
+ super
+ define_nilify_blank_methods
+ end
+
def nilify_blanks(options = {})
return if self.included_modules.include?(NilifyBlanks::InstanceMethods)
- return unless self.table_exists?
-
+
include NilifyBlanks::InstanceMethods
-
- if options[:only]
- options[:only] = [options[:only]] unless options[:only].is_a?(Array)
- options[:only] = options[:only].map(&:to_s)
- end
-
- if options[:except]
- options[:except] = [options[:except]] unless options[:except].is_a?(Array)
- options[:except] = options[:except].map(&:to_s)
- end
-
+
+ @_nilify_blanks_options = options
+ end
+
+ private
+
+ def define_nilify_blank_methods
+ return unless @_nilify_blanks_options
+
+ options = @_nilify_blanks_options
+ options[:only] = Array.wrap(options[:only]).map(&:to_s) if options[:only]
+ options[:except] = Array.wrap(options[:except]).map(&:to_s) if options[:except]
+
cattr_accessor :nilify_blanks_columns
-
+
if options[:only]
self.nilify_blanks_columns = options[:only].clone
else
- self.nilify_blanks_columns = self.content_columns.reject {|c| !c.null }.map {|c| c.name.to_s }
+ self.nilify_blanks_columns = self.content_columns.select(&:null).map(&:name).map(&:to_s)
end
self.nilify_blanks_columns -= options[:except] if options[:except]
self.nilify_blanks_columns = self.nilify_blanks_columns.map(&:to_s)
-
+
options[:before] ||= :save
- class_eval "before_#{options[:before]} :nilify_blanks"
+ send("before_#{options[:before]}", :nilify_blanks)
end
+
end
-
+
module InstanceMethods
def nilify_blanks
(self.nilify_blanks_columns || []).each do |column|
value = read_attribute(column)
next unless value.is_a?(String)
- next unless value.nil? or !value.respond_to?(:blank)
-
+ next unless value.respond_to?(:blank?)
+
write_attribute(column, nil) if value.blank?
end
end
end
end