Sha256: 65a8d745ea7f93d15b834bd4ae218ffd89d96533267c96bfee34757c28bb8fea

Contents?: true

Size: 1.51 KB

Versions: 2

Compression:

Stored size: 1.51 KB

Contents

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)

      include NilifyBlanks::InstanceMethods

      @_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.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
      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.respond_to?(:blank?)

        write_attribute(column, nil) if value.blank?
      end
    end
  end
end

require "nilify_blanks/railtie"

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
nilify_blanks-1.0.3 lib/nilify_blanks.rb
nilify_blanks-1.0.2 lib/nilify_blanks.rb