Sha256: 99eb1a597cdb55e100244ef9a684582d1817935b5a566b69c05dab99c43465f4

Contents?: true

Size: 1.57 KB

Versions: 1

Compression:

Stored size: 1.57 KB

Contents

module Rubiety
  module NilifyBlanks
    def self.included(base)
      base.extend ClassMethods
    end
    
    module ClassMethods
      def nilify_blanks(options = {})
        return if self.included_modules.include?(NilifyBlanks::InstanceMethods)
        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
        
        cattr_accessor :nilify_blanks_columns
        
        self.nilify_blanks_columns = self.content_columns.reject {|c| !c.null }.map {|c| c.name.to_s }
        self.nilify_blanks_columns = self.nilify_blanks_columns.select {|c| options[:only].include?(c) } if options[:only]
        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"
      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)
          
          write_attribute(column, nil) if value.blank?
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
railsgarden-nilify_blanks-0.1.0 lib/nilify_blanks.rb