normatron 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. data/.yardopts +2 -0
  2. data/lib/normatron/filters.rb +42 -24
  3. data/lib/normatron/filters/ascii_filter.rb +18 -12
  4. data/lib/normatron/filters/blank_filter.rb +19 -15
  5. data/lib/normatron/filters/camelize_filter.rb +39 -34
  6. data/lib/normatron/filters/capitalize_filter.rb +19 -13
  7. data/lib/normatron/filters/chomp_filter.rb +27 -21
  8. data/lib/normatron/filters/dasherize_filter.rb +16 -10
  9. data/lib/normatron/filters/downcase_filter.rb +19 -13
  10. data/lib/normatron/filters/dump_filter.rb +20 -14
  11. data/lib/normatron/filters/keep_filter.rb +101 -84
  12. data/lib/normatron/filters/remove_filter.rb +26 -21
  13. data/lib/normatron/filters/squeeze_filter.rb +24 -16
  14. data/lib/normatron/filters/squish_filter.rb +20 -13
  15. data/lib/normatron/filters/strip_filter.rb +25 -17
  16. data/lib/normatron/filters/swapcase_filter.rb +19 -13
  17. data/lib/normatron/filters/titleize_filter.rb +19 -13
  18. data/lib/normatron/filters/underscore_filter.rb +28 -22
  19. data/lib/normatron/filters/upcase_filter.rb +19 -13
  20. data/lib/normatron/version.rb +1 -1
  21. data/spec/normatron/configuration_spec.rb +0 -1
  22. data/spec/normatron/extensions/active_record_spec.rb +1 -0
  23. data/spec/normatron/filters/ascii_filter_spec.rb +15 -9
  24. data/spec/normatron/filters/blank_filter_spec.rb +10 -11
  25. data/spec/normatron/filters/camelize_filter_spec.rb +94 -33
  26. data/spec/normatron/filters/capitalize_filter_spec.rb +8 -7
  27. data/spec/normatron/filters/squeeze_filter_spec.rb +2 -2
  28. data/spec/spec_helper.rb +6 -1
  29. data/spec/support/matchers/evaluate_matcher.rb +75 -0
  30. metadata +5 -2
@@ -2,96 +2,113 @@ require 'normatron/filters/helpers'
2
2
 
3
3
  module Normatron
4
4
  module Filters
5
+
6
+ ##
7
+ # Remove the characters that doesn't match the given properties.
8
+ #
9
+ # The character properties follow the rule of @\p{}@ construct described in Regexp class.
10
+ # The @\p{}@ construct matches characters with the named property, much like POSIX bracket classes.
11
+ #
12
+ # To pass named properties to this filter, use them as Symbols:
13
+ #
14
+ # |_<.Property |_<.Description |
15
+ # | @:Alnum@ | Alphabetic and numeric character |
16
+ # | @:Alpha@ | Alphabetic character |
17
+ # | @:Blank@ | Space or tab |
18
+ # | @:Cntrl@ | Control character |
19
+ # | @:Digit@ | Digit |
20
+ # | @:Graph@ | Non-blank character (excludes spaces, control characters, and similar) |
21
+ # | @:Lower@ | Lowercase alphabetical character |
22
+ # | @:Print@ | Like :Graph, but includes the space character |
23
+ # | @:Punct@ | Punctuation character |
24
+ # | @:Space@ | Whitespace character (@[:blank:]@, newline, carriage return, etc.) |
25
+ # | @:Upper@ | Uppercase alphabetical |
26
+ # | @:XDigit@ | Digit allowed in a hexadecimal number (i.e., 0-9a-fA-F) |
27
+ # | @:Word@ | A member of one of the following Unicode general category Letter, Mark, Number, Connector_Punctuation |
28
+ # | @:ASCII@ | A character in the ASCII character set |
29
+ # | @:Any@ | Any Unicode character (including unassigned characters) |
30
+ # | @:Assigned@ | An assigned character |
31
+ #
32
+ # A Unicode character's General Category value can also be matched with @:Ab@ where @Ab@ is the category's
33
+ # abbreviation as described below:
34
+ #
35
+ # |_<.Property |_<.Description |
36
+ # | @:L@ | Letter |
37
+ # | @:Ll@ | Letter: Lowercase |
38
+ # | @:Lm@ | Letter: Mark |
39
+ # | @:Lo@ | Letter: Other |
40
+ # | @:Lt@ | Letter: Titlecase |
41
+ # | @:Lu@ | Letter: Uppercas |
42
+ # | @:Lo@ | Letter: Other |
43
+ # | @:M@ | Mark |
44
+ # | @:Mn@ | Mark: Nonspacing |
45
+ # | @:Mc@ | Mark: Spacing Combining |
46
+ # | @:Me@ | Mark: Enclosing |
47
+ # | @:N@ | Number |
48
+ # | @:Nd@ | Number: Decimal Digit |
49
+ # | @:Nl@ | Number: Letter |
50
+ # | @:No@ | Number: Other |
51
+ # | @:P@ | Punctuation |
52
+ # | @:Pc@ | Punctuation: Connector |
53
+ # | @:Pd@ | Punctuation: Dash |
54
+ # | @:Ps@ | Punctuation: Open |
55
+ # | @:Pe@ | Punctuation: Close |
56
+ # | @:Pi@ | Punctuation: Initial Quote |
57
+ # | @:Pf@ | Punctuation: Final Quote |
58
+ # | @:Po@ | Punctuation: Other |
59
+ # | @:S@ | Symbol |
60
+ # | @:Sm@ | Symbol: Math |
61
+ # | @:Sc@ | Symbol: Currency |
62
+ # | @:Sc@ | Symbol: Currency |
63
+ # | @:Sk@ | Symbol: Modifier |
64
+ # | @:So@ | Symbol: Other |
65
+ # | @:Z@ | Separator |
66
+ # | @:Zs@ | Separator: Space |
67
+ # | @:Zl@ | Separator: Line |
68
+ # | @:Zp@ | Separator: Paragraph |
69
+ # | @:C@ | Other |
70
+ # | @:Cc@ | Other: Control |
71
+ # | @:Cf@ | Other: Format |
72
+ # | @:Cn@ | Other: Not Assigned |
73
+ # | @:Co@ | Other: Private Use |
74
+ # | @:Cs@ | Other: Surrogate |
75
+ #
76
+ # Lastly, this method matches a character's Unicode script. The following scripts are supported:
77
+ #
78
+ # Arabic, Armenian, Balinese, Bengali, Bopomofo, Braille, Buginese, Buhid, Canadian_Aboriginal, Carian, Cham,
79
+ # Cherokee, Common, Coptic, Cuneiform, Cypriot, Cyrillic, Deseret, Devanagari, Ethiopic, Georgian, Glagolitic,
80
+ # Gothic, Greek, Gujarati, Gurmukhi, Han, Hangul, Hanunoo, Hebrew, Hiragana, Inherited, Kannada, Katakana, Kayah_Li,
81
+ # Kharoshthi, Khmer, Lao, Latin, Lepcha, Limbu, Linear_B, Lycian, Lydian, Malayalam, Mongolian, Myanmar,
82
+ # New_Tai_Lue, Nko, Ogham, Ol_Chiki, Old_Italic, Old_Persian, Oriya, Osmanya, Phags_Pa, Phoenician, Rejang, Runic,
83
+ # Saurashtra, Shavian, Sinhala, Sundanese, Syloti_Nagri, Syriac, Tagalog, Tagbanwa, Tai_Le, Tamil, Telugu, Thaana,
84
+ # Thai, Tibetan, Tifinagh, Ugaritic, Vai, and Yi.
85
+ #
86
+ # @example Out of box
87
+ # KeepFilter.evaluate("Doom 3", :L) #=> "Doom" keep only letters
88
+ # KeepFilter.evaluate("Doom 3", :N) #=> "3" keep only numbers
89
+ # KeepFilter.evaluate("Doom 3", :L, :N) #=> "Doom3" keep only letters and numbers
90
+ # KeepFilter.evaluate("Doom 3", :Lu, :N) #=> "D3" keep only uppercased letters or numbers
91
+ # KeepFilter.evaluate("Doom ˩", :Latin) #=> "Doom" keep only latin characters
92
+ #
93
+ # @example Using as ActiveRecord::Base normalizer
94
+ # normalize :attribute_a, :with => [[:keep, :Lu]]
95
+ # normalize :attribute_b, :with => [{:keep =>[:Lu]}]
96
+ # normalize :attribute_c, :with => [:custom_filter, [:keep, :Ll, :Space]]
97
+ # normalize :attribute_d, :with => [:custom_filter, {:keep => [:Ll, :Space]}]
98
+ #
99
+ # @see http://www.ruby-doc.org/core-1.9.3/Regexp.html Regexp
100
+ # @see RemoveFilter Normatron::Filters::RemoveFilter
5
101
  module KeepFilter
6
102
  extend Helpers
7
103
 
8
104
  ##
9
- # Remove the characters that doesn't match the given properties.
10
- # The character properties follow the rule of \\p{} construct described in Regexp class.
11
- # The \\p{} construct matches characters with the named property, much like POSIX bracket classes.
105
+ # Performs input conversion according to filter requirements.
12
106
  #
13
- # To pass named properties to this filter, use them as Symbols:
14
- # * <tt>:Alnum</tt> - Alphabetic and numeric character
15
- # * <tt>:Alpha</tt> - Alphabetic character
16
- # * <tt>:Blank</tt> - Space or tab
17
- # * <tt>:Cntrl</tt> - Control character
18
- # * <tt>:Digit</tt> - Digit
19
- # * <tt>:Graph</tt> - Non-blank character (excludes spaces, control characters, and similar)
20
- # * <tt>:Lower</tt> - Lowercase alphabetical character
21
- # * <tt>:Print</tt> - Like :Graph, but includes the space character
22
- # * <tt>:Punct</tt> - Punctuation character
23
- # * <tt>:Space</tt> - Whitespace character ([:blank:], newline, carriage return, etc.)
24
- # * <tt>:Upper</tt> - Uppercase alphabetical
25
- # * <tt>:XDigit</tt> - Digit allowed in a hexadecimal number (i.e., 0-9a-fA-F)
26
- # * <tt>:Word</tt> - A member of one of the following Unicode general category Letter, Mark, Number, Connector_Punctuation
27
- # * <tt>:ASCII</tt> - A character in the ASCII character set
28
- # * <tt>:Any</tt> - Any Unicode character (including unassigned characters)
29
- # * <tt>:Assigned</tt> - An assigned character
30
- #
31
- # A Unicode character's General Category value can also be matched with :Ab where Ab is the category’s abbreviation as described below:
32
- # * <tt>:L</tt> - 'Letter'
33
- # * <tt>:Ll</tt> - 'Letter: Lowercase'
34
- # * <tt>:Lm</tt> - 'Letter: Mark'
35
- # * <tt>:Lo</tt> - 'Letter: Other'
36
- # * <tt>:Lt</tt> - 'Letter: Titlecase'
37
- # * <tt>:Lu</tt> - 'Letter: Uppercase
38
- # * <tt>:Lo</tt> - 'Letter: Other'
39
- # * <tt>:M</tt> - 'Mark'
40
- # * <tt>:Mn</tt> - 'Mark: Nonspacing'
41
- # * <tt>:Mc</tt> - 'Mark: Spacing Combining'
42
- # * <tt>:Me</tt> - 'Mark: Enclosing'
43
- # * <tt>:N</tt> - 'Number'
44
- # * <tt>:Nd</tt> - 'Number: Decimal Digit'
45
- # * <tt>:Nl</tt> - 'Number: Letter'
46
- # * <tt>:No</tt> - 'Number: Other'
47
- # * <tt>:P</tt> - 'Punctuation'
48
- # * <tt>:Pc</tt> - 'Punctuation: Connector'
49
- # * <tt>:Pd</tt> - 'Punctuation: Dash'
50
- # * <tt>:Ps</tt> - 'Punctuation: Open'
51
- # * <tt>:Pe</tt> - 'Punctuation: Close'
52
- # * <tt>:Pi</tt> - 'Punctuation: Initial Quote'
53
- # * <tt>:Pf</tt> - 'Punctuation: Final Quote'
54
- # * <tt>:Po</tt> - 'Punctuation: Other'
55
- # * <tt>:S</tt> - 'Symbol'
56
- # * <tt>:Sm</tt> - 'Symbol: Math'
57
- # * <tt>:Sc</tt> - 'Symbol: Currency'
58
- # * <tt>:Sc</tt> - 'Symbol: Currency'
59
- # * <tt>:Sk</tt> - 'Symbol: Modifier'
60
- # * <tt>:So</tt> - 'Symbol: Other'
61
- # * <tt>:Z</tt> - 'Separator'
62
- # * <tt>:Zs</tt> - 'Separator: Space'
63
- # * <tt>:Zl</tt> - 'Separator: Line'
64
- # * <tt>:Zp</tt> - 'Separator: Paragraph'
65
- # * <tt>:C</tt> - 'Other'
66
- # * <tt>:Cc</tt> - 'Other: Control'
67
- # * <tt>:Cf</tt> - 'Other: Format'
68
- # * <tt>:Cn</tt> - 'Other: Not Assigned'
69
- # * <tt>:Co</tt> - 'Other: Private Use'
70
- # * <tt>:Cs</tt> - 'Other: Surrogate'
107
+ # This method returns the object itself when the first argument is not a String.
71
108
  #
72
- # Lastly, this method matches a character's Unicode script. The following scripts are supported:
73
- #
74
- # Arabic, Armenian, Balinese, Bengali, Bopomofo, Braille, Buginese, Buhid, Canadian_Aboriginal, Carian, Cham, Cherokee, Common, Coptic, Cuneiform, Cypriot, Cyrillic, Deseret, Devanagari, Ethiopic, Georgian, Glagolitic, Gothic, Greek, Gujarati, Gurmukhi, Han, Hangul, Hanunoo, Hebrew, Hiragana, Inherited, Kannada, Katakana, Kayah_Li, Kharoshthi, Khmer, Lao, Latin, Lepcha, Limbu, Linear_B, Lycian, Lydian, Malayalam, Mongolian, Myanmar, New_Tai_Lue, Nko, Ogham, Ol_Chiki, Old_Italic, Old_Persian, Oriya, Osmanya, Phags_Pa, Phoenician, Rejang, Runic, Saurashtra, Shavian, Sinhala, Sundanese, Syloti_Nagri, Syriac, Tagalog, Tagbanwa, Tai_Le, Tamil, Telugu, Thaana, Thai, Tibetan, Tifinagh, Ugaritic, Vai, and Yi.
75
- #
76
- # @example
77
- # KeepFilter.evaluate("Doom 3", :L) #=> "Doom" keep only letters
78
- # KeepFilter.evaluate("Doom 3", :N) #=> "3" keep only numbers
79
- # KeepFilter.evaluate("Doom 3", :L, :N) #=> "Doom3" keep only letters and numbers
80
- # KeepFilter.evaluate("Doom 3", :Lu, :N) #=> "D3" keep only uppercased letters or numbers
81
- # KeepFilter.evaluate("Doom ˩", :Latin) #=> "Doom" keep only latin characters
82
- #
83
- # @example Using as ActiveRecord::Base normalizer
84
- # normalize :attribute_a, :with => [[:keep, :Lu]]
85
- # normalize :attribute_b, :with => [{:keep =>[:Lu]}]
86
- # normalize :attribute_c, :with => [:custom_filter, [:keep, :Ll, :Space]]
87
- # normalize :attribute_d, :with => [:custom_filter, {:keep => [:Ll, :Space]}]
88
- #
89
- # @param [String] input A character sequence
90
- # @param [[Symbol]*] properties Array of Symbols equivalent to Regexp property for \\p{} construct.
91
- # @return [String] The clean character sequence or the object itself
92
- # @see http://www.ruby-doc.org/core-1.9.3/Regexp.html Regexp
93
- # @see RemoveFilter Normatron::Filters::RemoveFilter
94
- # @todo Raise exception for empty properties
109
+ # @param input [String] The String to be filtered
110
+ # @param properties [[Symbol]*] Symbols equivalent to Regexp property for @\\p{}@ construct
111
+ # @return [String] A new clean String
95
112
  def self.evaluate(input, *properties)
96
113
  input.kind_of?(String) ? evaluate_regexp(input, :keep, properties) : input
97
114
  end
@@ -2,33 +2,38 @@ require 'normatron/filters/helpers'
2
2
 
3
3
  module Normatron
4
4
  module Filters
5
+
6
+ ##
7
+ # Remove the characters that match the given properties.
8
+ #
9
+ # For additional informations see Normatron::Filter::ClassMethods#keep documentation.
10
+ #
11
+ # @example Out of box
12
+ # RemoveFilter.evaluate("Quake 3", :L) #=> " 3" remove only letters
13
+ # RemoveFilter.evaluate("Quake 3", :N) #=> "Quake " remove only numbers
14
+ # RemoveFilter.evaluate("Quake 3", :L, :N) #=> " " remove only letters or numbers
15
+ # RemoveFilter.evaluate("Quake 3", :Lu, :N) #=> "uake " remove only uppercased letters or numbers
16
+ # RemoveFilter.evaluate("Quake ˩", :Latin) #=> " ˩" remove only latin characters
17
+ #
18
+ # @example Using as ActiveRecord::Base normalizer
19
+ # normalize :attribute_a, :with => [[:remove, :Lu]]
20
+ # normalize :attribute_b, :with => [{:remove =>[:Lu]}]
21
+ # normalize :attribute_c, :with => [:custom_filter, [:remove, :Ll, :Space]]
22
+ # normalize :attribute_d, :with => [:custom_filter, {:remove => [:Ll, :Space]}]
23
+ #
24
+ # @see http://www.ruby-doc.org/core-1.9.3/Regexp.html Regexp
25
+ # @see KeepFilter Normatron::Filters::KeepFilter
5
26
  module RemoveFilter
6
27
  extend Helpers
7
28
 
8
29
  ##
9
- # Remove the characters that match the given properties.
30
+ # Performs input conversion according to filter requirements.
10
31
  #
11
- # For additional informations see Normatron::Filter::ClassMethods#keep documentation.
12
- #
13
- # @example
14
- # RemoveFilter.evaluate("Quake 3", :L) #=> " 3" remove only letters
15
- # RemoveFilter.evaluate("Quake 3", :N) #=> "Quake " remove only numbers
16
- # RemoveFilter.evaluate("Quake 3", :L, :N) #=> " " remove only letters or numbers
17
- # RemoveFilter.evaluate("Quake 3", :Lu, :N) #=> "uake " remove only uppercased letters or numbers
18
- # RemoveFilter.evaluate("Quake ˩", :Latin) #=> " ˩" remove only latin characters
32
+ # This method returns the object itself when the first argument is not a String.
19
33
  #
20
- # @example Using as ActiveRecord::Base normalizer
21
- # normalize :attribute_a, :with => [[:remove, :Lu]]
22
- # normalize :attribute_b, :with => [{:remove =>[:Lu]}]
23
- # normalize :attribute_c, :with => [:custom_filter, [:remove, :Ll, :Space]]
24
- # normalize :attribute_d, :with => [:custom_filter, {:remove => [:Ll, :Space]}]
25
- #
26
- # @param [String] input A character sequence
27
- # @param [[Symbol]*] properties Array of Symbols equivalent to Regexp property for \\p{} construct.
28
- # @return [String] The clean character sequence or the object itself
29
- # @see http://www.ruby-doc.org/core-1.9.3/Regexp.html Regexp
30
- # @see KeepFilter Normatron::Filters::KeepFilter
31
- # @todo Raise exception for empty properties
34
+ # @param input [String] The String to be filtered
35
+ # @param properties [[Symbol]*] Symbols equivalent to Regexp property for @\\p{}@ construct
36
+ # @return [String] A new clean String
32
37
  def self.evaluate(input, *properties)
33
38
  input.kind_of?(String) ? evaluate_regexp(input, :remove, properties) : input
34
39
  end
@@ -1,26 +1,34 @@
1
1
  module Normatron
2
2
  module Filters
3
+
4
+ ##
5
+ # Remove multiple occurences of the same character.
6
+ #
7
+ # If no option are given, all runs of identical characters are replaced by a single character.
8
+ #
9
+ # @example Out of box
10
+ # SqueezeFilter.evaluate("yellow moon") #=> "yelow mon"
11
+ # SqueezeFilter.evaluate(" now is the", " ") #=> " now is the"
12
+ # SqueezeFilter.evaluate("putters shoot balls", "m-z") #=> "puters shot balls"
13
+ #
14
+ # @example Using as ActiveRecord::Base normalizer
15
+ # normalize :attribute_a, :with => [:custom_filter, :squeeze]
16
+ # normalize :attribute_b, :with => [:custom_filter, [:squeeze, "a-f"]]
17
+ # normalize :attribute_c, :with => [:custom_filter, {:squeeze => ["a-f"]}]
18
+ #
19
+ # @see http://www.ruby-doc.org/core-1.9.3/String.html#method-i-squeeze String#squeeze
20
+ # @see SquishFilter Normatron::Filters::SquishFilter
21
+ # @see StripFilter Normatron::Filters::StripFilter
3
22
  module SqueezeFilter
4
23
 
5
24
  ##
6
- # Remove multiple occurences of the same character.
7
- # If no option are given, all runs of identical characters are replaced by a single character.
8
- #
9
- # @example
10
- # SqueezeFilter.evaluate("yellow moon") #=> "yelow mon"
11
- # SqueezeFilter.evaluate(" now is the", " ") #=> " now is the"
12
- # SqueezeFilter.evaluate("putters shoot balls", "m-z") #=> "puters shot balls"
25
+ # Performs input conversion according to filter requirements.
13
26
  #
14
- # @example Using as ActiveRecord::Base normalizer
15
- # normalize :attribute_a, :with => [:custom_filter, :squeeze]
16
- # normalize :attribute_b, :with => [:custom_filter, [:squeeze, "a-f"]]
17
- # normalize :attribute_c, :with => [:custom_filter, {:squeeze => ["a-f"]}]
27
+ # This method returns the object itself when the first argument is not a String.
18
28
  #
19
- # @param [String] input A character sequence
20
- # @param [[String]*] targets Characters to be affected
21
- # @return [String] The clean character sequence or the object itself
22
- # @see http://www.ruby-doc.org/core-1.9.3/String.html#method-i-squeeze String#squeeze
23
- # @see SquishFilter Normatron::Filters::SquishFilter
29
+ # @param input [String] The String to be filtered
30
+ # @param targets [[String]*] Characters to be affected
31
+ # @return [String] A new squeezed String
24
32
  def self.evaluate(input, *targets)
25
33
  return input unless input.kind_of?(String)
26
34
  targets.any? ? input.squeeze(targets.last) : input.squeeze
@@ -2,24 +2,31 @@ require 'normatron/filters/helpers'
2
2
 
3
3
  module Normatron
4
4
  module Filters
5
+
6
+ ##
7
+ # Strip input, remove line-breaks and multiple spaces.
8
+ #
9
+ # @example Out of box
10
+ # SquishFilter.evaluate(" the simpsons ") #=> "the simpsons"
11
+ # SquishFilter.evaluate("family guy") #=> "family guy"
12
+ # SquishFilter.evaluate("the \n simpsons") #=> "the simpsons"
13
+ # SquishFilter.evaluate("the\nsimpsons") #=> "the simpsons"
14
+ #
15
+ # @example Using as ActiveRecord::Base normalizer
16
+ # normalize :attribute, :with => [:custom_filter, :squish]
17
+ #
18
+ # @see http://api.rubyonrails.org/classes/String.html#method-i-squish String#squish
19
+ # @see SqueezeFilter Normatron::Filters::SqueezeFilter
20
+ # @see StripFilter Normatron::Filters::StripFilter
5
21
  module SquishFilter
6
22
 
7
23
  ##
8
- # Strip input, remove line-breaks and multiple spaces.
9
- #
10
- # @example
11
- # SquishFilter.evaluate(" the simpsons ") #=> "the simpsons"
12
- # SquishFilter.evaluate("family guy") #=> "family guy"
13
- # SquishFilter.evaluate("the \n simpsons") #=> "the simpsons"
14
- # SquishFilter.evaluate("the\nsimpsons") #=> "the simpsons"
24
+ # Performs input conversion according to filter requirements.
15
25
  #
16
- # @example Using as ActiveRecord::Base normalizer
17
- # normalize :attribute, :with => [:custom_filter, :squish]
26
+ # This method returns the object itself when the first argument is not a String.
18
27
  #
19
- # @param [String] input A character sequence
20
- # @return [String] The clean character sequence or the object itself
21
- # @see http://api.rubyonrails.org/classes/String.html#method-i-squish String#squish
22
- # @see SqueezeFilter Normatron::Filters::SqueezeFilter
28
+ # @param input [String] The String to be filtered
29
+ # @return [String] A new squished String
23
30
  def self.evaluate(input)
24
31
  input.kind_of?(String) ? input.squish : input
25
32
  end
@@ -2,29 +2,37 @@ require 'normatron/filters/helpers'
2
2
 
3
3
  module Normatron
4
4
  module Filters
5
+
6
+ ##
7
+ # Removes traling and leading spaces.
8
+ #
9
+ # @example Out of box
10
+ # StripFilter.evaluate(" copy ") #=> "copy"
11
+ # StripFilter.evaluate(" copy ", :L) #=> "copy "
12
+ # StripFilter.evaluate(" copy ", :R) #=> " copy"
13
+ # StripFilter.evaluate(" copy ", :LR) #=> "copy"
14
+ #
15
+ # @example Using as ActiveRecord::Base normalizer
16
+ # normalize :attribute_a, :with => :strip
17
+ # normalize :attribute_b, :with => { :strip => :L }
18
+ # normalize :attribute_c, :with => [:custom_filter, :strip]
19
+ # normalize :attribute_d, :with => [:custom_filter, [:strip, :L]]
20
+ # normalize :attribute_e, :with => [:custom_filter, {:strip => :R}]
21
+ #
22
+ # @see http://www.ruby-doc.org/core-1.9.3/String.html#method-i-strip String#strip
23
+ # @see SqueezeFilter Normatron::Filters::SqueezeFilter
24
+ # @see SquishFilter Normatron::Filters::SquishFilter
5
25
  module StripFilter
6
26
  extend Helpers
7
27
 
8
28
  ##
9
- # Remove traling and/or leading spaces from the string.
10
- #
11
- # @example
12
- # StripFilter.evaluate(" copy ") #=> "copy"
13
- # StripFilter.evaluate(" copy ", :L) #=> "copy "
14
- # StripFilter.evaluate(" copy ", :R) #=> " copy"
15
- # StripFilter.evaluate(" copy ", :LR) #=> "copy"
29
+ # Performs input conversion according to filter requirements.
16
30
  #
17
- # @example Using as ActiveRecord::Base normalizer
18
- # normalize :attribute_a, :with => :strip
19
- # normalize :attribute_b, :with => { :strip => :L }
20
- # normalize :attribute_c, :with => [:custom_filter, :strip]
21
- # normalize :attribute_d, :with => [:custom_filter, [:strip, :L]]
22
- # normalize :attribute_e, :with => [:custom_filter, {:strip => :R}]
31
+ # This method returns the object itself when the first argument is not a String.
23
32
  #
24
- # @param [String] input A character sequence
25
- # @param [Symbol] edges :L to strip trailing spaces, :R for leading spaces and :LR for both
26
- # @return [String] The character sequence without trailing and leading spaces or the object itself
27
- # @see http://www.ruby-doc.org/core-1.9.3/String.html#method-i-strip String#strip
33
+ # @param input [String] The String to be filtered
34
+ # @param edges [Symbol] @:L@ to strip trailing spaces, @:R@ for leading spaces or @:LR@ for both
35
+ # @return [String] A new stripped String
28
36
  def self.evaluate(input, edges=:LR)
29
37
  return input unless input.kind_of?(String)
30
38
 
@@ -2,25 +2,31 @@ require 'normatron/filters/helpers'
2
2
 
3
3
  module Normatron
4
4
  module Filters
5
+
6
+ ##
7
+ # Replaces uppercased characters by lowercased and vice versa.
8
+ #
9
+ # @example Out of box
10
+ # SwapcaseFilter.evaluate("As you Wish!") #=> "aS YOU wISH!"
11
+ #
12
+ # @example Using as ActiveRecord::Base normalizer
13
+ # normalize :attribute_a, :with => :swapcase
14
+ # normalize :attribute_b, :with => [:custom_filter, :swapcase]
15
+ #
16
+ # @see http://www.ruby-doc.org/core-1.9.3/String.html#method-i-swapcase String#swapcase
17
+ # @see DownFilter Normatron::Filters::DownFilter
18
+ # @see TitleizeFilter Normatron::Filters::TitleizeFilter
19
+ # @see UpcaseFilter Normatron::Filters::UpcaseFilter
5
20
  module SwapcaseFilter
6
21
  extend Helpers
7
22
 
8
23
  ##
9
- # Replaces uppercased characters by lowercased and vice versa.
10
- #
11
- # @example
12
- # SwapcaseFilter.evaluate("As you Wish!") #=> "aS YOU wISH!"
24
+ # Performs input conversion according to filter requirements.
13
25
  #
14
- # @example Using as ActiveRecord::Base normalizer
15
- # normalize :attribute_a, :with => :swapcase
16
- # normalize :attribute_b, :with => [:custom_filter, :swapcase]
26
+ # This method returns the object itself when the first argument is not a String.
17
27
  #
18
- # @param [String] input A character sequence
19
- # @return [String] The swapped case character sequence or the object itself
20
- # @see http://www.ruby-doc.org/core-1.9.3/String.html#method-i-swapcase String#swapcase
21
- # @see DownFilter Normatron::Filters::DownFilter
22
- # @see TitleizeFilter Normatron::Filters::TitleizeFilter
23
- # @see UpcaseFilter Normatron::Filters::UpcaseFilter
28
+ # @param input [String] The String to be filtered
29
+ # @return [String] A new swapcased String
24
30
  def self.evaluate(input)
25
31
  return input unless input.kind_of?(String)
26
32
  input.gsub(/([\p{Ll}])|(\p{Lu})|([^\p{Ll}\p{Lu}])/u) { $3 || ($2 ? mb_send(:downcase, $2) : mb_send(:upcase, $1)) }