class AutoStripAttributes::Config

Attributes

filters[RW]
filters_enabled[RW]
filters_order[RW]

Public Class Methods

set_filter(filter, &block) click to toggle source
# File lib/auto_strip_attributes.rb, line 81
def self.set_filter(filter, &block)
  if filter.is_a?(Hash)
    filter_name = filter.keys.first
    filter_enabled = filter.values.first
  else
    filter_name = filter
    filter_enabled = false
  end
  @filters[filter_name] = block
  @filters_enabled[filter_name] = filter_enabled
  # in case filter is redefined, we probably don't want to change the order
  @filters_order << filter_name if !@filters_order.include?(filter_name)
end
setup(clear_previous: false, defaults: true, &block) click to toggle source
# File lib/auto_strip_attributes.rb, line 48
def self.setup(clear_previous: false, defaults: true, &block)
  @filters, @filters_enabled, @filters_order = {}, {}, [] if clear_previous

  @filters ||= {}
  @filters_enabled ||= {}
  @filters_order ||= []

  if defaults
    set_filter(convert_non_breaking_spaces: false) do |value|
      value.respond_to?(:gsub) ? value.gsub("\u00A0", " ") : value
    end
    set_filter(strip: true) do |value|
      value.respond_to?(:strip) ? value.strip : value
    end
    set_filter(nullify: true) do |value|
      # We check for blank? and empty? because rails uses empty? inside blank?
      # e.g. MiniTest::Mock.new() only responds to .blank? but not empty?, check tests for more info
      # Basically same as value.blank? ? nil : value
      (value.respond_to?(:'blank?') and value.respond_to?(:'empty?') and value.blank?) ? nil : value
    end
    set_filter(nullify_array: true) {|value| value}
    set_filter(squish: false) do |value|
      value = value.respond_to?(:gsub) ? value.gsub(/[[:space:]]+/, ' ') : value
      value.respond_to?(:strip) ? value.strip : value
    end
    set_filter(delete_whitespaces: false) do |value|
      value.respond_to?(:delete) ? value.delete(" \t") : value
    end
  end

  instance_eval(&block) if block_given?
end