string_utility_belt 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +0 -2
- data/lib/string_utility_belt/regex_me/lib/builders.rb +2 -80
- data/lib/string_utility_belt/regex_me/lib/configurations.rb +25 -0
- data/lib/string_utility_belt/regex_me/lib/helper.rb +168 -0
- data/lib/string_utility_belt/version.rb +1 -1
- data/string_utility_belt.gemspec +21 -0
- data/test/string_utility_belt/{regex_me_to_search_test.rb → regex_me/builders_test.rb} +1 -1
- data/test/string_utility_belt/{regex_me_helper_test.rb → regex_me/helper_test.rb} +33 -20
- metadata +8 -7
- data/lib/string_utility_belt/regex_me/lib/helpers.rb +0 -102
@@ -1,10 +1,7 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/
|
2
|
-
require File.dirname(__FILE__) + '/helpers'
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
3
2
|
|
4
3
|
module RegexMe
|
5
4
|
module Builders
|
6
|
-
include RegexMe::Configurations::Builder
|
7
|
-
|
8
5
|
def regex_me_to_search_ruby(options = {})
|
9
6
|
regex_me_to_search(:ruby, options)
|
10
7
|
end
|
@@ -15,85 +12,10 @@ module RegexMe
|
|
15
12
|
|
16
13
|
private
|
17
14
|
|
18
|
-
def options_handler(options)
|
19
|
-
handled = \
|
20
|
-
{:case_insensitive => (options[:case_insensitive] ? Regexp::IGNORECASE : nil ),
|
21
|
-
:multiline => (options[:multiline] ? Regexp::MULTILINE : nil ),
|
22
|
-
:or => (options[:or] == false ? false : true)}
|
23
|
-
|
24
|
-
return options.merge(handled)
|
25
|
-
end
|
26
|
-
|
27
15
|
def regex_me_to_search(env, options)
|
28
16
|
return EMPTYs[env] if self.strip.empty?
|
29
17
|
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
def execute_builder(env, options)
|
34
|
-
opt_handled = options_handler(options)
|
35
|
-
|
36
|
-
builder_result = builder(env, opt_handled)
|
37
|
-
|
38
|
-
case env
|
39
|
-
when :ruby
|
40
|
-
options = [opt_handled[:case_insensitive], opt_handled[:multiline]].compact
|
41
|
-
Regexp.new(builder_result, *options)
|
42
|
-
when :mysql
|
43
|
-
builder_result
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def builder(border_to, options)
|
48
|
-
string = self
|
49
|
-
|
50
|
-
lcv = options[:latin_chars_variations]
|
51
|
-
|
52
|
-
if options[:exact_phrase]
|
53
|
-
@regexp = \
|
54
|
-
string \
|
55
|
-
.strip.simple_space \
|
56
|
-
.regex_latin_ci_list \
|
57
|
-
.gsub(/\s/, WORDS_INTERVAL_PATTERN_FOR_EXACT_PHRASES) \
|
58
|
-
.regex_builder(:or => false,
|
59
|
-
:border => {:to => border_to,
|
60
|
-
:direction => :both})
|
61
|
-
else
|
62
|
-
@regexp = '('
|
63
|
-
|
64
|
-
for word in string.strip.split
|
65
|
-
if options[:exact_word]
|
66
|
-
@regexp << word.regex_builder(:border => {:to => border_to, :direction => :both}, :latin_chars_variations => lcv, :or => true)
|
67
|
-
elsif have_the_any_char?(word)
|
68
|
-
@regexp << word.regex_builder(:any => true, :border => border(border_to, word) , :latin_chars_variations => lcv, :or => true)
|
69
|
-
else
|
70
|
-
@regexp << word.regex_builder(:latin_chars_variations => lcv, :or => true)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
@regexp = (@regexp << ')').sub!(/\|\)/,')')
|
75
|
-
end
|
76
|
-
|
77
|
-
return @regexp
|
78
|
-
end
|
79
|
-
|
80
|
-
def have_the_any_char?(string)
|
81
|
-
string.include?('*')
|
82
|
-
end
|
83
|
-
|
84
|
-
def border(to, word)
|
85
|
-
direction = nil
|
86
|
-
|
87
|
-
case word
|
88
|
-
when/^\*/
|
89
|
-
direction = :right
|
90
|
-
when /\*$/
|
91
|
-
direction = :left
|
92
|
-
when /^.*\*.*$/
|
93
|
-
direction = :both
|
94
|
-
end
|
95
|
-
|
96
|
-
{:to => to, :direction => direction}
|
18
|
+
RegexMe::Helper.new(self).generate_for(env, options)
|
97
19
|
end
|
98
20
|
end
|
99
21
|
end
|
@@ -4,6 +4,31 @@ module RegexMe
|
|
4
4
|
EMPTYs = {:ruby => //, :mysql => ''}
|
5
5
|
WORDS_INTERVAL_PATTERN_FOR_EXACT_PHRASES = '[^0-9a-zA-Z\_]+'
|
6
6
|
end
|
7
|
+
|
8
|
+
module Variation
|
9
|
+
A_VARIATIONS = "(a|à|á|â|ã|ä)"
|
10
|
+
E_VARIATIONS = "(e|è|é|ê|ë)"
|
11
|
+
I_VARIATIONS = "(i|ì|í|î|ï)"
|
12
|
+
O_VARIATIONS = "(o|ò|ó|ô|õ|ö)"
|
13
|
+
U_VARIATIONS = "(u|ù|ú|û|ü)"
|
14
|
+
C_VARIATIONS = "(c|ç)"
|
15
|
+
N_VARIATIONS = "(n|ñ)"
|
16
|
+
|
17
|
+
LATIN_CHARS_VARIATIONS = [A_VARIATIONS,
|
18
|
+
E_VARIATIONS,
|
19
|
+
I_VARIATIONS,
|
20
|
+
O_VARIATIONS,
|
21
|
+
U_VARIATIONS,
|
22
|
+
C_VARIATIONS,
|
23
|
+
N_VARIATIONS]
|
24
|
+
end
|
25
|
+
|
26
|
+
module Border
|
27
|
+
BORDER_TO = {
|
28
|
+
:ruby => {:left => '\b', :right => '\b' },
|
29
|
+
:mysql => {:left => '[[:<:]]', :right => '[[:>:]]' }
|
30
|
+
}
|
31
|
+
end
|
7
32
|
end
|
8
33
|
end
|
9
34
|
|
@@ -0,0 +1,168 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require File.dirname(__FILE__) + '/configurations'
|
3
|
+
|
4
|
+
module RegexMe
|
5
|
+
class Helper
|
6
|
+
include RegexMe::Configurations::Builder
|
7
|
+
include RegexMe::Configurations::Variation
|
8
|
+
include RegexMe::Configurations::Border
|
9
|
+
|
10
|
+
attr_accessor :string
|
11
|
+
|
12
|
+
def initialize(string = "")
|
13
|
+
@string = string
|
14
|
+
end
|
15
|
+
|
16
|
+
def generate_for(env, options)
|
17
|
+
@env = env
|
18
|
+
@options = options_handler(options)
|
19
|
+
|
20
|
+
regexp = factory
|
21
|
+
|
22
|
+
case @env
|
23
|
+
when :ruby
|
24
|
+
options = [@options[:case_insensitive], @options[:multiline]].compact
|
25
|
+
return Regexp.new(regexp, *options)
|
26
|
+
when :mysql
|
27
|
+
return regexp
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def set_latin_variations(string = nil)
|
32
|
+
memo = ""
|
33
|
+
text = string || @string
|
34
|
+
|
35
|
+
text.each_char do |char|
|
36
|
+
changed = false
|
37
|
+
|
38
|
+
for variations in LATIN_CHARS_VARIATIONS
|
39
|
+
variations_pattern = Regexp.new(variations, Regexp::IGNORECASE)
|
40
|
+
|
41
|
+
if char =~ variations_pattern
|
42
|
+
changed = true
|
43
|
+
memo.insert(-1, variations)
|
44
|
+
break
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
memo.insert(-1, char) unless changed
|
49
|
+
end
|
50
|
+
|
51
|
+
return text.replace(memo)
|
52
|
+
end
|
53
|
+
|
54
|
+
def builder(text, options)
|
55
|
+
@text = text
|
56
|
+
|
57
|
+
if options[:any]
|
58
|
+
replace_the_any_char_per_any_pattern
|
59
|
+
end
|
60
|
+
|
61
|
+
if options[:latin_chars_variations]
|
62
|
+
set_latin_variations(@text)
|
63
|
+
end
|
64
|
+
|
65
|
+
if options[:border]
|
66
|
+
insert_border(options[:border])
|
67
|
+
end
|
68
|
+
|
69
|
+
if options[:or]
|
70
|
+
insert_OR
|
71
|
+
end
|
72
|
+
|
73
|
+
return @text
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def options_handler(options)
|
79
|
+
handled = \
|
80
|
+
{:case_insensitive => (options[:case_insensitive] ? Regexp::IGNORECASE : nil ),
|
81
|
+
:multiline => (options[:multiline] ? Regexp::MULTILINE : nil ),
|
82
|
+
:or => (options[:or] == false ? false : true)}
|
83
|
+
|
84
|
+
return options.merge(handled)
|
85
|
+
end
|
86
|
+
|
87
|
+
def factory
|
88
|
+
lcv = @options[:latin_chars_variations]
|
89
|
+
|
90
|
+
if @options[:exact_phrase]
|
91
|
+
regexp = \
|
92
|
+
set_latin_variations(@string.strip.simple_space) \
|
93
|
+
.gsub(/\s/, WORDS_INTERVAL_PATTERN_FOR_EXACT_PHRASES)
|
94
|
+
|
95
|
+
@regexp = \
|
96
|
+
builder(regexp, :or => false,
|
97
|
+
:border => {:to => @env,
|
98
|
+
:direction => :both})
|
99
|
+
else
|
100
|
+
@regexp = '('
|
101
|
+
|
102
|
+
for word in @string.strip.split
|
103
|
+
if @options[:exact_word]
|
104
|
+
@regexp << builder(word, :border => {:to => @env, :direction => :both},
|
105
|
+
:latin_chars_variations => lcv,
|
106
|
+
:or => true)
|
107
|
+
|
108
|
+
elsif have_the_any_char?(word)
|
109
|
+
@regexp << builder(word, :any => true,
|
110
|
+
:border => border(@env, word),
|
111
|
+
:latin_chars_variations => lcv,
|
112
|
+
:or => true)
|
113
|
+
|
114
|
+
else
|
115
|
+
@regexp << builder(word, :latin_chars_variations => lcv,
|
116
|
+
:or => true)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
@regexp = (@regexp << ')').sub!(/\|\)/,')')
|
121
|
+
end
|
122
|
+
|
123
|
+
return @regexp
|
124
|
+
end
|
125
|
+
|
126
|
+
def have_the_any_char?(string)
|
127
|
+
string.include?('*')
|
128
|
+
end
|
129
|
+
|
130
|
+
def border(to, word)
|
131
|
+
direction = nil
|
132
|
+
|
133
|
+
case word
|
134
|
+
when/^\*/
|
135
|
+
direction = :right
|
136
|
+
when /\*$/
|
137
|
+
direction = :left
|
138
|
+
when /^.*\*.*$/
|
139
|
+
direction = :both
|
140
|
+
end
|
141
|
+
|
142
|
+
{:to => to, :direction => direction}
|
143
|
+
end
|
144
|
+
|
145
|
+
def replace_the_any_char_per_any_pattern
|
146
|
+
@text.gsub!(/\*/, '.*')
|
147
|
+
end
|
148
|
+
|
149
|
+
def insert_border(options)
|
150
|
+
border = BORDER_TO[options[:to]]
|
151
|
+
|
152
|
+
case options[:direction]
|
153
|
+
when :left
|
154
|
+
@text.insert(0, border[:left])
|
155
|
+
when :right
|
156
|
+
@text.insert(-1, border[:right])
|
157
|
+
when :both
|
158
|
+
@text.insert(0, border[:left]).insert(-1, border[:right])
|
159
|
+
else
|
160
|
+
@text
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def insert_OR
|
165
|
+
@text.insert(-1, "|")
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "string_utility_belt/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "string_utility_belt"
|
7
|
+
s.version = StringUtilityBelt::VERSION
|
8
|
+
s.authors = ["Rodrigo Serradura"]
|
9
|
+
s.email = ["rserradura@gmail.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{Useful methods to handle strings}
|
12
|
+
s.description = %q{Adds new features for String objects.}
|
13
|
+
|
14
|
+
s.rubyforge_project = "string_utility_belt"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
s.add_dependency("htmlentities", "4.3.0")
|
21
|
+
end
|
@@ -1,49 +1,62 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
3
|
+
require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
|
4
4
|
|
5
5
|
class RegexMeHelperTest < Test::Unit::TestCase
|
6
6
|
|
7
|
+
def setup
|
8
|
+
@rmh = RegexMe::Helper.new
|
9
|
+
end
|
10
|
+
|
7
11
|
def test_should_create_a_string_with_the_latin_char_variations_for_the_letter_A
|
8
|
-
|
12
|
+
@rmh.string = "a"
|
13
|
+
assert_equal("(a|à|á|â|ã|ä)", @rmh.set_latin_variations)
|
9
14
|
end
|
10
15
|
|
11
16
|
def test_should_create_a_string_with_the_latin_char_variations_for_the_letter_E
|
12
|
-
|
17
|
+
@rmh.string = "e"
|
18
|
+
assert_equal("(e|è|é|ê|ë)", @rmh.set_latin_variations)
|
13
19
|
end
|
14
20
|
|
15
21
|
def test_should_create_a_string_with_the_latin_char_variations_for_the_letter_I
|
16
|
-
|
22
|
+
@rmh.string = "i"
|
23
|
+
assert_equal("(i|ì|í|î|ï)", @rmh.set_latin_variations)
|
17
24
|
end
|
18
25
|
|
19
26
|
def test_should_create_a_string_with_the_latin_char_variations_for_the_letter_O
|
20
|
-
|
27
|
+
@rmh.string = "o"
|
28
|
+
assert_equal("(o|ò|ó|ô|õ|ö)", @rmh.set_latin_variations)
|
21
29
|
end
|
22
30
|
|
23
31
|
def test_should_create_a_string_with_the_latin_char_variations_for_the_letter_U
|
24
|
-
|
32
|
+
@rmh.string = "u"
|
33
|
+
assert_equal("(u|ù|ú|û|ü)", @rmh.set_latin_variations)
|
25
34
|
end
|
26
35
|
|
27
36
|
def test_should_create_a_string_with_the_latin_char_variations_for_the_letter_C
|
28
|
-
|
37
|
+
@rmh.string = "c"
|
38
|
+
assert_equal("(c|ç)", @rmh.set_latin_variations)
|
29
39
|
end
|
30
40
|
|
31
41
|
def test_should_create_a_string_with_the_latin_char_variations_for_the_letter_N
|
32
|
-
|
42
|
+
@rmh.string = "n"
|
43
|
+
assert_equal("(n|ñ)", @rmh.set_latin_variations)
|
33
44
|
end
|
34
45
|
|
35
46
|
def test_should_replace_all_chars_that_found_in_latin_variantion_list
|
36
47
|
expected = "r(e|è|é|ê|ë)g(e|è|é|ê|ë)xp (i|ì|í|î|ï)s p(o|ò|ó|ô|õ|ö)w(e|è|é|ê|ë)rf(u|ù|ú|û|ü)ll"
|
37
48
|
|
38
|
-
|
49
|
+
@rmh.string = "regexp is powerfull"
|
50
|
+
|
51
|
+
assert_equal expected, @rmh.set_latin_variations
|
39
52
|
end
|
40
53
|
|
41
54
|
def test_should_returns_the_OR_metachar_if_or_options_was_passed
|
42
|
-
assert_equal "OR == |", "OR == "
|
55
|
+
assert_equal "OR == |", @rmh.builder("OR == ", :or => true)
|
43
56
|
end
|
44
57
|
|
45
58
|
def test_should_not_return_OR_when_the_OR_options_is_false
|
46
|
-
assert_equal "without OR", "without OR"
|
59
|
+
assert_equal "without OR", @rmh.builder("without OR", :or => false)
|
47
60
|
end
|
48
61
|
|
49
62
|
def test_should_return_the_border_metachar_in_left_when_its_required_for_ruby
|
@@ -51,7 +64,7 @@ class RegexMeHelperTest < Test::Unit::TestCase
|
|
51
64
|
expected = left + "string"
|
52
65
|
border = {:to => :ruby, :direction => :left}
|
53
66
|
|
54
|
-
assert_equal expected, "string"
|
67
|
+
assert_equal expected, @rmh.builder("string", :border => border)
|
55
68
|
end
|
56
69
|
|
57
70
|
def test_should_return_the_border_metachar_in_right_when_its_required_for_ruby
|
@@ -59,7 +72,7 @@ class RegexMeHelperTest < Test::Unit::TestCase
|
|
59
72
|
expected = "string" + right
|
60
73
|
border = {:to => :ruby, :direction => :right}
|
61
74
|
|
62
|
-
assert_equal expected, "string"
|
75
|
+
assert_equal expected, @rmh.builder("string", :border => border)
|
63
76
|
end
|
64
77
|
|
65
78
|
def test_should_return_the_border_metachar_in_left_and_right_when_its_required_for_ruby
|
@@ -68,14 +81,14 @@ class RegexMeHelperTest < Test::Unit::TestCase
|
|
68
81
|
expected = left + "string" + right
|
69
82
|
border = {:to => :ruby, :direction => :both}
|
70
83
|
|
71
|
-
assert_equal expected, "string"
|
84
|
+
assert_equal expected, @rmh.builder("string", :border => border)
|
72
85
|
end
|
73
86
|
|
74
87
|
def test_for_ruby_should_return_the_same_text_if_the_border_to_direction_is_invalid
|
75
88
|
text = "string"
|
76
89
|
border = {:to => :ruby}
|
77
90
|
|
78
|
-
assert_same text,
|
91
|
+
assert_same text, @rmh.builder(text, :border => border)
|
79
92
|
end
|
80
93
|
|
81
94
|
def test_should_return_the_border_metachar_in_left_when_its_required_for_mysql
|
@@ -83,7 +96,7 @@ class RegexMeHelperTest < Test::Unit::TestCase
|
|
83
96
|
expected = left + "string"
|
84
97
|
border = {:to => :mysql, :direction => :left}
|
85
98
|
|
86
|
-
assert_equal expected, "string"
|
99
|
+
assert_equal expected, @rmh.builder("string", :border => border)
|
87
100
|
end
|
88
101
|
|
89
102
|
def test_should_return_the_border_metachar_in_right_when_its_required_for_mysql
|
@@ -91,7 +104,7 @@ class RegexMeHelperTest < Test::Unit::TestCase
|
|
91
104
|
expected = "string" + right
|
92
105
|
border = {:to => :mysql, :direction => :right}
|
93
106
|
|
94
|
-
assert_equal expected, "string"
|
107
|
+
assert_equal expected, @rmh.builder("string", :border => border)
|
95
108
|
end
|
96
109
|
|
97
110
|
def test_should_return_the_border_metachar_in_left_and_right_when_its_required_for_mysql
|
@@ -100,18 +113,18 @@ class RegexMeHelperTest < Test::Unit::TestCase
|
|
100
113
|
expected = left + "string" + right
|
101
114
|
border = {:to => :mysql, :direction => :both}
|
102
115
|
|
103
|
-
assert_equal expected, "string"
|
116
|
+
assert_equal expected, @rmh.builder("string", :border => border)
|
104
117
|
end
|
105
118
|
|
106
119
|
def test_for_mysql_should_return_the_same_text_if_the_border_to_direction_is_invalid
|
107
120
|
text = "string"
|
108
121
|
border = {:to => :mysql, :direction => nil}
|
109
122
|
|
110
|
-
assert_same text,
|
123
|
+
assert_same text, @rmh.builder(text, :border => border)
|
111
124
|
end
|
112
125
|
|
113
126
|
def test_should_return_a_mix_of_regexp_options
|
114
127
|
expected = "f.*(o|ò|ó|ô|õ|ö)"
|
115
|
-
assert_equal expected, "f*o"
|
128
|
+
assert_equal expected, @rmh.builder("f*o", :any => true, :latin_chars_variations => true)
|
116
129
|
end
|
117
130
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: string_utility_belt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 2
|
10
|
+
version: 0.3.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Rodrigo Serradura
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-07-
|
18
|
+
date: 2011-07-13 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: htmlentities
|
@@ -55,15 +55,16 @@ files:
|
|
55
55
|
- lib/string_utility_belt/regex_me.rb
|
56
56
|
- lib/string_utility_belt/regex_me/lib/builders.rb
|
57
57
|
- lib/string_utility_belt/regex_me/lib/configurations.rb
|
58
|
-
- lib/string_utility_belt/regex_me/lib/
|
58
|
+
- lib/string_utility_belt/regex_me/lib/helper.rb
|
59
59
|
- lib/string_utility_belt/regex_me/regex_me.rb
|
60
60
|
- lib/string_utility_belt/tags.rb
|
61
61
|
- lib/string_utility_belt/version.rb
|
62
|
+
- string_utility_belt.gemspec
|
62
63
|
- test/string_utility_belt/entities_test.rb
|
63
64
|
- test/string_utility_belt/general_test.rb
|
64
65
|
- test/string_utility_belt/match_rank_test.rb
|
65
|
-
- test/string_utility_belt/
|
66
|
-
- test/string_utility_belt/
|
66
|
+
- test/string_utility_belt/regex_me/builders_test.rb
|
67
|
+
- test/string_utility_belt/regex_me/helper_test.rb
|
67
68
|
- test/string_utility_belt/tags_test.rb
|
68
69
|
- test/test_helper.rb
|
69
70
|
homepage: ""
|
@@ -1,102 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
module StringUtilityBelt
|
4
|
-
module RegexMe
|
5
|
-
module Helper
|
6
|
-
A_VARIATIONS = "(a|à|á|â|ã|ä)"
|
7
|
-
E_VARIATIONS = "(e|è|é|ê|ë)"
|
8
|
-
I_VARIATIONS = "(i|ì|í|î|ï)"
|
9
|
-
O_VARIATIONS = "(o|ò|ó|ô|õ|ö)"
|
10
|
-
U_VARIATIONS = "(u|ù|ú|û|ü)"
|
11
|
-
C_VARIATIONS = "(c|ç)"
|
12
|
-
N_VARIATIONS = "(n|ñ)"
|
13
|
-
|
14
|
-
LATIN_CHARS_VARIATIONS = [A_VARIATIONS,
|
15
|
-
E_VARIATIONS,
|
16
|
-
I_VARIATIONS,
|
17
|
-
O_VARIATIONS,
|
18
|
-
U_VARIATIONS,
|
19
|
-
C_VARIATIONS,
|
20
|
-
N_VARIATIONS]
|
21
|
-
|
22
|
-
BORDER_TO = {
|
23
|
-
:ruby => {:left => '\b', :right => '\b' },
|
24
|
-
:mysql => {:left => '[[:<:]]', :right => '[[:>:]]' }
|
25
|
-
}
|
26
|
-
|
27
|
-
def regex_latin_ci_list
|
28
|
-
memo = ""
|
29
|
-
|
30
|
-
self.each_char do |char|
|
31
|
-
changed = false
|
32
|
-
|
33
|
-
for variations in LATIN_CHARS_VARIATIONS
|
34
|
-
variations_pattern = Regexp.new(variations, Regexp::IGNORECASE)
|
35
|
-
|
36
|
-
if char =~ variations_pattern
|
37
|
-
changed = true
|
38
|
-
memo.insert(-1, variations)
|
39
|
-
break
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
memo.insert(-1, char) unless changed
|
44
|
-
end
|
45
|
-
|
46
|
-
self.replace(memo)
|
47
|
-
end
|
48
|
-
|
49
|
-
def regex_builder(options)
|
50
|
-
if options[:any]
|
51
|
-
replace_the_any_char_per_any_pattern
|
52
|
-
end
|
53
|
-
|
54
|
-
if options[:latin_chars_variations]
|
55
|
-
replace_chars_includeds_in_latin_variation_list
|
56
|
-
end
|
57
|
-
|
58
|
-
if options[:border]
|
59
|
-
insert_border(options[:border])
|
60
|
-
end
|
61
|
-
|
62
|
-
if options[:or]
|
63
|
-
insert_OR
|
64
|
-
end
|
65
|
-
|
66
|
-
return self
|
67
|
-
end
|
68
|
-
|
69
|
-
private
|
70
|
-
def replace_the_any_char_per_any_pattern
|
71
|
-
self.gsub!(/\*/, '.*')
|
72
|
-
end
|
73
|
-
|
74
|
-
def replace_chars_includeds_in_latin_variation_list
|
75
|
-
self.regex_latin_ci_list
|
76
|
-
end
|
77
|
-
|
78
|
-
def insert_border(options)
|
79
|
-
border = BORDER_TO[options[:to]]
|
80
|
-
|
81
|
-
case options[:direction]
|
82
|
-
when :left
|
83
|
-
self.insert(0, border[:left])
|
84
|
-
when :right
|
85
|
-
self.insert(-1, border[:right])
|
86
|
-
when :both
|
87
|
-
self.insert(0, border[:left]).insert(-1, border[:right])
|
88
|
-
else
|
89
|
-
self
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
def insert_OR
|
94
|
-
self.insert(-1, "|")
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
class String
|
101
|
-
include StringUtilityBelt::RegexMe::Helper
|
102
|
-
end
|