Class: StTools::String
- Inherits:
-
Object
- Object
- StTools::String
- Defined in:
- lib/st_tools/string.rb
Class Method Summary collapse
-
.caps(text) ⇒ String
Метод делает заглавной первую букву в словах, разделенных пробелами или дефисом.
-
.delat(text) ⇒ String
Метод заменяет в исходной строке английские символы, похожие на русские - на соответстующие русские символы.
-
.downcase(text) ⇒ String
Метод преобразует строку в нижний регистр с одновременной заменой буквы ‘ё’ на ‘е’.
-
.hide(text) ⇒ String
Метод позволяет показывать клиенту строку в неполном объеме, с закрытием части символов в строке звездочкой.
-
.normalize(text) ⇒ String
Метод проводит нормализацию строки для последующей машиной обработки.
-
.split(text, separator, opts = {}) ⇒ Array
Метод аналогичен обычной функции split, однако дополнительно может выполнять следующие действия: - strip каждого элемента - normalize соответсвующей функцией (#normalize) - сортировка в прямом порядке - удаление дубликотов.
-
.to_bool(text) ⇒ Boolean
Метод конвертирует строку в тип boolean.
-
.to_range(text, opts = {}) ⇒ Array
Метод возвращает полный массив Array [1, 4, 5, 6, 7, 456] для строк вида ‘1, 4, 5-7, 456’.
-
.translit(text) ⇒ String
Метод преобразует текст в транслит.
-
.upcase(text) ⇒ String
Метод преобразует строку в верхний регистр с одновременной заменой буквы ‘Ё’ на ‘Е’.
Class Method Details
.caps(text) ⇒ String
Метод делает заглавной первую букву в словах, разделенных пробелами или дефисом.
170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/st_tools/string.rb', line 170 def self.caps(text) return nil if text.nil? str = self.downcase(text).split(/[\-\s]/).map { |x| self.upcase(x[0]) + x[1,x.length] } str = str.join(' ') for i in 0..str.length str[i] = '-' if (text.to_s[i,1] == '-') end return str rescue return text end |
.delat(text) ⇒ String
Метод заменяет в исходной строке английские символы, похожие на русские - на соответстующие русские символы. То есть это похоже на ситуацию, когда Google меняет слово, случайно написанное английскими буквами - на русское слово. Одновременно буква ‘ё’ меняется на ‘е’.
58 59 60 61 |
# File 'lib/st_tools/string.rb', line 58 def self.delat(text) return nil if text.nil? return text.tr('ёЁEeHCcTOoPpAHKXxBM', 'еЕЕеНСсТОоРрАНКХхВМ') end |
.downcase(text) ⇒ String
Метод преобразует строку в нижний регистр с одновременной заменой буквы ‘ё’ на ‘е’. Метод имеет примерно в два раза более высокую производительности по сравнению с традиционным .mb_chars.downcase.to_s, но имеет ограничение - работа только с русскими и английскими строками
31 32 33 34 35 |
# File 'lib/st_tools/string.rb', line 31 def self.downcase(text) return nil if text.nil? return text.tr('QWERTYUIOPASDFGHJKLZXCVBNMАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', 'qwertyuiopasdfghjklzxcvbnmабвгдеёжзийклмнопрстуфхцчшщъыьэюя').gsub('ё', 'е') end |
.hide(text) ⇒ String
Метод позволяет показывать клиенту строку в неполном объеме, с закрытием части символов в строке звездочкой. При этом число звездочек в строке определеяется ее длиной. Чем строка дилинее - тем больше в ней звездочек.
89 90 91 92 93 94 95 96 97 |
# File 'lib/st_tools/string.rb', line 89 def self.hide(text) return nil if text.nil? len = text.length - 3 0.upto((len/4).to_i) do pos = rand(len) text[pos,1] = '*' end return text end |
.normalize(text) ⇒ String
Метод проводит нормализацию строки для последующей машиной обработки. При этом осуществляется:
-
убирается букву ‘ё’
-
перевод строку в нижний регистр
-
замена случайно введенных английских букв на русские
-
убираются лидирующие и завершающие пробелы
-
в строке удаляются повторные пробелы между словами
74 75 76 77 |
# File 'lib/st_tools/string.rb', line 74 def self.normalize(text) return nil if text.nil? return self.downcase(self.delat(text)).strip.gsub(/\s{1,100}/, ' ') end |
.split(text, separator, opts = {}) ⇒ Array
Метод аналогичен обычной функции split, однако дополнительно может выполнять следующие действия:
-
strip каждого элемента
-
normalize соответсвующей функцией (#normalize)
-
сортировка в прямом порядке
-
удаление дубликотов
117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/st_tools/string.rb', line 117 def self.split(text, separator, opts = {}) return [] if text.nil? out = text.split(separator) out.map! { |x| x.strip } out.map! { |x| self.normalize(x) } if opts[:normalize] out.uniq! if opts[:uniq] out.sort! if opts[:sort] return out rescue return [] end |
.to_bool(text) ⇒ Boolean
Метод конвертирует строку в тип boolean
198 199 200 201 202 |
# File 'lib/st_tools/string.rb', line 198 def self.to_bool(text) return false if text.nil? return true if ['true', 'on', '1', 'да', 'yes'].include?(self.downcase(text.to_s)) false end |
.to_range(text, opts = {}) ⇒ Array
Метод возвращает полный массив Array [1, 4, 5, 6, 7, 456] для строк вида ‘1, 4, 5-7, 456’. Дополнительно осуществляется:
-
сортировка в прямом порядке
-
удаление дубликотов
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/st_tools/string.rb', line 144 def self.to_range(text, opts = {}) return [] if text.nil? out = Array.new tmp = self.split(text, ',') tmp.each do |one| if one.match(/\-/) d = one.split(/\-/) out += Range.new(d.first.to_i, d.last.to_i).to_a else out << one.to_i end end out.uniq! if opts[:uniq] out.sort! if opts[:sort] return out end |
.translit(text) ⇒ String
Метод преобразует текст в транслит
10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/st_tools/string.rb', line 10 def self.translit(text) return nil if text.nil? translited = text.tr('абвгдеёзийклмнопрстуфхэыь', 'abvgdeezijklmnoprstufhey\'\'') translited = translited.tr('АБВГДЕЁЗИЙКЛМНОПРСТУФХЭЫЬ', 'ABVGDEEZIJKLMNOPRSTUFHEY\'\'') translited = translited.gsub(/[жцчшщъюяЖЦЧШЩЪЮЯ]/, 'ж' => 'zh', 'ц' => 'ts', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ъ' => '', 'ю' => 'ju', 'я' => 'ja', 'Ж' => 'Zh', 'Ц' => 'Ts', 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sch', 'Ъ' => '', 'Ю' => 'Ju', 'Я' => 'Ja') translited.gsub!('\'', '') return translited end |
.upcase(text) ⇒ String
Метод преобразует строку в верхний регистр с одновременной заменой буквы ‘Ё’ на ‘Е’. Метод имеет примерно в два раза более высокую производительности по сравнению с традиционным .mb_chars.downcase.to_s, но имеет ограничение - работа только с русскими и английскими строками
45 46 47 48 49 |
# File 'lib/st_tools/string.rb', line 45 def self.upcase(text) return nil if text.nil? return text.tr('qwertyuiopasdfghjklzxcvbnmабвгдеёжзийклмнопрстуфхцчшщъыьэюя', 'QWERTYUIOPASDFGHJKLZXCVBNMАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ').gsub('Ё', 'Е') end |