module StripAttributes
Constants
- MULTIBYTE_BLANK
- MULTIBYTE_SPACE
- MULTIBYTE_SUPPORTED
- MULTIBYTE_WHITE
Unicode invisible and whitespace characters. The POSIX character class
- :space:
-
corresponds to the Unicode class Z (“separator”). We also
include the following characters from Unicode class C (“control”), which are spaces or invisible characters that make no sense at the start or end of a string:
U+180E MONGOLIAN VOWEL SEPARATOR U+200B ZERO WIDTH SPACE U+200C ZERO WIDTH NON-JOINER U+200D ZERO WIDTH JOINER U+2060 WORD JOINER U+FEFF ZERO WIDTH NO-BREAK SPACE
- VALID_OPTIONS
- VERSION
Public Class Methods
narrow(attributes, options = {})
click to toggle source
Necessary because Rails has removed the narrowing of attributes using :only and :except on Base#attributes
# File lib/strip_attributes.rb, line 85 def self.narrow(attributes, options = {}) if except = options[:except] except = Array(except).collect { |attribute| attribute.to_s } attributes.except(*except) elsif only = options[:only] only = Array(only).collect { |attribute| attribute.to_s } attributes.slice(*only) else attributes end end
strip(record_or_string, options = {})
click to toggle source
# File lib/strip_attributes.rb, line 33 def self.strip(record_or_string, options = {}) if record_or_string.respond_to?(:attributes) strip_record(record_or_string, options) else strip_string(record_or_string, options) end end
strip_record(record, options = {})
click to toggle source
# File lib/strip_attributes.rb, line 41 def self.strip_record(record, options = {}) attributes = narrow(record.attributes, options) attributes.each do |attr, value| original_value = value value = strip_string(value, options) record[attr] = value if original_value != value end record end
strip_string(value, options = {})
click to toggle source
# File lib/strip_attributes.rb, line 53 def self.strip_string(value, options = {}) return value unless value.is_a?(String) return value if value.frozen? allow_empty = options[:allow_empty] collapse_spaces = options[:collapse_spaces] replace_newlines = options[:replace_newlines] regex = options[:regex] value.gsub!(regex, "") if regex if MULTIBYTE_SUPPORTED && Encoding.compatible?(value, MULTIBYTE_SPACE) value.gsub!(/\A#{MULTIBYTE_SPACE}+|#{MULTIBYTE_SPACE}+\z/, "") else value.strip! end value.gsub!(/[\r\n]+/, " ") if replace_newlines if collapse_spaces if MULTIBYTE_SUPPORTED && Encoding.compatible?(value, MULTIBYTE_BLANK) value.gsub!(/#{MULTIBYTE_BLANK}+/, " ") else value.squeeze!(" ") end end (value.blank? && !allow_empty) ? nil : value end
validate_options(options)
click to toggle source
# File lib/strip_attributes.rb, line 97 def self.validate_options(options) if keys = options.keys unless (keys - VALID_OPTIONS).empty? raise ArgumentError, "Options does not specify #{VALID_OPTIONS} (#{options.keys.inspect})" end end end