string_utility_belt 0.2.5 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,18 +1,7 @@
1
+ require 'string_utility_belt/version'
1
2
 
2
- require "general/general"
3
- require "html_and_aml/html_and_aml"
4
- require "match_rank/match_rank"
5
- require "regex_me/regex_me"
6
-
7
- module StringUtilityBelt
8
-
9
- include RegexMe::To::Search
10
- include MatchRank
11
- include General
12
- include HtmlAndAML
13
-
14
- end
15
-
16
- class String
17
- include StringUtilityBelt
18
- end
3
+ require 'string_utility_belt/regex_me_to_search'
4
+ require 'string_utility_belt/general'
5
+ require 'string_utility_belt/match_rank'
6
+ require 'string_utility_belt/tags'
7
+ require 'string_utility_belt/entities'
@@ -0,0 +1,17 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'test_helper')
2
+
3
+ class EntitiesTest < Test::Unit::TestCase
4
+
5
+ def test_should_decode_entities
6
+ assert_equal "<TAG>", "&lt;TAG&gt;".decode_entities
7
+ end
8
+
9
+ def test_should_decode_entities_and_clean_up_the_tags
10
+ assert_equal "", "&lt;TAG&gt;".decode_entities_and_cleaner
11
+ end
12
+
13
+ def test_should_should_encode_anything_that_can_be_transformed_into_an_entity
14
+ assert_equal "&lt;TAG&gt;", "<TAG>".generate_entities
15
+ end
16
+
17
+ end
@@ -0,0 +1,73 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'test_helper')
2
+
3
+ class GeneralTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @spaces_and_some_text = " \n \r \t\r\n foo \t bar "
7
+
8
+ @text = %q{Texto de teste!
9
+ Esta classe deverá fazer a busca por uma ou um grupo de palavras
10
+ em um texto e retornar um rank com a quantidade identificada.}
11
+ end
12
+
13
+ def test_should_return_a_single_word_in_array
14
+ assert_equal %w{Hello}, "Hello".words
15
+ end
16
+
17
+ def test_should_return_all_words_as_element_in_array
18
+ assert_equal ["foo-foo", "bar's", "bar"], "foo-foo, bar's. bar!".words
19
+ end
20
+
21
+ def test_should_replace_a_sequence_of_space_per_a_unique_space
22
+ assert_equal " foo bar ", @spaces_and_some_text.simple_space
23
+ end
24
+
25
+ def test_should_replace_the_left_spaces_by_only_one
26
+ assert_equal ' \o/!'.simple_space, ' \o/!'
27
+ end
28
+
29
+ def test_should_replace_the_right_spaces_by_only_one
30
+ assert_equal '\o/! '.simple_space, '\o/! '
31
+ end
32
+
33
+ def test_should_be_the_same_result_after_calling_the_method
34
+ string = @spaces_and_some_text.dup
35
+ assert_equal string, " \n \r \t\r\n foo \t bar "
36
+ end
37
+
38
+ def test_should_return_the_same_text_if_nothing_changed
39
+ assert_equal "Hello", "Hello".simple_space
40
+ end
41
+
42
+
43
+ #describe #simple_space!
44
+ def test_should_not_generate_a_new_object
45
+ @spaces_and_some_text.simple_space!
46
+
47
+ assert_not_same ' foo bar ', @spaces_and_some_text
48
+ end
49
+
50
+ def test_should_return_nil_if_nothing_changed
51
+ assert_nil "Hello".simple_space!
52
+ end
53
+
54
+
55
+ # describe #have_this_words?
56
+ def test_should_be_true_if_find_all_of_the_text_fragments
57
+ assert @text.have_this_words?("busca ran".words)
58
+ end
59
+
60
+ def test_should_be_false_because_not_exists_the_ran_word
61
+ assert_not_equal true, @text.have_this_words?("ran busca".words, true)
62
+ end
63
+
64
+ # describe #not_have_this_words?
65
+ def test_should_be_true_if_not_find_all_of_the_searched_words
66
+ assert_equal true, @text.not_have_this_words?("ran busc".words, true)
67
+ end
68
+
69
+ def test_should_match_even_if_there_are_characters_variations
70
+ text = "São páúlõ is a very nice city!"
71
+ assert text.have_this_words?("sao paulo".words, :latin_chars_variations => true)
72
+ end
73
+ end
@@ -0,0 +1,64 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'test_helper')
2
+
3
+ class MatchRankTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @sequence = "a aa aaa aaaa aaaaa b bb bbb bbbb"
7
+ end
8
+
9
+ def test_should_return_a_hash_with_the_results_of_exact_and_inexact_matches
10
+ analysis = "".total_frequency_by('test')
11
+ expected = {:exact => 0, :matched => 0}
12
+ assert_equal(expected, analysis)
13
+ end
14
+
15
+ def test_should_return_how_many_times_a_text_pattern_was_matched
16
+ analysis = @sequence.total_frequency_by('bb')
17
+ matched = analysis[:matched]
18
+ assert_equal 3, matched
19
+ end
20
+
21
+ def test_should_return_how_many_exact_matches
22
+ analysis = @sequence.total_frequency_by('bb')
23
+ exact_matches = analysis[:exact]
24
+ assert_equal(1, exact_matches)
25
+ end
26
+
27
+ def test_should_return_an_analysis_of_all_received_words
28
+ analysis = @sequence.total_frequency_by('aa bb'.words)
29
+ expected = {:matched=> 7, :exact=> 2}
30
+ assert_equal(expected, analysis)
31
+ end
32
+
33
+ def test_should_return_the_analysis_of_total_frequency_by_method_and_precision
34
+ analysis = @sequence.match_and_score_by('aa bb'.words)
35
+ expected = {:exact=>2.0, :matched=>7.0, :precision=>28.5714285714286}
36
+ assert_in_delta(expected[:precision], analysis[:precision], 0.00001)
37
+ end
38
+
39
+
40
+ def test_should_return_a_hash_with_the_results_for_exact_and_inexact_per_word_criteria
41
+ analysis = "".words_frequency_by('test')
42
+ expected = {:exact => {}, :matched => {}}
43
+ assert_equal(expected, analysis)
44
+ end
45
+
46
+ def test_should_return_how_many_times_a_text_pattern_was_matched_per_word_criteria
47
+ analysis = @sequence.words_frequency_by('aa')
48
+ matched = analysis[:matched]
49
+ assert_equal({'aa' => 4}, matched)
50
+ end
51
+
52
+ def test_should_return_how_many_exact_matches_per_word_criteria
53
+ analysis = @sequence.words_frequency_by('aa')
54
+ exact_matches = analysis[:exact]
55
+ assert_equal({'aa' => 1}, exact_matches)
56
+ end
57
+
58
+ def test_should_return_an_analysis_of_all_received_words_per_words_criteria
59
+ analysis = @sequence.words_frequency_by('aa bb'.words)
60
+ expected = {:matched=>{"bb"=>3, "aa"=>4}, :exact=>{"bb"=>1, "aa"=>1}}
61
+ assert_equal(expected, analysis)
62
+ end
63
+
64
+ end
@@ -0,0 +1,117 @@
1
+ # coding: utf-8
2
+
3
+ require File.join(File.dirname(__FILE__), '..', 'test_helper')
4
+
5
+ class RegexMeHelperTest < Test::Unit::TestCase
6
+
7
+ def test_should_create_a_string_with_the_latin_char_variations_for_the_letter_A
8
+ assert_equal("(a|à|á|â|ã|ä)", "a".regex_latin_ci_list)
9
+ end
10
+
11
+ def test_should_create_a_string_with_the_latin_char_variations_for_the_letter_E
12
+ assert_equal("(e|è|é|ê|ë)", "e".regex_latin_ci_list)
13
+ end
14
+
15
+ def test_should_create_a_string_with_the_latin_char_variations_for_the_letter_I
16
+ assert_equal("(i|ì|í|î|ï)", "i".regex_latin_ci_list)
17
+ end
18
+
19
+ def test_should_create_a_string_with_the_latin_char_variations_for_the_letter_O
20
+ assert_equal("(o|ò|ó|ô|õ|ö)", "o".regex_latin_ci_list)
21
+ end
22
+
23
+ def test_should_create_a_string_with_the_latin_char_variations_for_the_letter_U
24
+ assert_equal("(u|ù|ú|û|ü)", "u".regex_latin_ci_list)
25
+ end
26
+
27
+ def test_should_create_a_string_with_the_latin_char_variations_for_the_letter_C
28
+ assert_equal("(c|ç)", "c".regex_latin_ci_list)
29
+ end
30
+
31
+ def test_should_create_a_string_with_the_latin_char_variations_for_the_letter_N
32
+ assert_equal("(n|ñ)", "n".regex_latin_ci_list)
33
+ end
34
+
35
+ def test_should_replace_all_chars_that_found_in_latin_variantion_list
36
+ expected = "r(e|è|é|ê|ë)g(e|è|é|ê|ë)xp (i|ì|í|î|ï)s p(o|ò|ó|ô|õ|ö)w(e|è|é|ê|ë)rf(u|ù|ú|û|ü)ll"
37
+
38
+ assert_equal expected, "regexp is powerfull".regex_latin_ci_list
39
+ end
40
+
41
+ def test_should_returns_the_OR_metachar_if_or_options_was_passed
42
+ assert_equal "OR == |", "OR == ".regex_builder(:or => true)
43
+ end
44
+
45
+ def test_should_not_return_OR_when_the_OR_options_is_false
46
+ assert_equal "without OR", "without OR".regex_builder(:or => false)
47
+ end
48
+
49
+ def test_should_return_the_border_metachar_in_left_when_its_required_for_ruby
50
+ left = '\b'
51
+ expected = left + "string"
52
+ border = {:to => :ruby, :direction => :left}
53
+
54
+ assert_equal expected, "string".regex_builder(:border => border)
55
+ end
56
+
57
+ def test_should_return_the_border_metachar_in_right_when_its_required_for_ruby
58
+ right = '\b'
59
+ expected = "string" + right
60
+ border = {:to => :ruby, :direction => :right}
61
+
62
+ assert_equal expected, "string".regex_builder(:border => border)
63
+ end
64
+
65
+ def test_should_return_the_border_metachar_in_left_and_right_when_its_required_for_ruby
66
+ left = '\b'
67
+ right = '\b'
68
+ expected = left + "string" + right
69
+ border = {:to => :ruby, :direction => :both}
70
+
71
+ assert_equal expected, "string".regex_builder(:border => border)
72
+ end
73
+
74
+ def test_for_ruby_should_return_the_same_text_if_the_border_to_direction_is_invalid
75
+ text = "string"
76
+ border = {:to => :ruby}
77
+
78
+ assert_same text, text.regex_builder(:border => border)
79
+ end
80
+
81
+ def test_should_return_the_border_metachar_in_left_when_its_required_for_mysql
82
+ left = '[[:<:]]'
83
+ expected = left + "string"
84
+ border = {:to => :mysql, :direction => :left}
85
+
86
+ assert_equal expected, "string".regex_builder(:border => border)
87
+ end
88
+
89
+ def test_should_return_the_border_metachar_in_right_when_its_required_for_mysql
90
+ right = '[[:>:]]'
91
+ expected = "string" + right
92
+ border = {:to => :mysql, :direction => :right}
93
+
94
+ assert_equal expected, "string".regex_builder(:border => border)
95
+ end
96
+
97
+ def test_should_return_the_border_metachar_in_left_and_right_when_its_required_for_mysql
98
+ left = '[[:<:]]'
99
+ right = '[[:>:]]'
100
+ expected = left + "string" + right
101
+ border = {:to => :mysql, :direction => :both}
102
+
103
+ assert_equal expected, "string".regex_builder(:border => border)
104
+ end
105
+
106
+ def test_for_mysql_should_return_the_same_text_if_the_border_to_direction_is_invalid
107
+ text = "string"
108
+ border = {:to => :mysql, :direction => nil}
109
+
110
+ assert_same text, text.regex_builder(:border => border)
111
+ end
112
+
113
+ def test_should_return_a_mix_of_regexp_options
114
+ expected = "f.*(o|ò|ó|ô|õ|ö)"
115
+ assert_equal expected, "f*o".regex_builder(:any => true, :latin_chars_variations => true)
116
+ end
117
+ end
@@ -0,0 +1,106 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'test_helper')
2
+
3
+ class RegexMeToSearchTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @text = "ruby frameworks is so cool"
7
+ end
8
+
9
+ def test_should_return_a_regex_for_ruby
10
+ assert_equal(/(foo|bar)/, "foo bar".regex_me_to_search_ruby)
11
+ end
12
+
13
+ def test_should_return_a_regex_for_mysql
14
+ assert_equal("(foo|bar)", "foo bar".regex_me_to_search_mysql)
15
+ end
16
+
17
+ def test_should_match_the_phrase_for_ruby
18
+ regexp = "ruby frameworks".regex_me_to_search_ruby(:exact_phrase => true)
19
+ assert_match(regexp, @text)
20
+ end
21
+
22
+ def test_should_match_independent_of_the_non_word_chars_between_the_words_phrase_for_ruby
23
+ text = "ruby - on - rails"
24
+ regexp = "ruby on rails".regex_me_to_search_ruby(:exact_phrase => true)
25
+ assert_match(regexp, text)
26
+ end
27
+
28
+ def test_should_match_the_text_fragments
29
+ regexp = "rub ool".regex_me_to_search_ruby(:exact_word => false)
30
+ assert_match(regexp, @text)
31
+ end
32
+
33
+ def test_should_not_match_the_text_fragments
34
+ regexp = "rub ool".regex_me_to_search_ruby(:exact_word => true)
35
+ assert_no_match(regexp, @text)
36
+ end
37
+
38
+ def test_should_just_match_exact_word
39
+ regexp = "ruby cool".regex_me_to_search_ruby(:exact_word => true)
40
+ assert_match(regexp, @text)
41
+ end
42
+
43
+ def test_should_match_because_the_word_finish_with_the_letter_A
44
+ text = "sinatra"
45
+ regexp = "*a".regex_me_to_search_ruby
46
+ assert_match(regexp, text)
47
+ end
48
+
49
+ def test_should_match_because_the_word_begin_with_the_letter_A
50
+ text = "assertions"
51
+ regexp = "a*".regex_me_to_search_ruby
52
+ assert_match(regexp, text)
53
+ end
54
+
55
+ def test_should_match_because_the_word_contain_all_required_letters
56
+ text = "sinatraaa"
57
+ regexp = "s*n*t*a".regex_me_to_search_ruby
58
+ assert_match(regexp, text)
59
+ end
60
+
61
+ def test_should_return_the_matched_sentencest
62
+ sentences = ['I like banana!', 'Do you like bonono?', 'foo bar', 'Regexp is cool']
63
+ regexp = "b*n*n* *l".regex_me_to_search_ruby
64
+
65
+ expected_sentences = ['I like banana!', 'Do you like bonono?', 'Regexp is cool']
66
+ matched_sentences = sentences.select { |sentence| sentence =~ regexp }
67
+ assert_equal(expected_sentences, matched_sentences)
68
+ end
69
+
70
+ def test_should_not_match_when_case_is_sensitive
71
+ text = "sinatra"
72
+ regexp = "SINATRA".regex_me_to_search_ruby(:case_insensitive => false)
73
+ assert_no_match(regexp, text)
74
+ end
75
+
76
+ def test_should_match_when_case_is_insensitive
77
+ text = "sinatra"
78
+ regexp = "SINATRA".regex_me_to_search_ruby(:case_insensitive => true)
79
+ assert_match(regexp, text)
80
+ end
81
+
82
+ def test_should_not_match_when_the_text_have_multilines
83
+ text = "d\na"
84
+ regexp = "d*a".regex_me_to_search_ruby(:multiline => false)
85
+ assert_no_match(regexp, text)
86
+ end
87
+
88
+ def test_should_match_when_the_text_have_multilines
89
+ text = "d\na"
90
+ regexp = "d*a".regex_me_to_search_ruby(:multiline => true)
91
+ assert_match(regexp, text)
92
+ end
93
+
94
+ def test_should_return_a_regex_to_mysql_with_borders
95
+ expected = "([[:<:]]foo[[:>:]])"
96
+ regexp = "foo".regex_me_to_search_mysql(:exact_word => true)
97
+ assert_equal(expected, regexp)
98
+ end
99
+
100
+ def test_should_return_a_exact_phrase_regex_to_mysql
101
+ expected = '[[:<:]]f(o|ò|ó|ô|õ|ö)(o|ò|ó|ô|õ|ö)[^0-9a-zA-Z\_]+b(a|à|á|â|ã|ä)r[[:>:]]'
102
+ regexp = "foo bar".regex_me_to_search_mysql(:exact_phrase => true)
103
+ assert_equal(expected, regexp)
104
+ end
105
+
106
+ end
@@ -0,0 +1,25 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'test_helper')
2
+
3
+ class TagsTest < Test::Unit::TestCase
4
+
5
+ def test_should_cleaner_the_html_tag
6
+ assert_equal "", "<html>".html_tag_cleaner
7
+ end
8
+
9
+ def test_should_not_clean_up_if_is_not_a_html_tag
10
+ assert_equal "<serradura>", "<serradura>".html_tag_cleaner
11
+ end
12
+
13
+ def test_should_clean_up_all_tags_and_just_keep_the_text
14
+ assert_equal "Serradura Labs", "<a href='http://blog.serraduralabs.com'>Serradura Labs</a>".html_tag_cleaner
15
+ end
16
+
17
+ def test_should_clean_up_anything_resembling_a_tag
18
+ assert_equal "", "<a></b></serradura><></>".tag_cleaner
19
+ end
20
+
21
+ def test_should_only_clean_up_complete_tags_patterns
22
+ assert_equal "<\o/>", "<a><</b>\</serradura>o<>/></>".tag_cleaner
23
+ end
24
+
25
+ end
@@ -0,0 +1,5 @@
1
+
2
+ require 'rubygems' if RUBY_VERSION < "1.9"
3
+ require 'test/unit'
4
+ require 'ruby-debug'
5
+ require 'string_utility_belt'
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: 29
5
- prerelease: false
4
+ hash: 19
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 5
10
- version: 0.2.5
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Rodrigo Serradura
@@ -15,12 +15,12 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-09-28 00:00:00 -03:00
19
- default_executable:
18
+ date: 2011-07-07 00:00:00 Z
20
19
  dependencies: []
21
20
 
22
- description: Useful methods for strings!
21
+ description: Adiciona novas funcionalidades para strings
23
22
  email:
23
+ - rserradura@gmail.com
24
24
  executables: []
25
25
 
26
26
  extensions: []
@@ -28,19 +28,27 @@ extensions: []
28
28
  extra_rdoc_files: []
29
29
 
30
30
  files:
31
- - lib/html_and_aml/helpers/tags.rb
32
- - lib/html_and_aml/helpers/entities.rb
33
- - lib/html_and_aml/html_and_aml.rb
31
+ - .gitignore
32
+ - Gemfile
33
+ - Gemfile.lock
34
+ - README.markdown
35
+ - Rakefile
34
36
  - lib/string_utility_belt.rb
35
- - lib/regex_me/regex_me.rb
36
- - lib/regex_me/helpers/string/regex_me.rb
37
- - lib/general/general.rb
38
- - lib/match_rank/match_rank.rb
37
+ - lib/string_utility_belt/entities.rb
38
+ - lib/string_utility_belt/general.rb
39
+ - lib/string_utility_belt/match_rank.rb
40
+ - lib/string_utility_belt/regex_me_helper.rb
41
+ - lib/string_utility_belt/regex_me_to_search.rb
42
+ - lib/string_utility_belt/tags.rb
39
43
  - lib/string_utility_belt/version.rb
40
- - Rakefile
41
- - string_utility_belt.gemspec
42
- has_rdoc: true
43
- homepage:
44
+ - test/string_utility_belt/entities_test.rb
45
+ - test/string_utility_belt/general_test.rb
46
+ - test/string_utility_belt/match_rank_test.rb
47
+ - test/string_utility_belt/regex_me_helper_test.rb
48
+ - test/string_utility_belt/regex_me_to_search_test.rb
49
+ - test/string_utility_belt/tags_test.rb
50
+ - test/test_helper.rb
51
+ homepage: ""
44
52
  licenses: []
45
53
 
46
54
  post_install_message:
@@ -68,10 +76,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
76
  version: "0"
69
77
  requirements: []
70
78
 
71
- rubyforge_project:
72
- rubygems_version: 1.3.7
79
+ rubyforge_project: string_utility_belt
80
+ rubygems_version: 1.8.2
73
81
  signing_key:
74
82
  specification_version: 3
75
- summary: Useful methods for strings!
83
+ summary: Metodos uteis para strings
76
84
  test_files: []
77
85
 
@@ -1,36 +0,0 @@
1
-
2
- module General
3
-
4
- def words
5
- self.scan(/\w[\w\'\-]*/)
6
- end
7
-
8
- def simple_space
9
- self.strip.gsub(/\s+/, " ")
10
- end
11
-
12
- def simple_space!
13
- self.strip.gsub!(/\s+/, " ")
14
- end
15
-
16
- def have_this_words? words_to_match, options = {}
17
- helper_have_this_words? words_to_match, options do |string, word, options|
18
- return false if (string !~ word.regex_me_to_search_ruby(:exact_word => options[:exact_word], :case_insensitive => options[:case_insensitive], :latin_chars_variation => options[:latin_chars_variation]))
19
- end
20
- end
21
-
22
- def not_have_this_words? words_to_match, options = {}
23
- helper_have_this_words? words_to_match, options do |string, word, options|
24
- return false if (string =~ word.regex_me_to_search_ruby(:exact_word => options[:exact_word], :case_insensitive => options[:case_insensitive], :latin_chars_variation => options[:latin_chars_variation]))
25
- end
26
- end
27
-
28
- private
29
- def helper_have_this_words? words_to_match, options = {}
30
- for word in words_to_match
31
- yield self, word, options
32
- end
33
- return true
34
- end
35
-
36
- end
@@ -1,16 +0,0 @@
1
-
2
- require "rubygems" if RUBY_VERSION < "1.9"
3
- require "htmlentities"
4
-
5
- module Entities
6
-
7
- def decode_entities
8
- coder = HTMLEntities.new
9
- coder.decode(self)
10
- end
11
-
12
- def decode_entities_and_cleaner
13
- decode_entities.tag_cleaner
14
- end
15
-
16
- end
@@ -1,13 +0,0 @@
1
-
2
- module Tags
3
-
4
- def tag_cleaner
5
- self.gsub(/<\/?[^>]*>/, "")
6
- end
7
-
8
- def html_tag_cleaner
9
- self.gsub(/<\/?(a|p|abbr|acronym|address|applet|area|b|base|basefont|bdo|big|blockquote|body|br|button|caption|center|cite|code|col|colgroup|dd|del|dfn|dir|div|dl|dt|em|fieldset|font|form|frame|frameset|h6|head|hr|html|i|iframe|img|input|ins|isindex|kbd|label|legend|li|link|map|menu|meta|noframes|noscript|object)[^>]+??>/im, "")
10
- # TAGs disponíveis até 09/2010 - FONTE: http://www.w3schools.com/tags/default.asp
11
- end
12
-
13
- end
@@ -1,10 +0,0 @@
1
-
2
- require File.join(File.dirname(__FILE__), "helpers/entities")
3
- require File.join(File.dirname(__FILE__), "helpers/tags")
4
-
5
- module HtmlAndAML # == HTML And Another Markup Language
6
-
7
- include Entities
8
- include Tags
9
-
10
- end
@@ -1,73 +0,0 @@
1
-
2
- class String
3
-
4
- LATIN_CHARS_VARIATION = ["[aàáâãä]", "[eèéêë]", "[iìíîï]", "[oòóôõö]", "[uùúûü]", "[cçÇ]", "[ñÑ]"]
5
-
6
- def regex_latin_ci_list
7
-
8
- memo = ""
9
- self.each_char do |char|
10
-
11
- variation_found = false
12
-
13
- for char_variation in LATIN_CHARS_VARIATION
14
-
15
- match = eval("/#{char_variation}/")
16
-
17
- if (char =~ match)
18
- memo.insert(-1, char_variation)
19
- variation_found = true
20
- break
21
- end
22
- end
23
-
24
- memo.insert(-1, char) unless variation_found
25
- end
26
-
27
- self.replace(memo)
28
- end
29
-
30
- def regex_builder options={}
31
-
32
- self.gsub!(/\*/,'.*') if options[:any]
33
-
34
- regex_latin_ci_list if options[:latin_chars_variation]
35
-
36
- border_me(options[:border][:to],
37
- options[:border][:direction]) if options[:border]
38
-
39
- insert_OR_in_right unless options[:delete_or]
40
-
41
- self
42
- end
43
-
44
- private
45
- def insert_OR_in_right
46
- self.insert(-1, "|")
47
- end
48
-
49
- def border_me border_to, direction
50
- border = define_border_metachar(border_to)
51
-
52
- case direction
53
- when :left
54
- self.insert(0, border[:left])
55
- when :right
56
- self.insert(-1, border[:right])
57
- when :both
58
- self.insert(0, border[:left]).insert(-1, border[:right])
59
- when nil
60
- self
61
- end
62
- end
63
-
64
- def define_border_metachar border_to
65
- case border_to
66
- when :ruby
67
- {:left => '\b' , :right => '\b'}
68
- when :mysql
69
- {:left => '[[:<:]]', :right => '[[:>:]]'}
70
- end
71
- end
72
-
73
- end