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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dbc4df1cb453510d365fd64c9706ff8f6a733412
4
- data.tar.gz: 999050e842607f77143e00d9881174f8489a30d8
3
+ metadata.gz: b9636bb4e4a7eca384e243785b78add9c259fee4
4
+ data.tar.gz: c336f6ba172b1df7cf029f0ab62704e473e02aef
5
5
  SHA512:
6
- metadata.gz: 2f46739ed694b711f20045b4e82f5d0bdfd0cfd8e504d45bf875dac97743e7f6dd9cfabae93080a6b7b41e54384fd0daeba74cb065f2272cbdbac38343f4f07e
7
- data.tar.gz: ecf50eaa21dd3672fe40d0e42a4905619ea944bc4996d58c0a949391b6f9f6cafb050a6e880136e3656663bb732368eb5d0b5fd9cbddfd79f3e3778e4abacdcb
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
- - получения разных системных характеристик CLI-приложений
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
- Установите гем cредствами Bundler:
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
- Для это можно использовать метод hide_text
154
+ Для это можно использовать метод hide
156
155
 
157
156
  ```ruby
158
- StTools::String.hide_text('Краснодар') # => "Кра*но*ар"
157
+ StTools::String.hide('Краснодар') # => "Кра*но*ар"
159
158
  ```
160
159
 
161
160
  В Ruby отсутствует метод перевода строки пользователя в тип Boolean.
162
161
 
163
162
  ```ruby
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('faLSE') # => false
168
- StTools::String.to_bool('off') # => false
169
- StTools::String.to_bool('0') # => false
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
  Если пользователь введет в качестве входного параметра перечисление, следующий метод разобъет его на токены,
@@ -51,7 +51,7 @@ module StTools
51
51
  # @example Сокрытие части строки
52
52
  # "Владимир".hide #=> "Вл*ди*ир"
53
53
  def hide
54
- ::StTools::String.hide_text(self)
54
+ ::StTools::String.hide(self)
55
55
  end
56
56
 
57
57
  # Метод разделяет строку на подстроки, и нормализует кажду подстроку через #normalize
@@ -2,11 +2,11 @@ module StTools
2
2
  class Common
3
3
 
4
4
  # Функция переводит хеши с несколькими уровнями вложения в плоский хэш, в котором
5
- # глубина структуры заменяется ключами, разделенными точкой
6
- # Источник: https://gist.github.com/lucabelmondo/4161211
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
- # Функция возвращает aoguid Москвы в системе ФИАС
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
- # @param [aoguid] aoguid адресного объекта из таблицы addrobj ФИАС
53
- # @return [bool] true, если объект - Санкт-Петербург
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
- def self.uuid?(id)
78
- if id.match(/[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}/i)
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
- def self.postalcode?(id)
85
- if id.to_s.strip.match(/^\d{6}$/)
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
@@ -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
- # Функция возвращает форматированную строку с объемом памяти, занимаемым текущим процессом (pid).
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
- # Функция переводит DateTime в строку на русском или иных языках вида "4 дня 23 часа назад".
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
- # Функция переводит DateTime в строку на русском или иных языках. Предварительно необходимо вызвать
74
- # StTools.setup(:ru).
86
+ # Метод переводит DateTime в строку на русском или иных языках. Предварительно необходимо вызвать
87
+ # StTools.setup(:ru или :en).
75
88
  #
76
- # @param [DateTime] time время и дата
77
- # @param [Sym] type формат возвращаемого результата
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
- if [:full, :date, :time].include?(what) == false
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
- attr_reader :usage, :progress, :executed_at
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
 
@@ -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
- def self.hide_text(text)
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
- # Функция аналогична обычной функции split, однако дополнительно может выполнять следующие действия
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 nil if text.nil?
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
- # Функция возвращает полный массив Array [1, 4, 5, 6, 7, 456] для строк вида '1, 4, 5-7, 456'.
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 nil if text.nil?
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
- # Функция формирует boolean значение из строки
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
 
@@ -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 вернуть число символов в строке терминала
@@ -1,3 +1,3 @@
1
1
  module StTools
2
- VERSION = '0.3.2'
2
+ VERSION = '0.3.3'
3
3
  end
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']
@@ -39,7 +39,7 @@ describe 'Проверка методов StTools::String.*' do
39
39
  end
40
40
 
41
41
  it '.hide_text' do
42
- test = ::StTools::String.hide_text('Ярослав Му(y)дрёный')
42
+ test = ::StTools::String.hide('Ярослав Му(y)дрёный')
43
43
  expect(test).to include('*')
44
44
  end
45
45
 
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.2
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-29 00:00:00.000000000 Z
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
- - получения разных системных характеристик CLI-приложений
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
  - - ">="