Class: AutoStripAttributes::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/auto_strip_attributes.rb

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.filtersObject

Returns the value of attribute filters.



37
38
39
# File 'lib/auto_strip_attributes.rb', line 37

def filters
  @filters
end

.filters_enabledObject

Returns the value of attribute filters_enabled.



38
39
40
# File 'lib/auto_strip_attributes.rb', line 38

def filters_enabled
  @filters_enabled
end

.filters_orderObject

Returns the value of attribute filters_order.



39
40
41
# File 'lib/auto_strip_attributes.rb', line 39

def filters_order
  @filters_order
end

Class Method Details

.set_filter(filter, &block) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/auto_strip_attributes.rb', line 74

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) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/auto_strip_attributes.rb', line 42

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(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