st_tools 0.3.2 → 0.3.3
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.
- checksums.yaml +4 -4
- data/README.md +20 -17
- data/lib/modules/string.rb +1 -1
- data/lib/st_tools/common.rb +3 -3
- data/lib/st_tools/fias.rb +47 -23
- data/lib/st_tools/human.rb +43 -14
- data/lib/st_tools/progress_bar.rb +12 -3
- data/lib/st_tools/string.rb +63 -28
- data/lib/st_tools/system.rb +4 -1
- data/lib/st_tools/version.rb +1 -1
- data/lib/st_tools.rb +8 -0
- data/test/string_lib_spec.rb +1 -1
- metadata +8 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9636bb4e4a7eca384e243785b78add9c259fee4
|
4
|
+
data.tar.gz: c336f6ba172b1df7cf029f0ab62704e473e02aef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 50aaa34a9388dffdf0bc3459bfbdefa5240ab9e1437af0395871e4967119b1fb1a633d1dd4feccb05c56d060f69265785f70c889f1d179b6e7fd7396dd606180
|
7
|
+
data.tar.gz: 046ff39698e836e0f6753ccd3e80520c42151b647d0daa6dfa3efc7ffa311e816c809d9c9aa6cc6cfc66d3fc6aec5de62f3b17e7f72de97a1aba6b76cd89263e
|
data/README.md
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
# StTools
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
- управление прогресс-баром CLI-приложений
|
3
|
+
Библиотека StTools предназначена для поддержки CLI- и Rails-приложений. Она обеспечивает
|
4
|
+
различное преобразование строк с учетом русского языка, формирование человеко-удобного представления времени и чисел,
|
5
|
+
получения разных системных характеристик CLI-приложений (память, размер экрана терминала),
|
6
|
+
управление прогресс-баром CLI-приложений.
|
8
7
|
|
9
8
|
## Установка
|
10
9
|
|
@@ -14,11 +13,11 @@
|
|
14
13
|
gem 'st_tools'
|
15
14
|
```
|
16
15
|
|
17
|
-
|
16
|
+
Установить гем cредствами Bundler:
|
18
17
|
|
19
18
|
$ bundle
|
20
19
|
|
21
|
-
Или
|
20
|
+
Или установить его отдельно:
|
22
21
|
|
23
22
|
$ gem install st_tools
|
24
23
|
|
@@ -30,8 +29,8 @@ gem 'st_tools'
|
|
30
29
|
## Использование
|
31
30
|
|
32
31
|
Часть методов библиотеки поддерживают русскую и английскую локализацию.
|
33
|
-
Поскольку все методы StTools могут вызываться без создания класса -
|
34
|
-
Поэтому перед работой библиотеки рекомендуется вызвать StTools::Setup.setup(:ru или :en)
|
32
|
+
Поскольку все методы StTools могут вызываться без создания экземпляра класса - вызов конструктура класса отсутствует.
|
33
|
+
Поэтому перед работой библиотеки рекомендуется вызвать StTools::Setup.setup(:ru или :en) для загрузки файлов локализации.
|
35
34
|
|
36
35
|
### StTools::Human
|
37
36
|
|
@@ -152,21 +151,25 @@ StTools::String.caps('санКТ-петерБург') # => "Сан
|
|
152
151
|
```
|
153
152
|
|
154
153
|
Для реализации деморежимов различных приложений иногда надо скрыть реальный результат.
|
155
|
-
Для это можно использовать метод
|
154
|
+
Для это можно использовать метод hide
|
156
155
|
|
157
156
|
```ruby
|
158
|
-
StTools::String.
|
157
|
+
StTools::String.hide('Краснодар') # => "Кра*но*ар"
|
159
158
|
```
|
160
159
|
|
161
160
|
В Ruby отсутствует метод перевода строки пользователя в тип Boolean.
|
162
161
|
|
163
162
|
```ruby
|
164
|
-
StTools::String.to_bool(
|
165
|
-
StTools::String.to_bool(
|
166
|
-
StTools::String.to_bool(
|
167
|
-
StTools::String.to_bool(
|
168
|
-
StTools::String.to_bool(
|
169
|
-
StTools::String.to_bool(
|
163
|
+
StTools::String.to_bool("True") # => true
|
164
|
+
StTools::String.to_bool("trUE") # => true
|
165
|
+
StTools::String.to_bool("on") # => true
|
166
|
+
StTools::String.to_bool("1") # => true
|
167
|
+
StTools::String.to_bool("Да") # => true
|
168
|
+
StTools::String.to_bool("Yes") # => true
|
169
|
+
StTools::String.to_bool("false") # => false
|
170
|
+
StTools::String.to_bool("fALse") # => false
|
171
|
+
StTools::String.to_bool("oFF") # => false
|
172
|
+
StTools::String.to_bool("0") # => false
|
170
173
|
```
|
171
174
|
|
172
175
|
Если пользователь введет в качестве входного параметра перечисление, следующий метод разобъет его на токены,
|
data/lib/modules/string.rb
CHANGED
@@ -51,7 +51,7 @@ module StTools
|
|
51
51
|
# @example Сокрытие части строки
|
52
52
|
# "Владимир".hide #=> "Вл*ди*ир"
|
53
53
|
def hide
|
54
|
-
::StTools::String.
|
54
|
+
::StTools::String.hide(self)
|
55
55
|
end
|
56
56
|
|
57
57
|
# Метод разделяет строку на подстроки, и нормализует кажду подстроку через #normalize
|
data/lib/st_tools/common.rb
CHANGED
@@ -2,11 +2,11 @@ module StTools
|
|
2
2
|
class Common
|
3
3
|
|
4
4
|
# Функция переводит хеши с несколькими уровнями вложения в плоский хэш, в котором
|
5
|
-
# глубина структуры заменяется ключами, разделенными
|
6
|
-
#
|
5
|
+
# глубина структуры заменяется ключами, разделенными точкой.
|
6
|
+
# За основу взят не-рекурсивный алгоритм отсюда: https://gist.github.com/lucabelmondo/4161211
|
7
7
|
#
|
8
8
|
# @param [Hash] hash для перевода ключей в плоский вид, разделенный точками
|
9
|
-
# @return [Hash] Hash вида "key.subkey.subsubkey" => value
|
9
|
+
# @return [Hash] возвращается одномерная Hash-структура вида "key.subkey.subsubkey" => value
|
10
10
|
def self.flatten_hash(hash)
|
11
11
|
result_iter = {}
|
12
12
|
paths = hash.keys.map { |key| [key] }
|
data/lib/st_tools/fias.rb
CHANGED
@@ -6,61 +6,76 @@ module StTools
|
|
6
6
|
# Функции получения aoguid адресного объекта
|
7
7
|
#
|
8
8
|
#-------------------------------------------------------------
|
9
|
-
|
9
|
+
|
10
|
+
# Функция возвращает aoguid города федерального значения Москва в системе ФИАС
|
10
11
|
#
|
11
12
|
# @return [String] aoguid г. Москва
|
12
13
|
def self.moscow_aoguid
|
13
14
|
return self.federal_cities['msk']
|
14
15
|
end
|
15
16
|
|
16
|
-
# Функция возвращает aoguid Санкт-Питербурга в системе ФИАС
|
17
|
+
# Функция возвращает aoguid города федерального значения Санкт-Питербурга в системе ФИАС
|
17
18
|
#
|
18
19
|
# @return [String] aoguid г. Санкт-Питербурга
|
19
20
|
def self.spb_aoguid
|
20
21
|
return self.federal_cities['spb']
|
21
22
|
end
|
22
23
|
|
23
|
-
# Функция возвращает aoguid Севастополя в системе ФИАС
|
24
|
+
# Функция возвращает aoguid города федерального значения Севастополя в системе ФИАС
|
24
25
|
#
|
25
26
|
# @return [String] aoguid г. Севастополь
|
26
27
|
def self.sevastopol_aoguid
|
27
28
|
return self.federal_cities['svs']
|
28
29
|
end
|
29
30
|
|
30
|
-
# Функция возвращает aoguid Байконура в системе ФИАС
|
31
|
+
# Функция возвращает aoguid города федерального значения Байконура в системе ФИАС
|
31
32
|
#
|
32
33
|
# @return [String] aoguid г. Байконур
|
33
34
|
def self.baikonur_aoguid
|
34
35
|
return self.federal_cities['bai']
|
35
36
|
end
|
36
37
|
|
37
|
-
|
38
|
-
#
|
39
|
-
# Функции валидации типа адресного объекта
|
38
|
+
|
39
|
+
# Метод проверяет, является ли aoguid городом федерального значения
|
40
40
|
#
|
41
|
-
|
41
|
+
# @param [String] aoguid адресного объекта из таблицы addrobj ФИАС
|
42
|
+
# @return [Boolean] true, если объект - любой из городов федерального значения
|
42
43
|
def self.federal?(aoguid)
|
43
44
|
return true if self.federal_cities.values.include?(aoguid)
|
44
45
|
return false
|
45
46
|
end
|
46
47
|
|
48
|
+
# Метод проверяет, является ли aoguid городом федерального значения Москва
|
49
|
+
#
|
50
|
+
# @param [String] aoguid адресного объекта из таблицы addrobj ФИАС
|
51
|
+
# @return [Boolean] true, если объект - Москва
|
47
52
|
def self.moscow?(aoguid)
|
48
53
|
return true if self.federal_cities['msk'] == aoguid
|
49
54
|
return false
|
50
55
|
end
|
51
56
|
|
52
|
-
#
|
53
|
-
#
|
57
|
+
# Метод проверяет, является ли aoguid городом федерального значения Санкт-Петербург
|
58
|
+
#
|
59
|
+
# @param [String] aoguid адресного объекта из таблицы addrobj ФИАС
|
60
|
+
# @return [Boolean] true, если объект - Санкт-Петербург
|
54
61
|
def self.spb?(aoguid)
|
55
62
|
return true if self.federal_cities['spb'] == aoguid
|
56
63
|
return false
|
57
64
|
end
|
58
65
|
|
66
|
+
# Метод проверяет, является ли aoguid городом федерального значения Севастополь
|
67
|
+
#
|
68
|
+
# @param [String] aoguid адресного объекта из таблицы addrobj ФИАС
|
69
|
+
# @return [Boolean] true, если объект - Севастополь
|
59
70
|
def self.sevastopol?(aoguid)
|
60
71
|
return true if self.federal_cities['svs'] == aoguid
|
61
72
|
return false
|
62
73
|
end
|
63
74
|
|
75
|
+
# Метод проверяет, является ли aoguid городом федерального значения Байконур
|
76
|
+
#
|
77
|
+
# @param [String] aoguid адресного объекта из таблицы addrobj ФИАС
|
78
|
+
# @return [Boolean] true, если объект - Байконур
|
64
79
|
def self.baikonur?(aoguid)
|
65
80
|
if self.federal_cities['bai'] == aoguid
|
66
81
|
return true
|
@@ -69,30 +84,39 @@ module StTools
|
|
69
84
|
end
|
70
85
|
|
71
86
|
|
72
|
-
|
87
|
+
# Метод проверяет, имеет ли переданная строка тип UUID
|
73
88
|
#
|
74
|
-
#
|
75
|
-
#
|
76
|
-
|
77
|
-
|
78
|
-
|
89
|
+
# @param [String] text исходная строка
|
90
|
+
# @return [Boolean] true, если строка имеет тип UUID
|
91
|
+
# @example Примеры использования
|
92
|
+
# StTools::Fias.uuid?('0c5b2444-70a0-4932-980c-b4dc0d3f02b5') #=> true
|
93
|
+
# StTools::Fias.uuid?('Hello, word!') #=> false
|
94
|
+
def self.uuid?(text)
|
95
|
+
return nil if text.nil?
|
96
|
+
if text.match(/[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}/i)
|
79
97
|
return true
|
80
98
|
end
|
81
99
|
return false
|
82
100
|
end
|
83
101
|
|
84
|
-
|
85
|
-
|
102
|
+
# Метод проверяет, яаляется строка почтовым индексом
|
103
|
+
#
|
104
|
+
# @param [String] text исходная строка
|
105
|
+
# @return [Boolean] true, если строка является почтовым индексом
|
106
|
+
# @example Примеры использования
|
107
|
+
# StTools::Fias.postalcode?('111141') #=> true
|
108
|
+
# StTools::Fias.postalcode?(' 141207') #=> true
|
109
|
+
# StTools::Fias.postalcode?('Hello') #=> false
|
110
|
+
# StTools::Fias.postalcode?('1234') #=> false
|
111
|
+
def self.postalcode?(text)
|
112
|
+
return nil if text.nil?
|
113
|
+
if text.to_s.strip.match(/^\d{6}$/)
|
86
114
|
return true
|
87
115
|
end
|
88
116
|
return false
|
89
117
|
end
|
90
118
|
|
91
|
-
|
92
|
-
#
|
93
|
-
# Вспомогательные функции
|
94
|
-
#
|
95
|
-
#--------------------------------------------------------------
|
119
|
+
|
96
120
|
private
|
97
121
|
|
98
122
|
# noinspection RubyClassVariableUsageInspection
|
data/lib/st_tools/human.rb
CHANGED
@@ -2,10 +2,14 @@ module StTools
|
|
2
2
|
class Human
|
3
3
|
|
4
4
|
|
5
|
-
#
|
5
|
+
# Метод форматирует число, добавляя суффиксы 'тыс.', 'млн.' и пр.
|
6
6
|
#
|
7
|
-
# @param [Integer] val значение
|
8
|
-
# @return [String] строка вида "512,4
|
7
|
+
# @param [Integer] val исходное числовое значение
|
8
|
+
# @return [String] строка вида "512,4 тыс."
|
9
|
+
# @example Примеры использования
|
10
|
+
# StTools::Human.number(123) #=> "123"
|
11
|
+
# StTools::Human.number(14563) #=> "14 тыс."
|
12
|
+
# StTools::Human.number(763552638) #=> "763.6 млн."
|
9
13
|
def self.number(val)
|
10
14
|
# todo: локлаизовать через i18N
|
11
15
|
# noinspection RubyStringKeysInHashInspection
|
@@ -23,10 +27,14 @@ module StTools
|
|
23
27
|
end
|
24
28
|
end
|
25
29
|
|
26
|
-
#
|
30
|
+
# Метод форматирует число, добавляя суффиксы 'кбайт', 'Мбайт' и др.
|
27
31
|
#
|
28
|
-
# @param [Integer] val значение в байтах
|
32
|
+
# @param [Integer] val исходное числовое значение в байтах
|
29
33
|
# @return [String] строка вида "512,4 Мбайт"
|
34
|
+
# @example Примеры использования
|
35
|
+
# StTools::Human.bytes(123) #=> "123 байта"
|
36
|
+
# StTools::Human.bytes(14563) #=> "14 кбайт"
|
37
|
+
# StTools::Human.bytes(763552638) #=> "728.2 Мбайт"
|
30
38
|
def self.bytes(val)
|
31
39
|
# todo: локлаизовать через i18N
|
32
40
|
# noinspection RubyStringKeysInHashInspection
|
@@ -44,7 +52,7 @@ module StTools
|
|
44
52
|
end
|
45
53
|
end
|
46
54
|
|
47
|
-
#
|
55
|
+
# Метод возвращает форматированную строку с объемом памяти, занимаемым текущим процессом (pid).
|
48
56
|
#
|
49
57
|
# @return [String] строка вида "512,4 Мбайт"
|
50
58
|
def self.memory
|
@@ -52,12 +60,17 @@ module StTools
|
|
52
60
|
return self.bytes(val)
|
53
61
|
end
|
54
62
|
|
55
|
-
#
|
56
|
-
# Предварительно необходимо вызвать StTools.setup(:ru).
|
63
|
+
# Метод переводит DateTime в строку на русском или иных языках вида "4 дня 23 часа назад".
|
64
|
+
# Предварительно необходимо вызвать StTools.setup(:ru или :en).
|
57
65
|
#
|
58
66
|
# @param [DateTime] time время и дата
|
59
|
-
# @param [Boolean] ago
|
67
|
+
# @param [Boolean] ago true, если надо добавить слово "назад" в конец строки
|
60
68
|
# @return [String] строка вида "3 дня 12 часов" или "3 дня 12 часов назад"
|
69
|
+
# @example Примеры использования
|
70
|
+
# StTools::Setup.setup(:ru)
|
71
|
+
# StTools::Human.ago_in_words(Time.now - 23, true) #=> "23 секунды назад"
|
72
|
+
# StTools::Human.ago_in_words(Time.now - 24553, false) #=> 6 часов 49 минут"
|
73
|
+
# StTools::Human.ago_in_words(Time.now) #=> "сейчас"
|
61
74
|
def self.ago_in_words(time, ago = true)
|
62
75
|
now = self.to_time(Time.now.strftime('%Y-%m-%d %H:%M:%S UTC'))
|
63
76
|
slf = self.to_time(time.strftime('%Y-%m-%d %H:%M:%S UTC'))
|
@@ -70,25 +83,41 @@ module StTools
|
|
70
83
|
pair.join(' ')
|
71
84
|
end
|
72
85
|
|
73
|
-
#
|
74
|
-
# StTools.setup(:ru).
|
86
|
+
# Метод переводит DateTime в строку на русском или иных языках. Предварительно необходимо вызвать
|
87
|
+
# StTools.setup(:ru или :en).
|
75
88
|
#
|
76
|
-
# @param [DateTime] time время и дата
|
77
|
-
# @param [Sym]
|
89
|
+
# @param [DateTime] time исходные время и дата
|
90
|
+
# @param [Sym] what формат возвращаемого результата, принимает одно из следующих значений
|
78
91
|
# @option :full форматирует дату и время (по умолчанию)
|
79
92
|
# @option :date форматирует только дату
|
80
93
|
# @option :time форматирует только время
|
94
|
+
# @param [Sym] type форма в которой возращать результат: длинная ("28 апреля 2015 г. 10:34:52") или короткая ("28/04/2015 10:34")
|
95
|
+
# @option :full длинна форма
|
96
|
+
# @option :short короткая форма
|
81
97
|
# @return [String] строка с форматированными датой и временем
|
98
|
+
# @example Примеры использования
|
99
|
+
# StTools::Setup.setup(:ru)
|
100
|
+
# StTools::Human.format_time(Time.now, :full, :full) #=> "30 апреля 2015 г. 08:54:34"
|
101
|
+
# StTools::Human.format_time(Time.now, :date, :full) #=> "30 апреля 2015 г."
|
102
|
+
# StTools::Human.format_time(Time.now, :time, :full) #=> "08:54:34"
|
103
|
+
# StTools::Human.format_time(Time.now, :full, :short) #=> "30/04/2015 08:55"
|
104
|
+
# StTools::Human.format_time(Time.now, :date, :short) #=> "30/04/2015"
|
105
|
+
# StTools::Human.format_time(Time.now, :time, :short) #=> "08:55"
|
82
106
|
def self.format_time(time, what, type)
|
83
|
-
|
107
|
+
unless [:full, :date, :time].include?(what)
|
84
108
|
warn "WARNING: what ':#{what.to_s}' must be in [:full, :date, :time]. Use ':full' now (at line #{__LINE__} of StTools::#{File.basename(__FILE__)})"
|
85
109
|
what = :full
|
86
110
|
end
|
87
111
|
return I18n.l(time, :format => "#{what.to_s}_#{type.to_s}".to_sym)
|
88
112
|
end
|
89
113
|
|
114
|
+
|
115
|
+
|
90
116
|
private
|
91
117
|
|
118
|
+
|
119
|
+
|
120
|
+
|
92
121
|
def self.ago_in_words_pair(secs)
|
93
122
|
mins = (secs / 60).to_i
|
94
123
|
hours = (mins / 60).to_i
|
@@ -1,6 +1,13 @@
|
|
1
1
|
module StTools
|
2
2
|
class ProgressBar
|
3
|
-
|
3
|
+
# Количество вызовов метода progress=.
|
4
|
+
attr_reader :usage
|
5
|
+
# Текущее значение прогресс-бара
|
6
|
+
attr_reader :progress
|
7
|
+
# Время выполнения всей операции в секундах (формируется после достижения max)
|
8
|
+
attr_reader :executed_at
|
9
|
+
# Максимальное значение прогресс-бара
|
10
|
+
attr_reader :max
|
4
11
|
|
5
12
|
# Инициализация прогресс-бара
|
6
13
|
#
|
@@ -8,7 +15,8 @@ module StTools
|
|
8
15
|
# @option opts [String] :title заголовок прогресс-бара
|
9
16
|
# @option opts [Integer] :max максимальное значение
|
10
17
|
# @option opts [Integer] :progress текущее значение (по умолчанию 0)
|
11
|
-
# @option opts [String] :footer резюмирующая строка. Допускает два шаблона: [memory] и [executed_at]
|
18
|
+
# @option opts [String] :footer резюмирующая строка. Допускает два шаблона: [memory] и [executed_at], например:
|
19
|
+
# "Завершено за [executed_at] секунд. Занятая память [memory]"
|
12
20
|
# @option opts [Integer] :step шаг кратно которому реально перерисовывается прогресс-бар
|
13
21
|
# @return [Object] нет
|
14
22
|
def initialize(opts = {})
|
@@ -25,7 +33,7 @@ module StTools
|
|
25
33
|
init_progress_bar
|
26
34
|
end
|
27
35
|
|
28
|
-
#
|
36
|
+
# Метод устанавливает новое значение прогресс-бара
|
29
37
|
#
|
30
38
|
# @param [Integer] val новое значение прогресс-бара. Если равно max - то вызывается функция вывода футера
|
31
39
|
# @return [Object] нет
|
@@ -43,6 +51,7 @@ module StTools
|
|
43
51
|
end
|
44
52
|
end
|
45
53
|
|
54
|
+
|
46
55
|
private
|
47
56
|
|
48
57
|
|
data/lib/st_tools/string.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
module StTools
|
2
2
|
class String
|
3
3
|
|
4
|
-
#
|
4
|
+
# Метод преобразует текст в транслит
|
5
5
|
#
|
6
6
|
# @param [String] text исходная строка с русскими буквами
|
7
7
|
# @return [String] строка в транслите
|
8
|
+
# @example Примеры использования
|
9
|
+
# StTools::String.translit("Жмеринка") #=> "Zhmerinka"
|
8
10
|
def self.translit(text)
|
9
11
|
return nil if text.nil?
|
10
12
|
translited = text.tr('абвгдеёзийклмнопрстуфхэыь', 'abvgdeezijklmnoprstufhey\'\'')
|
@@ -18,31 +20,38 @@ module StTools
|
|
18
20
|
return translited
|
19
21
|
end
|
20
22
|
|
21
|
-
#
|
22
|
-
#
|
23
|
+
# Метод преобразует строку в нижний регистр с одновременной заменой буквы 'ё' на 'е'.
|
24
|
+
# Метод имеет примерно в два раза более высокую производительности по сравнению с традиционным .mb_chars.downcase.to_s,
|
25
|
+
# но имеет ограничение - работа только с русскими и английскими строками
|
23
26
|
#
|
24
27
|
# @param [String] text строка в произвольном регистре
|
25
28
|
# @return [String] строка в нижнем регистре
|
29
|
+
# @example Примеры использования
|
30
|
+
# StTools::String.downcase("Hello, Вася!") #=> "hello, вася!"
|
26
31
|
def self.downcase(text)
|
27
32
|
return nil if text.nil?
|
28
33
|
return text.tr('QWERTYUIOPASDFGHJKLZXCVBNMАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ',
|
29
34
|
'qwertyuiopasdfghjklzxcvbnmабвгдеёжзийклмнопрстуфхцчшщъыьэюя').gsub('ё', 'е')
|
30
35
|
end
|
31
36
|
|
32
|
-
#
|
33
|
-
#
|
37
|
+
# Метод преобразует строку в верхний регистр с одновременной заменой буквы 'Ё' на 'Е'.
|
38
|
+
# Метод имеет примерно в два раза более высокую производительности по сравнению с традиционным .mb_chars.downcase.to_s,
|
39
|
+
# но имеет ограничение - работа только с русскими и английскими строками
|
34
40
|
#
|
35
41
|
# @param [String] text строка в произвольном регистре
|
36
|
-
# @return [String] строка в
|
42
|
+
# @return [String] строка в верхнем регистре
|
43
|
+
# @example Примеры использования
|
44
|
+
# StTools::String.upcase("Hello, Вася!") #=> "HELLO, ВАСЯ!"
|
37
45
|
def self.upcase(text)
|
38
46
|
return nil if text.nil?
|
39
47
|
return text.tr('qwertyuiopasdfghjklzxcvbnmабвгдеёжзийклмнопрстуфхцчшщъыьэюя',
|
40
48
|
'QWERTYUIOPASDFGHJKLZXCVBNMАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ').gsub('Ё', 'Е')
|
41
49
|
end
|
42
50
|
|
43
|
-
#
|
44
|
-
# на русские на соответстующие
|
45
|
-
# когда Google меняет случайно написанное английскими буквами на русское
|
51
|
+
# Метод заменяет в исходной строке английские символы, похожие
|
52
|
+
# на русские - на соответстующие русские символы. То есть это похоже на ситуацию,
|
53
|
+
# когда Google меняет слово, случайно написанное английскими буквами - на русское слово. Одновременно
|
54
|
+
# буква 'ё' меняется на 'е'.
|
46
55
|
#
|
47
56
|
# @param [String] text текст со смесью английских и русских букв
|
48
57
|
# @return [String] текст только с русскими буквами
|
@@ -51,28 +60,33 @@ module StTools
|
|
51
60
|
return text.tr('ёЁEeHCcTOoPpAHKXxBM', 'еЕЕеНСсТОоРрАНКХхВМ')
|
52
61
|
end
|
53
62
|
|
54
|
-
#
|
55
|
-
#
|
56
|
-
# -
|
57
|
-
# -
|
58
|
-
# -
|
59
|
-
# -
|
60
|
-
# - оставить в строке только один пробел между слов
|
63
|
+
# Метод проводит нормализацию строки для последующей машиной обработки. При этом осуществляется:
|
64
|
+
# - убирается букву 'ё'
|
65
|
+
# - перевод строку в нижний регистр
|
66
|
+
# - замена случайно введенных английских букв на русские
|
67
|
+
# - убираются лидирующие и завершающие пробелы
|
68
|
+
# - в строке удаляются повторные пробелы между словами
|
61
69
|
#
|
62
70
|
# @param [String] text строка, введенная пользователям
|
63
71
|
# @return [String] строка без 'ё', в нижнем регистре, без английских букв
|
72
|
+
# @example Примеры использования
|
73
|
+
# StTools::String.normalize(" Ёлки- ПАЛКИ") #=> "елки- палки"
|
64
74
|
def self.normalize(text)
|
65
75
|
return nil if text.nil?
|
66
76
|
return self.downcase(self.delat(text)).strip.gsub(/\s{1,100}/, ' ')
|
67
77
|
end
|
68
78
|
|
69
|
-
#
|
70
|
-
#
|
71
|
-
# ее длиной. Чем строка дилинее - тем больше в ней звездочек
|
79
|
+
# Метод позволяет показывать клиенту строку в неполном объеме, с закрытием части символов в строке звездочкой.
|
80
|
+
# При этом число звездочек в строке определеяется ее длиной. Чем строка дилинее - тем больше в ней звездочек.
|
72
81
|
#
|
73
82
|
# @param [String] text строка, которую необходимо закрыть звездочками
|
74
83
|
# @return [String] строка, часть символов которой заменена звездочками
|
75
|
-
|
84
|
+
# @example Примеры использования
|
85
|
+
# StTools::String.hide("мы") #=> "мы"
|
86
|
+
# StTools::String.hide("москва") #=> "мо*ква"
|
87
|
+
# StTools::String.hide("длиннаяфраза") #=> "дли**аяфраза"
|
88
|
+
# StTools::String.hide("просто произвольная фраза") #=> "**осто пр*извол*н*я фраза"
|
89
|
+
def self.hide(text)
|
76
90
|
return nil if text.nil?
|
77
91
|
len = text.length - 3
|
78
92
|
0.upto((len/4).to_i) do
|
@@ -82,7 +96,7 @@ module StTools
|
|
82
96
|
return text
|
83
97
|
end
|
84
98
|
|
85
|
-
#
|
99
|
+
# Метод аналогичен обычной функции split, однако дополнительно может выполнять следующие действия:
|
86
100
|
# - strip каждого элемента
|
87
101
|
# - normalize соответсвующей функцией (#normalize)
|
88
102
|
# - сортировка в прямом порядке
|
@@ -95,8 +109,13 @@ module StTools
|
|
95
109
|
# @option opts [Boolean] :sort - сортировать выходной массив
|
96
110
|
# @option opts [Boolean] :uniq - удалить из массива дубликаты
|
97
111
|
# @return [Array] массив элементов из строки
|
112
|
+
# @example Примеры использования
|
113
|
+
# StTools::String.split("саша, Паша, ТАНЯ, Алина", ',') #=> ["саша", "Паша", "ТАНЯ", "Алина"]
|
114
|
+
# StTools::String.split("саша, Паша, ТАНЯ, Алина", ',', normalize: true) #=> ["саша", "паша", "таня", "алина"]
|
115
|
+
# StTools::String.split("саша, Паша, ТАНЯ, Алина", ',', normalize: true, sort: true) #=> ["алина", "паша", "саша", "таня"]
|
116
|
+
# StTools::String.split("саша, Паша, ТАНЯ, Алина, таня", ',', normalize: true, sort: true, uniq: true) #=> ["алина", "паша", "саша", "таня"]
|
98
117
|
def self.split(text, separator, opts = {})
|
99
|
-
return
|
118
|
+
return [] if text.nil?
|
100
119
|
out = text.split(separator)
|
101
120
|
out.map! { |x| x.strip }
|
102
121
|
out.map! { |x| self.normalize(x) } if opts[:normalize]
|
@@ -108,7 +127,7 @@ module StTools
|
|
108
127
|
return []
|
109
128
|
end
|
110
129
|
|
111
|
-
#
|
130
|
+
# Метод возвращает полный массив Array [1, 4, 5, 6, 7, 456] для строк вида '1, 4, 5-7, 456'.
|
112
131
|
# Дополнительно осуществляется:
|
113
132
|
# - сортировка в прямом порядке
|
114
133
|
# - удаление дубликотов
|
@@ -118,8 +137,12 @@ module StTools
|
|
118
137
|
# @option opts [Boolean] :sort - сортировать выходной массив
|
119
138
|
# @option opts [Boolean] :uniq - удалить из массива дубликаты
|
120
139
|
# @return [Array] массив чисел
|
140
|
+
# @example Примеры использования
|
141
|
+
# StTools::String.to_range("1, 4, 5-7, 456, 6") #=> [1, 4, 5, 6, 7, 456, 6]
|
142
|
+
# StTools::String.to_range("1, 4, 5-7, 456, 6", sort: true) #=> [1, 4, 5, 6, 6, 7, 456]
|
143
|
+
# StTools::String.to_range("1, 4, 5-7, 456, 6", sort: true, uniq: true) #=> [1, 4, 5, 6, 7, 456]
|
121
144
|
def self.to_range(text, opts = {})
|
122
|
-
return
|
145
|
+
return [] if text.nil?
|
123
146
|
out = Array.new
|
124
147
|
|
125
148
|
tmp = self.split(text, ',')
|
@@ -138,11 +161,12 @@ module StTools
|
|
138
161
|
return out
|
139
162
|
end
|
140
163
|
|
141
|
-
#
|
142
|
-
# Подключеие ActiveSupport не требуется
|
164
|
+
# Метод делает заглавной первую букву в словах, разделенных пробелами или дефисом.
|
143
165
|
#
|
144
166
|
# @param [String] text исходная строка
|
145
167
|
# @return [String] строка с первыми заглавными буквами
|
168
|
+
# @example Примеры использования
|
169
|
+
# StTools::String.caps("саНКТ-петеРБург") #=> "Санкт-Петербург"
|
146
170
|
def self.caps(text)
|
147
171
|
return nil if text.nil?
|
148
172
|
str = self.downcase(text).split(/[\-\s]/).map { |x| self.upcase(x[0]) + x[1,x.length] }
|
@@ -156,13 +180,24 @@ module StTools
|
|
156
180
|
return text
|
157
181
|
end
|
158
182
|
|
159
|
-
#
|
183
|
+
# Метод конвертирует строку в тип boolean
|
160
184
|
#
|
161
185
|
# @param [String] text исходная строка, содержащая 'true/false', 'on/off', '1/0'
|
162
186
|
# @return [Boolean] true или false
|
187
|
+
# @example Примеры использования
|
188
|
+
# StTools::String.to_bool("True") #=> true
|
189
|
+
# StTools::String.to_bool("trUE") #=> true
|
190
|
+
# StTools::String.to_bool("on") #=> true
|
191
|
+
# StTools::String.to_bool("1") #=> true
|
192
|
+
# StTools::String.to_bool("Да") #=> true
|
193
|
+
# StTools::String.to_bool("Yes") #=> true
|
194
|
+
# StTools::String.to_bool("false") #=> false
|
195
|
+
# StTools::String.to_bool("fALse") #=> false
|
196
|
+
# StTools::String.to_bool("oFF") #=> false
|
197
|
+
# StTools::String.to_bool("0") #=> false
|
163
198
|
def self.to_bool(text)
|
164
199
|
return false if text.nil?
|
165
|
-
return true if ['true', 'on', '1'].include?(self.downcase(text.to_s))
|
200
|
+
return true if ['true', 'on', '1', 'да', 'yes'].include?(self.downcase(text.to_s))
|
166
201
|
false
|
167
202
|
end
|
168
203
|
|
data/lib/st_tools/system.rb
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
module StTools
|
2
2
|
class System
|
3
3
|
|
4
|
+
# Метод возвращает размер памяти, занятой приложением
|
5
|
+
#
|
6
|
+
# @return [Integer] размер памяти в байтах
|
4
7
|
def self.memory
|
5
8
|
return `ps -o rss -p #{Process::pid}`.chomp.split("\n").last.strip.to_i
|
6
9
|
end
|
7
10
|
|
8
|
-
#
|
11
|
+
# Метод возвращает размер терминала - число строк в терминале или число символов в строке
|
9
12
|
#
|
10
13
|
# @param [Sym] size возвращаемый параметр
|
11
14
|
# @option size [Sym] :width вернуть число символов в строке терминала
|
data/lib/st_tools/version.rb
CHANGED
data/lib/st_tools.rb
CHANGED
@@ -19,10 +19,18 @@ module StTools
|
|
19
19
|
|
20
20
|
class Setup
|
21
21
|
|
22
|
+
# Метод загрузки файлов локализации для методов форматирования времени. Принимает значения [:en, :ru]
|
23
|
+
#
|
24
|
+
# @param [Object] locale - язык локализации, поддерживается :ru, :en. Если передена неизвестная локализация
|
25
|
+
# по умолчанию будет использована :ru
|
26
|
+
# @return [Object] нет
|
22
27
|
def self.setup(locale)
|
28
|
+
locale = :ru unless [:ru, :en].include?(locale)
|
23
29
|
self.setup_locale(locale)
|
24
30
|
end
|
25
31
|
|
32
|
+
private
|
33
|
+
|
26
34
|
def self.setup_locale(locale)
|
27
35
|
require 'i18n'
|
28
36
|
::I18n.load_path += Dir[File.dirname(File.expand_path(__FILE__)) + '/i18n/**/*.yml']
|
data/test/string_lib_spec.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: st_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stan Zhuravlev
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -67,11 +67,10 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
description: |-
|
70
|
-
Библиотека
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
- управление прогресс-баром CLI-приложений
|
70
|
+
Библиотека StTools предназначена для поддержки CLI- и Rails-приложений. Она обеспечивает
|
71
|
+
различное преобразование строк с учетом русского языка, формирование человеко-удобного представления времени и чисел,
|
72
|
+
получения разных системных характеристик CLI-приложений (память, размер экрана терминала),
|
73
|
+
управление прогресс-баром CLI-приложений.
|
75
74
|
email:
|
76
75
|
- stan@post-api.ru
|
77
76
|
executables: []
|
@@ -113,9 +112,9 @@ require_paths:
|
|
113
112
|
- lib/st_tools
|
114
113
|
required_ruby_version: !ruby/object:Gem::Requirement
|
115
114
|
requirements:
|
116
|
-
- - "
|
115
|
+
- - "~>"
|
117
116
|
- !ruby/object:Gem::Version
|
118
|
-
version: '0'
|
117
|
+
version: '2.0'
|
119
118
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
119
|
requirements:
|
121
120
|
- - ">="
|