st_tools 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
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
  - - ">="