st_tools 0.3.2
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 +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +258 -0
- data/bin/console +14 -0
- data/bin/setup +10 -0
- data/lib/i18n/en.yml +72 -0
- data/lib/i18n/ru.yml +49 -0
- data/lib/modules/fias.rb +57 -0
- data/lib/modules/integer.rb +28 -0
- data/lib/modules/string.rb +105 -0
- data/lib/modules/time.rb +23 -0
- data/lib/st_tools/common.rb +30 -0
- data/lib/st_tools/fias.rb +111 -0
- data/lib/st_tools/human.rb +140 -0
- data/lib/st_tools/progress_bar.rb +73 -0
- data/lib/st_tools/string.rb +170 -0
- data/lib/st_tools/system.rb +38 -0
- data/lib/st_tools/version.rb +3 -0
- data/lib/st_tools.rb +36 -0
- data/test/fias_lib_spec.rb +112 -0
- data/test/human_lib_spec.rb +64 -0
- data/test/progress_bar_lib_spec.rb +18 -0
- data/test/string_lib_spec.rb +99 -0
- data/test/system_lib_spec.rb +25 -0
- metadata +130 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: dbc4df1cb453510d365fd64c9706ff8f6a733412
|
4
|
+
data.tar.gz: 999050e842607f77143e00d9881174f8489a30d8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2f46739ed694b711f20045b4e82f5d0bdfd0cfd8e504d45bf875dac97743e7f6dd9cfabae93080a6b7b41e54384fd0daeba74cb065f2272cbdbac38343f4f07e
|
7
|
+
data.tar.gz: ecf50eaa21dd3672fe40d0e42a4905619ea944bc4996d58c0a949391b6f9f6cafb050a6e880136e3656663bb732368eb5d0b5fd9cbddfd79f3e3778e4abacdcb
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 Stan Zhuravlev
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,258 @@
|
|
1
|
+
# StTools
|
2
|
+
|
3
|
+
Данные гем содержит методы, обеспечивающие:
|
4
|
+
- преобразование строк с учетом русского языка
|
5
|
+
- формирования человеко-удобной информации
|
6
|
+
- получения разных системных характеристик CLI-приложений
|
7
|
+
- управление прогресс-баром CLI-приложений
|
8
|
+
|
9
|
+
## Установка
|
10
|
+
|
11
|
+
Добавить в Gemfile:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
gem 'st_tools'
|
15
|
+
```
|
16
|
+
|
17
|
+
Установите гем cредствами Bundler:
|
18
|
+
|
19
|
+
$ bundle
|
20
|
+
|
21
|
+
Или установите его отдельно:
|
22
|
+
|
23
|
+
$ gem install st_tools
|
24
|
+
|
25
|
+
# Зависимости
|
26
|
+
|
27
|
+
Для работы гема требуется Ruby не младше версии 2.0.0. StTools не привязана к Rails и может использоваться в CLI-приложениях.
|
28
|
+
Класс StTools::ProgressBar является надстройкой над гемом 'progressbar-ruby'.
|
29
|
+
|
30
|
+
## Использование
|
31
|
+
|
32
|
+
Часть методов библиотеки поддерживают русскую и английскую локализацию.
|
33
|
+
Поскольку все методы StTools могут вызываться без создания класса - конструктор не вызывается.
|
34
|
+
Поэтому перед работой библиотеки рекомендуется вызвать StTools::Setup.setup(:ru или :en).
|
35
|
+
|
36
|
+
### StTools::Human
|
37
|
+
|
38
|
+
Вы вызываете в любой момент StTools::Human.memory и узнаете текущий размер памяти, занимаемый приложением (процессом)
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
StTools.Human.memory # => 14 кбайт
|
42
|
+
StTools.Human.memory # => 45,3 Мбайт
|
43
|
+
StTools.Human.memory # => 2,6 Гбайт
|
44
|
+
```
|
45
|
+
|
46
|
+
Вы вызываете StTools::Human.bytes и перевести любое значение в человеко-удобный вид. Метод можно использовать для показа размера файла
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
StTools.Human.bytes(345) # => 345 байт
|
50
|
+
StTools.Human.bytes(14653) # => 14,5 кбайт
|
51
|
+
StTools.Human.bytes(23653763) # => 23,4 Мбайт
|
52
|
+
```
|
53
|
+
|
54
|
+
Вы вызываете StTools::Human.number для перевода любого значения в человеко-удобный вид.
|
55
|
+
Метод можно использовать для показа, например, суммы денег
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
StTools.Human.number(345) # => 345
|
59
|
+
StTools.Human.number(14653) # => 14,6 тыс.
|
60
|
+
StTools.Human.number(23653763) # => 23,7 млн.
|
61
|
+
```
|
62
|
+
|
63
|
+
Вы имеете возможность узнать разницу между текущим временем и временем какого-либо события.
|
64
|
+
|
65
|
+
```ruby
|
66
|
+
StTools::Setup.setup(:ru)
|
67
|
+
StTools.Human.ago_in_words(DateTime.new(2014,12,31), true) # => 4 месяца 21 день назад
|
68
|
+
StTools.Human.ago_in_words(DateTime.new(2013,08,01), false) # => 1 год 8 месяца
|
69
|
+
StTools.Human.ago_in_words(Time.now - 15, true) # => 15 секунд назад
|
70
|
+
```
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
StTools::Setup.setup(:en)
|
74
|
+
StTools.Human.ago_in_words(DateTime.new(2014,12,31), true) # => 4 months 21 days ago
|
75
|
+
StTools.Human.ago_in_words(DateTime.new(2013,08,01), false) # => 1 year 8 months
|
76
|
+
StTools.Human.ago_in_words(Time.now - 15, true) # => 15 seconds ago
|
77
|
+
```
|
78
|
+
|
79
|
+
Устанавливая флаг ```ago=true```, метод добавит слово "назад" или "ago" в конце фразы.
|
80
|
+
|
81
|
+
Результирующая фраза всегда состоит из одного показатели (при разнице времени событий меньше минуты) или из двух (минуты/секунды, часы/минуты, дни/часы, месяцы/дни, года/месяцы)
|
82
|
+
|
83
|
+
Вы имеете форматировать дату и время в соответствии с правилами русского и английского языка.
|
84
|
+
|
85
|
+
```ruby
|
86
|
+
StTools::Setup.setup(:ru)
|
87
|
+
StTools.Human.format_time(Time.now, :full, :full) # => 28 апреля 2015 г. 10:45:23
|
88
|
+
StTools.Human.format_time(Time.now, :date, :full) # => 28 апреля 2015 г.
|
89
|
+
StTools.Human.format_time(Time.now, :time, :full) # => 10:45:23
|
90
|
+
StTools.Human.format_time(Time.now, :full, :short) # => 28/04/2015 10:45
|
91
|
+
StTools.Human.format_time(Time.now, :date, :short) # => 28/04/2015
|
92
|
+
StTools.Human.format_time(Time.now, :time, :short) # => 10:45
|
93
|
+
```
|
94
|
+
|
95
|
+
```ruby
|
96
|
+
StTools::Setup.setup(:en)
|
97
|
+
StTools.Human.format_time(Time.now, :full, :full) # => April 28, 2015 09:45:23 am
|
98
|
+
StTools.Human.format_time(Time.now, :date, :full) # => April 28, 2015
|
99
|
+
StTools.Human.format_time(Time.now, :time, :full) # => 09:45:23 am
|
100
|
+
StTools.Human.format_time(Time.now, :full, :short) # => 04/28/2015 09:45 am
|
101
|
+
StTools.Human.format_time(Time.now, :date, :short) # => 04/28/2015
|
102
|
+
StTools.Human.format_time(Time.now, :time, :short) # => 09:45 am
|
103
|
+
```
|
104
|
+
|
105
|
+
Вы можете подмешать модуль `StTools::Module` в классы String, Integer, Time.
|
106
|
+
|
107
|
+
```ruby
|
108
|
+
StTools::Setup.setup(:ru)
|
109
|
+
|
110
|
+
class String
|
111
|
+
extend StTools::Module::String
|
112
|
+
end
|
113
|
+
|
114
|
+
(Time.now - 15).human_ago # => 15 секунд назад
|
115
|
+
Time.now.format_date # => 28 апреля 2015 г.
|
116
|
+
Time.now.format_date(:short) # => 28/04/2015
|
117
|
+
```
|
118
|
+
|
119
|
+
### StTools::String
|
120
|
+
|
121
|
+
Транслитерация строки из русского на английский
|
122
|
+
|
123
|
+
```ruby
|
124
|
+
StTools::String.translit('Жмеринка') # => Zhmerinka
|
125
|
+
```
|
126
|
+
|
127
|
+
Иногда пользователи вводят английские буквы, похожие на русские, чаще все - букву 'C'. Метод delat заменяет такие символы на русские
|
128
|
+
|
129
|
+
```ruby
|
130
|
+
StTools::String.delat('Соль') # => Соль
|
131
|
+
```
|
132
|
+
|
133
|
+
Перевести строку в верхний или нижний регистр. Используется метод, альтернативный mb_chars (примерно в два раза производительней)
|
134
|
+
|
135
|
+
```ruby
|
136
|
+
StTools::String.downcase('Москва') # => москва
|
137
|
+
StTools::String.upcase('Москва') # => МОСКВА
|
138
|
+
```
|
139
|
+
|
140
|
+
Иногда надо нормализовать строку и привести ее к виду, удобному для машинной обработки.
|
141
|
+
Метод normalize последовательно делает: strip, delat, downcase
|
142
|
+
|
143
|
+
```ruby
|
144
|
+
StTools::String.normalize(' Москва ') # => "москва"
|
145
|
+
```
|
146
|
+
|
147
|
+
Следующий метод приводит строку к нижнему регистру, но делает первую букву заглавной.
|
148
|
+
Удобно для нормализации имени и фамилии, вводимых пользователем
|
149
|
+
|
150
|
+
```ruby
|
151
|
+
StTools::String.caps('санКТ-петерБург') # => "Санкт-Петербург"
|
152
|
+
```
|
153
|
+
|
154
|
+
Для реализации деморежимов различных приложений иногда надо скрыть реальный результат.
|
155
|
+
Для это можно использовать метод hide_text
|
156
|
+
|
157
|
+
```ruby
|
158
|
+
StTools::String.hide_text('Краснодар') # => "Кра*но*ар"
|
159
|
+
```
|
160
|
+
|
161
|
+
В Ruby отсутствует метод перевода строки пользователя в тип Boolean.
|
162
|
+
|
163
|
+
```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
|
170
|
+
```
|
171
|
+
|
172
|
+
Если пользователь введет в качестве входного параметра перечисление, следующий метод разобъет его на токены,
|
173
|
+
с нормализацией при необходимости
|
174
|
+
|
175
|
+
```ruby
|
176
|
+
StTools::String.split('ТАНЯ, маша, петя', ',') # => ['ТАНЯ', 'маша', 'петя']
|
177
|
+
StTools::String.split('ТАНЯ, маша, петя', ',', normalize: true) # => ['таня', 'маша', 'петя']
|
178
|
+
StTools::String.split('ТАНЯ, маша, петя', ',', normalize: true, sort: true) # => ['маша', 'петя', 'таня']
|
179
|
+
```
|
180
|
+
|
181
|
+
Если от пользователя требуется ввести численные значения в виде перечисления или диапазоне, нужно использовать
|
182
|
+
метод to_range
|
183
|
+
|
184
|
+
```ruby
|
185
|
+
StTools::String.to_range('54, 3-6, 5, 1') # => [54, 3, 5, 6, 5, 1]
|
186
|
+
StTools::String.to_range('54, 3-6, 5, 1', uniq: true) # => [54, 3, 5, 6, 1]
|
187
|
+
StTools::String.to_range('54, 3-6, 5, 1', uniq: true, sort: true) # => [1, 3, 5, 6, 54]
|
188
|
+
```
|
189
|
+
|
190
|
+
Вы можете подмешать модуль `StTools::Module` в классы String, Integer, Time.
|
191
|
+
|
192
|
+
```ruby
|
193
|
+
StTools::Setup.setup(:ru)
|
194
|
+
|
195
|
+
class String
|
196
|
+
extend StTools::Module::String
|
197
|
+
end
|
198
|
+
|
199
|
+
'санКТ-петерБург'.caps # => Санкт-Петербург
|
200
|
+
'санКТ-петерБург'.downcase # => санкт-петербург
|
201
|
+
'санКТ-петерБург'.upcase # => САНКТ-ПЕТЕРБУРГ
|
202
|
+
'on'.to_bool # => true
|
203
|
+
'34, 2-5, 8, 1'.to_range(sort: true) # => [1, 2, 4, 5, 8, 34]
|
204
|
+
'Краснодар'.hide # => Кра*но*ар
|
205
|
+
```
|
206
|
+
|
207
|
+
### StTools::System
|
208
|
+
|
209
|
+
Узнать объем оперативной памяти, занятый приложением
|
210
|
+
|
211
|
+
```ruby
|
212
|
+
StTools::System.memory # => 145734
|
213
|
+
```
|
214
|
+
|
215
|
+
Узнать ширину и высоту текущего окна терминала в CLI-режиме
|
216
|
+
|
217
|
+
```ruby
|
218
|
+
StTools::System.screen(:width) # => 114
|
219
|
+
StTools::System.screen(:height) # => 25
|
220
|
+
```
|
221
|
+
|
222
|
+
### StTools::ProgressBar
|
223
|
+
|
224
|
+
Данная бибилиотека базируется на геме 'progressbar-ruby' (https://github.com/jfelchner/ruby-progressbar), но надстройка над ним
|
225
|
+
упрощает использование библиотеки, и исключает некоторые проблемы.
|
226
|
+
|
227
|
+
Библиотека содержит две функции. Первая - инициирует начало отображения прогресс-бара
|
228
|
+
|
229
|
+
```ruby
|
230
|
+
@bar = ::StTools::ProgressBar.new(title: "Тестовый запуск",
|
231
|
+
footer: "Занято [memory], выполнено за [executed_at] сек.",
|
232
|
+
max: 10000000)
|
233
|
+
```
|
234
|
+
|
235
|
+
Задается заголовок, который будет отображен перед прогресс-баром. Затем указывается футер, который отобразиться как
|
236
|
+
только прогресс станет 100%. Футер содержит две шаблона:
|
237
|
+
- [memory], который будет заменен на результат вызова StTools::Human.memory
|
238
|
+
- [executed_at], который будет заменен на время в секундах завершенного процесса
|
239
|
+
|
240
|
+
Значение :max содержит финальное значение прогресса. Дополнительно рекомендуется задать значение :step, которое
|
241
|
+
показывает, на каком шаге в реальности должен меняться процент выполнения операции.
|
242
|
+
|
243
|
+
Затем, в цикле, который обеспечивает выполнение длительной операции, необходимо менять значение progress.
|
244
|
+
|
245
|
+
```ruby
|
246
|
+
10000010.times do |val|
|
247
|
+
@bar.progress = val
|
248
|
+
end
|
249
|
+
```
|
250
|
+
|
251
|
+
|
252
|
+
## Contributing
|
253
|
+
|
254
|
+
1. Fork it ( https://github.com/[my-github-username]/st_tools/fork )
|
255
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
256
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
257
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
258
|
+
5. Create a new Pull Request
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "st_tools"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
data/lib/i18n/en.yml
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
# Files in the config/locales directory are used for internationalization
|
2
|
+
# and are automatically loaded by Rails. If you want to use locales other
|
3
|
+
# than English, add the necessary files in this directory.
|
4
|
+
#
|
5
|
+
# To use the locales, use `I18n.t`:
|
6
|
+
#
|
7
|
+
# I18n.t 'hello'
|
8
|
+
#
|
9
|
+
# In views, this is aliased to just `t`:
|
10
|
+
#
|
11
|
+
# <%= t('hello') %>
|
12
|
+
#
|
13
|
+
# To use a different locale, set it with `I18n.locale`:
|
14
|
+
#
|
15
|
+
# I18n.locale = :es
|
16
|
+
#
|
17
|
+
# This would use the information in config/locales/es.yml.
|
18
|
+
#
|
19
|
+
# To learn more, please read the Rails Internationalization guide
|
20
|
+
# available at http://guides.rubyonrails.org/i18n.html.
|
21
|
+
|
22
|
+
en:
|
23
|
+
hello: "Hello world"
|
24
|
+
|
25
|
+
defaults: &defaults
|
26
|
+
month_names:
|
27
|
+
[~, January, February, March, April, May, June, July, August, September, October, November, December]
|
28
|
+
formats:
|
29
|
+
default: "%m/%d/%Y"
|
30
|
+
date_full: "%B %-d, %Y"
|
31
|
+
full_full: "%B %-d, %Y %I:%M:%S %P"
|
32
|
+
time_full: "%I:%M:%S %P"
|
33
|
+
date_short: "%m/%d/%Y"
|
34
|
+
full_short: "%m/%d/%Y %I:%M:%S %P"
|
35
|
+
time_short: "%I:%M %P"
|
36
|
+
date:
|
37
|
+
<<: *defaults
|
38
|
+
time:
|
39
|
+
<<: *defaults
|
40
|
+
pm: pm
|
41
|
+
am: am
|
42
|
+
|
43
|
+
|
44
|
+
common:
|
45
|
+
ago:
|
46
|
+
very_long: 'long, long ago'
|
47
|
+
just_now: 'just now'
|
48
|
+
ago_word: 'ago'
|
49
|
+
year:
|
50
|
+
one: year
|
51
|
+
two: years
|
52
|
+
other: years
|
53
|
+
month:
|
54
|
+
one: month
|
55
|
+
two: months
|
56
|
+
other: months
|
57
|
+
day:
|
58
|
+
one: day
|
59
|
+
two: days
|
60
|
+
other: days
|
61
|
+
hour:
|
62
|
+
one: hour
|
63
|
+
two: hours
|
64
|
+
other: hours
|
65
|
+
minute:
|
66
|
+
one: minute
|
67
|
+
two: minutes
|
68
|
+
other: minutes
|
69
|
+
second:
|
70
|
+
one: second
|
71
|
+
two: seconds
|
72
|
+
other: seconds
|
data/lib/i18n/ru.yml
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
ru:
|
2
|
+
hello: "Привет, мир!"
|
3
|
+
|
4
|
+
defaults: &defaults
|
5
|
+
month_names:
|
6
|
+
[~, января, февраля, марта, апреля, мая, июня, июля, августа, сентября, октября, ноября, декабря]
|
7
|
+
formats:
|
8
|
+
default: "%d/%m/%Y"
|
9
|
+
date_full: "%-d %B %Y г."
|
10
|
+
full_full: "%-d %B %Y г. %H:%M:%S"
|
11
|
+
time_full: "%H:%M:%S"
|
12
|
+
date_short: "%d/%m/%Y"
|
13
|
+
full_short: "%d/%m/%Y %H:%M"
|
14
|
+
time_short: "%H:%M"
|
15
|
+
date:
|
16
|
+
<<: *defaults
|
17
|
+
time:
|
18
|
+
<<: *defaults
|
19
|
+
|
20
|
+
|
21
|
+
common:
|
22
|
+
ago:
|
23
|
+
very_long: 'очень давно'
|
24
|
+
just_now: 'сейчас'
|
25
|
+
ago_word: 'назад'
|
26
|
+
year:
|
27
|
+
one: год
|
28
|
+
two: года
|
29
|
+
other: лет
|
30
|
+
month:
|
31
|
+
one: месяц
|
32
|
+
two: месяца
|
33
|
+
other: месяцев
|
34
|
+
day:
|
35
|
+
one: день
|
36
|
+
two: дня
|
37
|
+
other: дней
|
38
|
+
hour:
|
39
|
+
one: час
|
40
|
+
two: часа
|
41
|
+
other: часов
|
42
|
+
minute:
|
43
|
+
one: минута
|
44
|
+
two: минуты
|
45
|
+
other: минут
|
46
|
+
second:
|
47
|
+
one: секунда
|
48
|
+
two: секунды
|
49
|
+
other: секунд
|
data/lib/modules/fias.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
module StTools
|
2
|
+
module Module
|
3
|
+
module Fias
|
4
|
+
|
5
|
+
# Определяет принадлежность aoguid к федеральным городам (Москва, Санкт-Питербург, Байконур, Севастополь)
|
6
|
+
#
|
7
|
+
# @return [Boolean] true, если объект имеет тип uuid и равен aoguid одного из
|
8
|
+
# четырех федеральных городов
|
9
|
+
def federal?
|
10
|
+
::StTools::Fias.federal?(self)
|
11
|
+
end
|
12
|
+
|
13
|
+
# Определяет, является ли aoguid Москвой
|
14
|
+
#
|
15
|
+
# @return [Boolean] true, если объект имеет тип uuid и равен aoguid Москвы
|
16
|
+
def moscow?
|
17
|
+
::StTools::Fias.moscow?(self)
|
18
|
+
end
|
19
|
+
|
20
|
+
# Определяет, является ли aoguid Санкт-Петербургом
|
21
|
+
#
|
22
|
+
# @return [Boolean] true, если объект имеет тип uuid и равен aoguid Санкт-Петербурга
|
23
|
+
def spb?
|
24
|
+
::StTools::Fias.spb?(self)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Определяет, является ли aoguid Севастополем
|
28
|
+
#
|
29
|
+
# @return [Boolean] true, если объект имеет тип uuid и равен aoguid Севастополя
|
30
|
+
def sevastopol?
|
31
|
+
::StTools::Fias.sevastopol?(self)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Определяет, является ли aoguid Байконуром
|
35
|
+
#
|
36
|
+
# @return [Boolean] true, если объект имеет тип uuid и равен aoguid Байконура
|
37
|
+
def baikonur?
|
38
|
+
::StTools::Fias.baikonur?(self)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Определяет, содержит ли строка идентификатор типа uuid
|
42
|
+
#
|
43
|
+
# @return [Boolean] true, если строка имеет формат uuid
|
44
|
+
def uuid?
|
45
|
+
::StTools::Fias.uuid?(self)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Определяет, содержит ли строка почтовый индекс
|
49
|
+
#
|
50
|
+
# @return [Boolean] true, если строка имеет 6 цифр
|
51
|
+
def postalcode?
|
52
|
+
::StTools::Fias.postalcode?(self)
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module StTools
|
2
|
+
module Module
|
3
|
+
module Integer
|
4
|
+
|
5
|
+
# Переводит число в строку с размером в байтах, кбайтах, Мбайтах и пр.
|
6
|
+
#
|
7
|
+
# @return [String] строка с суффиксом
|
8
|
+
def human_number
|
9
|
+
::StTools::Human.number(self)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Переводит число в строку с размером в байтах, кбайтах, Мбайтах и пр.
|
13
|
+
#
|
14
|
+
# @return [String] строка с суффиксом
|
15
|
+
def human_bytes
|
16
|
+
::StTools::Human.bytes(self)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Переводит число в значение boolean (true или false). Любое число false кроме 1 (единицы)
|
20
|
+
#
|
21
|
+
# @return [Boolean] true или false
|
22
|
+
def to_bool
|
23
|
+
::StTools::String.to_bool(self)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
module StTools
|
2
|
+
module Module
|
3
|
+
module String
|
4
|
+
|
5
|
+
# Метод проводит транслитерацию русского текста
|
6
|
+
#
|
7
|
+
# @return [String] транслитерированная строка
|
8
|
+
def translit
|
9
|
+
::StTools::String.translit(self)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Метод заменяет случайно набранные английские символы (с, р, y) в соответствующие по написанию русские
|
13
|
+
#
|
14
|
+
# @return [String] строка, в которой случайно набранные английские символы заменены на русские
|
15
|
+
def delat
|
16
|
+
::StTools::String.delat(self)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Метод переводит русскую и английскую строку в нижний регистр без
|
20
|
+
# использования MultiByte (только UTF-8)
|
21
|
+
#
|
22
|
+
# @return [String] строка в нижнем регистре
|
23
|
+
# @example Перевод строки в нижний регистр
|
24
|
+
# "Владимир".upcase #=> "владимир"
|
25
|
+
def downcase
|
26
|
+
::StTools::String.downcase(self)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Метод переводит русскую и английскую строку в верхний регистр без
|
30
|
+
# использования MultiByte (только UTF-8)
|
31
|
+
#
|
32
|
+
# @return [String] строка в верхнем регистре
|
33
|
+
# @example Перевод строки в верхний регистр
|
34
|
+
# "Владимир".upcase #=> "ВЛАДИМИР"
|
35
|
+
def upcase
|
36
|
+
::StTools::String.upcase(self)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Метод удаляет пробелы в начале и конце строки, проводит #delat, #downcase
|
40
|
+
#
|
41
|
+
# @return [String] нормализованная строка
|
42
|
+
# @example Нормализация строки
|
43
|
+
# " Владимир".normalize #=> "владимир"
|
44
|
+
def normalize
|
45
|
+
::StTools::String.normalize(self)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Метод заменяет часть символов строки на звездочки
|
49
|
+
#
|
50
|
+
# @return [String] строка, в которой часть букв заменены на звездочки (случайным образом)
|
51
|
+
# @example Сокрытие части строки
|
52
|
+
# "Владимир".hide #=> "Вл*ди*ир"
|
53
|
+
def hide
|
54
|
+
::StTools::String.hide_text(self)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Метод разделяет строку на подстроки, и нормализует кажду подстроку через #normalize
|
58
|
+
#
|
59
|
+
# @param [String] separator строка-разделитель
|
60
|
+
# @param [Hash] opts - массив параметров вызова метода
|
61
|
+
# @option opts [Boolean] :sort - сортировать результирующий массив
|
62
|
+
# @option opts [Boolean] :uniq - удалить из результирующего массива дубликаты
|
63
|
+
# @return [Array] массив чисел
|
64
|
+
# @example Преобразование строки в массив чисел
|
65
|
+
# "Москва , Питер , Владимир".split(",") #=> ['москва', 'питер', 'владимир']
|
66
|
+
def split(separator, opts = {})
|
67
|
+
::StTools::String.split(self, separator, opts)
|
68
|
+
end
|
69
|
+
|
70
|
+
# Метод переводит введенные человеком цифры, перечисленные через запятую и тире
|
71
|
+
# в массив чисел
|
72
|
+
#
|
73
|
+
# @param [Hash] opts
|
74
|
+
# @option opts [Boolean] :sort - сортировать результирующий массив
|
75
|
+
# @option opts [Boolean] :uniq - удалить из результирующего массива дубликаты
|
76
|
+
# @return [Array] массив чисел
|
77
|
+
# @example Преобразование строки в массив чисел
|
78
|
+
# "6, 3, 8-10, 1".to_range #=> [6, 3, 8, 9, 10, 1]
|
79
|
+
# "6, 3, 8-10".to_range(sort: true) #=> [1, 3, 6, 8, 9, 10]
|
80
|
+
def to_range(opts = {})
|
81
|
+
::StTools::String.to_range(self, opts)
|
82
|
+
end
|
83
|
+
|
84
|
+
# Метод делает строку downcase но каждую букву каждого слова - заглавной
|
85
|
+
#
|
86
|
+
# @return [String] преобразованная строка
|
87
|
+
# @example Капитализация первых букв строки
|
88
|
+
# "саН-франЦИСКО".caps #=> "Сан-Франциско"
|
89
|
+
def caps
|
90
|
+
::StTools::String.caps(self)
|
91
|
+
end
|
92
|
+
|
93
|
+
# Метод переводит строку в значение boolean (true или false). True - если строка имеет одно из трех значений:
|
94
|
+
# ['true', 'on', '1']
|
95
|
+
#
|
96
|
+
# @return [Boolean] true или false
|
97
|
+
# @example проверка, что строка - true
|
98
|
+
# "True".to_bool #=> true
|
99
|
+
def to_bool
|
100
|
+
::StTools::String.to_bool(self)
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
data/lib/modules/time.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module StTools
|
2
|
+
module Module
|
3
|
+
module Time
|
4
|
+
|
5
|
+
def human_date(type = :full)
|
6
|
+
::StTools::Human.format_time(self, :date, type)
|
7
|
+
end
|
8
|
+
|
9
|
+
def human_time(type = :full)
|
10
|
+
::StTools::Human.format_time(self, :time, type)
|
11
|
+
end
|
12
|
+
|
13
|
+
def human_datetime(type = :full)
|
14
|
+
::StTools::Human.format_time(self, :full, type)
|
15
|
+
end
|
16
|
+
|
17
|
+
def human_ago(ago = true)
|
18
|
+
::StTools::Human.ago_in_words(self, ago)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|