Module: StripAttributes
- Defined in:
- lib/strip_attributes/version.rb,
lib/strip_attributes/matchers.rb,
lib/strip_attributes/shoulda/macros.rb,
lib/strip_attributes.rb
Defined Under Namespace
Constant Summary collapse
- VERSION =
"1.14.0"
- VALID_OPTIONS =
[:only, :except, :allow_empty, :collapse_spaces, :replace_newlines, :regex, :if, :unless].freeze
- 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
"\u180E\u200B\u200C\u200D\u2060\uFEFF".freeze
- MULTIBYTE_SPACE =
/[[:space:]#{MULTIBYTE_WHITE}]/.freeze
- MULTIBYTE_BLANK =
/[[:blank:]#{MULTIBYTE_WHITE}]/.freeze
- MULTIBYTE_SUPPORTED =
"\u0020" == " "
Class Method Summary collapse
-
.narrow(attributes, options = {}) ⇒ Object
Necessary because Rails has removed the narrowing of attributes using :only and :except on Base#attributes.
- .strip(record_or_string, options = {}) ⇒ Object
- .strip_record(record, options = {}) ⇒ Object
- .strip_string(value, options = {}) ⇒ Object
- .validate_options(options) ⇒ Object
Class Method Details
.narrow(attributes, options = {}) ⇒ Object
Necessary because Rails has removed the narrowing of attributes using :only and :except on Base#attributes
85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/strip_attributes.rb', line 85 def self.narrow(attributes, = {}) if [:except] except = Array([:except]).map(&:to_s) attributes.except(*except) elsif [:only] only = Array([:only]).map(&:to_s) attributes.slice(*only) else attributes end end |
.strip(record_or_string, options = {}) ⇒ Object
33 34 35 36 37 38 39 |
# File 'lib/strip_attributes.rb', line 33 def self.strip(record_or_string, = {}) if record_or_string.respond_to?(:attributes) strip_record(record_or_string, ) else strip_string(record_or_string, ) end end |
.strip_record(record, options = {}) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/strip_attributes.rb', line 41 def self.strip_record(record, = {}) attributes = narrow(record.attributes, ) attributes.each do |attr, value| original_value = value value = strip_string(value, ) record[attr] = value if original_value != value end record end |
.strip_string(value, options = {}) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/strip_attributes.rb', line 53 def self.strip_string(value, = {}) return value unless value.is_a?(String) return value if value.frozen? allow_empty = [:allow_empty] collapse_spaces = [:collapse_spaces] replace_newlines = [:replace_newlines] regex = [: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) ⇒ Object
97 98 99 100 |
# File 'lib/strip_attributes.rb', line 97 def self.() return if (.keys - VALID_OPTIONS).empty? raise ArgumentError, "Options does not specify #{VALID_OPTIONS} (#{.keys.inspect})" end |