st_tools 0.3.18 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +37 -8
- data/lib/i18n/en.yml +12 -1
- data/lib/i18n/ru.yml +11 -1
- data/lib/st_tools.rb +60 -1
- data/lib/st_tools/human.rb +86 -31
- data/lib/st_tools/string.rb +33 -18
- data/lib/st_tools/version.rb +1 -1
- data/test/bench/strings/downcase.rb +30 -0
- data/test/human_lib_format_time2_spec.rb +58 -0
- data/test/human_lib_spec.rb +39 -8
- data/test/string_lib_spec.rb +13 -3
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a7fcb770812f74e220c7964ea4f065807e643d6
|
4
|
+
data.tar.gz: 692c8ba12cd6a0bc6d55f01e78e3b22653bc5978
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b3ccdc959bbaa8072d2753949442ec04cd56a1035ba0ad96106dac7edf8d3c1209d3b79658811715e9412fcfc068bb66a13cf7a328a40dab4240586af180a8e
|
7
|
+
data.tar.gz: d5c7bbe1d071cc8d3b60581041f64e902d2e11749844115f61ea4ac03126b221a541cc92ee7457472fca679af07b3da16fe8fc5fd1130ed7b2239e0b4b3b9f61
|
data/README.md
CHANGED
@@ -23,20 +23,32 @@ gem 'st_tools'
|
|
23
23
|
|
24
24
|
# Зависимости
|
25
25
|
|
26
|
-
Для работы гема требуется Ruby не младше версии 2.
|
26
|
+
Для работы гема требуется Ruby не младше версии 2.2.0. StTools не привязана к Rails и может использоваться в CLI-приложениях.
|
27
27
|
Класс StTools::ProgressBar является надстройкой над гемом 'progressbar-ruby'.
|
28
28
|
|
29
29
|
## Использование
|
30
30
|
|
31
31
|
Часть методов библиотеки поддерживают русскую и английскую локализацию.
|
32
32
|
Поскольку все методы StTools могут вызываться без создания экземпляра класса - вызов конструктура класса отсутствует.
|
33
|
-
|
33
|
+
Ряд методов библиотеки требуют настройки локализации. Для этого, в приложении Ruby CLI нужно использовать:
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
StTools.configure { |config| config.locale = :ru }
|
37
|
+
```
|
38
|
+
|
39
|
+
В приложении Rails необходимо создать файл `/initializers/st_tools.rb`, и включить в него:
|
40
|
+
```ruby
|
41
|
+
StTools.configure do |config|
|
42
|
+
config.locale = :ru
|
43
|
+
end
|
44
|
+
```
|
34
45
|
|
35
46
|
### StTools::Human
|
36
47
|
|
37
48
|
Вы вызываете в любой момент StTools::Human.memory и узнаете текущий размер памяти, занимаемый приложением (процессом)
|
38
49
|
|
39
50
|
```ruby
|
51
|
+
StTools.configure { |config| config.locale = :ru }
|
40
52
|
StTools::Human.memory # => 14 кбайт
|
41
53
|
StTools::Human.memory # => 45,3 Мбайт
|
42
54
|
StTools::Human.memory # => 2,6 Гбайт
|
@@ -45,6 +57,7 @@ StTools::Human.memory # => 2,6 Гбайт
|
|
45
57
|
Вы вызываете StTools::Human.bytes и перевести любое значение в человеко-удобный вид. Метод можно использовать для показа размера файла
|
46
58
|
|
47
59
|
```ruby
|
60
|
+
StTools.configure { |config| config.locale = :ru }
|
48
61
|
StTools::Human.bytes(345) # => 345 байт
|
49
62
|
StTools::Human.bytes(14653) # => 14,5 кбайт
|
50
63
|
StTools::Human.bytes(23653763) # => 23,4 Мбайт
|
@@ -54,6 +67,7 @@ StTools::Human.bytes(23653763) # => 23,4 Мбайт
|
|
54
67
|
Метод можно использовать для показа, например, суммы денег
|
55
68
|
|
56
69
|
```ruby
|
70
|
+
StTools.configure { |config| config.locale = :ru }
|
57
71
|
StTools::Human.number(345) # => 345
|
58
72
|
StTools::Human.number(14653) # => 14,6 тыс.
|
59
73
|
StTools::Human.number(23653763) # => 23,7 млн.
|
@@ -63,6 +77,7 @@ StTools::Human.number(23653763) # => 23,7 млн.
|
|
63
77
|
число цифр после запятой, и автоматически конвертировать точку в звпятую
|
64
78
|
|
65
79
|
```ruby
|
80
|
+
StTools.configure { |config| config.locale = :ru }
|
66
81
|
StTools::Human.pretty_number(345) # => 345
|
67
82
|
StTools::Human.pretty_number(345, round: 2) # => 345,00
|
68
83
|
StTools::Human.pretty_number(75345, round: 1) # => 75 345,0
|
@@ -73,14 +88,14 @@ StTools::Human.pretty_number('1675345.763', round: 1) # => 1 675 345,7
|
|
73
88
|
Вы имеете возможность узнать разницу между текущим временем и временем какого-либо события.
|
74
89
|
|
75
90
|
```ruby
|
76
|
-
StTools
|
91
|
+
StTools.configure { |config| config.locale = :ru }
|
77
92
|
StTools::Human.human_ago(DateTime.new(2014,12,31), true) # => 4 месяца 21 день назад
|
78
93
|
StTools::Human.human_ago(DateTime.new(2013,08,01), false) # => 1 год 8 месяца
|
79
94
|
StTools::Human.human_ago(Time.now - 15, true) # => 15 секунд назад
|
80
95
|
```
|
81
96
|
|
82
97
|
```ruby
|
83
|
-
StTools
|
98
|
+
StTools.configure { |config| config.locale = :en }
|
84
99
|
StTools::Human.human_ago(DateTime.new(2014,12,31), true) # => 4 months 21 days ago
|
85
100
|
StTools::Human.human_ago(DateTime.new(2013,08,01), false) # => 1 year 8 months
|
86
101
|
StTools::Human.human_ago(Time.now - 15, true) # => 15 seconds ago
|
@@ -96,17 +111,17 @@ StTools::Human.human_ago(Time.now - 15, true) # => 15 seconds
|
|
96
111
|
не временная метка, а просто количество секунд между двумя событиями.
|
97
112
|
|
98
113
|
```ruby
|
99
|
-
StTools
|
114
|
+
StTools.configure { |config| config.locale = :ru }
|
100
115
|
StTools::Human.seconds_ago(DateTime.new(2014,12,31), true) # => 4 months 21 days ago
|
101
116
|
StTools::Human.seconds_ago(DateTime.new(2013,08,01), false) # => 1 year 8 months
|
102
117
|
StTools::Human.seconds_ago(Time.now - 15, true) # => 15 seconds ago
|
103
118
|
```
|
104
119
|
|
105
120
|
|
106
|
-
Вы
|
121
|
+
Вы можете форматировать дату и время в соответствии с правилами русского и английского языка.
|
107
122
|
|
108
123
|
```ruby
|
109
|
-
StTools
|
124
|
+
StTools.configure { |config| config.locale = :ru }
|
110
125
|
StTools::Human.format_time(Time.now, :full, :full) # => 28 апреля 2015 г. 10:45:23
|
111
126
|
StTools::Human.format_time(Time.now, :date, :full) # => 28 апреля 2015 г.
|
112
127
|
StTools::Human.format_time(Time.now, :time, :full) # => 10:45:23
|
@@ -116,7 +131,7 @@ StTools::Human.format_time(Time.now, :time, :short) # => 10:45
|
|
116
131
|
```
|
117
132
|
|
118
133
|
```ruby
|
119
|
-
StTools
|
134
|
+
StTools.configure { |config| config.locale = :en }
|
120
135
|
StTools::Human.format_time(Time.now, :full, :full) # => April 28, 2015 09:45:23 am
|
121
136
|
StTools::Human.format_time(Time.now, :date, :full) # => April 28, 2015
|
122
137
|
StTools::Human.format_time(Time.now, :time, :full) # => 09:45:23 am
|
@@ -125,6 +140,20 @@ StTools::Human.format_time(Time.now, :date, :short) # => 04/28/2015
|
|
125
140
|
StTools::Human.format_time(Time.now, :time, :short) # => 09:45 am
|
126
141
|
```
|
127
142
|
|
143
|
+
Новая версия данной функции имеет более прстой и понятный синтаксис. Первый параметр - формат даты, второй - времени.
|
144
|
+
|
145
|
+
```ruby
|
146
|
+
StTools.configure { |config| config.locale = :ru }
|
147
|
+
StTools::Human.format_time2(Time.now, :human, :full) #=> "30 апреля 2015 г. 08:54:34"
|
148
|
+
StTools::Human.format_time2(Time.now, :human, :full, god: false) #=> "30 апреля 2015 08:54:34"
|
149
|
+
StTools::Human.format_time2(Time.now, :human, :short) #=> "30 апреля 2015 г. 8:54"
|
150
|
+
StTools::Human.format_time2(Time.now, :human, :none) #=> "30 апреля 2015 г."
|
151
|
+
StTools::Human.format_time2(Time.now, :full, :full) #=> "30/04/2015 08:54:34"
|
152
|
+
StTools::Human.format_time2(Time.now, :short, :short) #=> "30/04/15 8:54"
|
153
|
+
StTools::Human.format_time2(Time.now, :none, :full) #=> "08:54:34"
|
154
|
+
StTools::Human.format_time2(Time.now, :none, :short) #=> "8:54"
|
155
|
+
````
|
156
|
+
|
128
157
|
Вы можете подмешать модуль `StTools::Module` в классы String, Integer, Time.
|
129
158
|
|
130
159
|
```ruby
|
data/lib/i18n/en.yml
CHANGED
@@ -33,6 +33,13 @@ en:
|
|
33
33
|
date_short: "%m/%d/%Y"
|
34
34
|
full_short: "%m/%d/%Y %I:%M:%S %P"
|
35
35
|
time_short: "%I:%M %P"
|
36
|
+
|
37
|
+
# Values for format_time2
|
38
|
+
tfull: "%I:%M:%S %P"
|
39
|
+
tshort: "%I:%M %P"
|
40
|
+
dhuman: "%B %-d, %Y"
|
41
|
+
dfull: "%m/%d/%Y"
|
42
|
+
dshort: "%-m/%-d/%Y"
|
36
43
|
date:
|
37
44
|
<<: *defaults
|
38
45
|
time:
|
@@ -71,7 +78,11 @@ en:
|
|
71
78
|
two: seconds
|
72
79
|
other: seconds
|
73
80
|
|
74
|
-
|
81
|
+
st_tools:
|
82
|
+
bytes: "b,kb,Mb,Gb,Tb,Pb"
|
83
|
+
numbers: ",k,m,b,t"
|
84
|
+
numbers_separator: ""
|
75
85
|
pretty_list:
|
76
86
|
and: and
|
77
87
|
or: or
|
88
|
+
|
data/lib/i18n/ru.yml
CHANGED
@@ -12,6 +12,13 @@ ru:
|
|
12
12
|
date_short: "%d/%m/%Y"
|
13
13
|
full_short: "%d/%m/%Y %H:%M"
|
14
14
|
time_short: "%H:%M"
|
15
|
+
|
16
|
+
# Значения для format_time2
|
17
|
+
tfull: "%H:%M:%S"
|
18
|
+
tshort: "%H:%M"
|
19
|
+
dhuman: "%-d %B %Y"
|
20
|
+
dfull: "%d/%m/%Y"
|
21
|
+
dshort: "%-d/%-m/%Y"
|
15
22
|
date:
|
16
23
|
<<: *defaults
|
17
24
|
time:
|
@@ -48,7 +55,10 @@ ru:
|
|
48
55
|
two: секунды
|
49
56
|
other: секунд
|
50
57
|
|
51
|
-
|
58
|
+
st_tools:
|
59
|
+
bytes: "байт,кбайт,Мбайт,Гбайт,Тбайт,Пбайт"
|
60
|
+
numbers: ",тыс.,млн.,млрд.,трлн."
|
61
|
+
numbers_separator: " "
|
52
62
|
pretty_list:
|
53
63
|
and: и
|
54
64
|
or: или
|
data/lib/st_tools.rb
CHANGED
@@ -4,6 +4,7 @@ require "st_tools/version"
|
|
4
4
|
|
5
5
|
require 'ruby-progressbar'
|
6
6
|
require 'yaml'
|
7
|
+
require 'i18n'
|
7
8
|
|
8
9
|
module StTools
|
9
10
|
require "st_tools/common"
|
@@ -19,8 +20,65 @@ module StTools
|
|
19
20
|
require 'modules/time'
|
20
21
|
require 'modules/fias'
|
21
22
|
|
22
|
-
|
23
|
+
# Use tutorial https://robots.thoughtbot.com/mygem-configure-block
|
24
|
+
class << self
|
25
|
+
attr_accessor :configuration
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.configure
|
29
|
+
self.configuration ||= Configuration.new
|
30
|
+
yield(configuration)
|
31
|
+
end
|
32
|
+
|
33
|
+
class Configuration
|
34
|
+
attr_reader :locale
|
35
|
+
attr_accessor :bytes_array
|
36
|
+
attr_accessor :numbers_array
|
23
37
|
|
38
|
+
def initialize
|
39
|
+
locale = :ru
|
40
|
+
end
|
41
|
+
|
42
|
+
def locale=(val)
|
43
|
+
::I18n.load_path += Dir[File.join(File.dirname(__dir__), '/lib/i18n/*.yml')]
|
44
|
+
::I18n.backend.load_translations
|
45
|
+
case val.to_sym
|
46
|
+
when :ru, :en
|
47
|
+
@locale = val.to_sym
|
48
|
+
else
|
49
|
+
@locale = :ru
|
50
|
+
end
|
51
|
+
rebuild_bytes_array
|
52
|
+
rebuild_numbers_array
|
53
|
+
end
|
54
|
+
|
55
|
+
def rebuild_bytes_array
|
56
|
+
keys = I18n.t('st_tools.bytes', locale: @locale).split(",")
|
57
|
+
keys.map! { |x| x.strip }
|
58
|
+
raise "Must be 6 elements in array #{keys.inspect}" if keys.count != 6
|
59
|
+
@bytes_array = Hash.new
|
60
|
+
inc_value = 1024
|
61
|
+
keys.each do |key|
|
62
|
+
@bytes_array[key] = inc_value
|
63
|
+
inc_value *= 1024
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def rebuild_numbers_array
|
68
|
+
keys = I18n.t('st_tools.numbers', locale: @locale).split(",")
|
69
|
+
keys.map! { |x| x.strip }
|
70
|
+
raise "Must be 5 elements in array #{keys.inspect}" if keys.count != 5
|
71
|
+
@numbers_array = Hash.new
|
72
|
+
inc_value = 1000
|
73
|
+
keys.each do |key|
|
74
|
+
@numbers_array[key] = inc_value
|
75
|
+
inc_value *= 1000
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
class Setup
|
24
82
|
# Метод загрузки файлов локализации для методов форматирования времени. Принимает значения [:en, :ru]
|
25
83
|
#
|
26
84
|
# @param [Object] locale - язык локализации, поддерживается :ru, :en. Если передена неизвестная локализация
|
@@ -29,6 +87,7 @@ module StTools
|
|
29
87
|
def self.setup(locale)
|
30
88
|
locale = :ru unless [:ru, :en].include?(locale)
|
31
89
|
self.setup_locale(locale)
|
90
|
+
warn "[DEPRECATION] setup is will deprecated."
|
32
91
|
end
|
33
92
|
|
34
93
|
private
|
data/lib/st_tools/human.rb
CHANGED
@@ -3,47 +3,42 @@ module StTools
|
|
3
3
|
|
4
4
|
|
5
5
|
# Метод форматирует число, добавляя суффиксы 'тыс.', 'млн.' и пр.
|
6
|
+
# Предварительно необходимо вызвать StTools.configure { |config| config.locale = :ru }.
|
6
7
|
#
|
7
8
|
# @param [Integer] val исходное числовое значение
|
8
9
|
# @return [String] строка вида "512,4 тыс."
|
9
10
|
# @example Примеры использования
|
11
|
+
# StTools.configure { |config| config.locale = :ru }
|
10
12
|
# StTools::Human.number(123) #=> "123"
|
11
13
|
# StTools::Human.number(14563) #=> "14 тыс."
|
12
14
|
# StTools::Human.number(763552638) #=> "763.6 млн."
|
13
15
|
def self.number(val)
|
14
|
-
|
15
|
-
# noinspection RubyStringKeysInHashInspection
|
16
|
-
arr = {'' => 1000, 'тыс.' => 1000 * 1000, 'млн.' => 1000 * 1000 * 1000,
|
17
|
-
'млрд.' => 1000 * 1000 * 1000 * 1000, 'трлн.' => 1000 * 1000 * 1000 * 1000 * 1000}
|
18
|
-
|
19
|
-
arr.each_pair do |e, s|
|
16
|
+
StTools.configuration.numbers_array.each_pair do |e, s|
|
20
17
|
if val < s
|
21
|
-
if
|
22
|
-
return "#{(val.to_f / (s / 1000)).round(0)} #{e}"
|
18
|
+
if s <= 1000*1000
|
19
|
+
return "#{(val.to_f / (s / 1000)).round(0)}#{I18n.t('st_tools.numbers_separator', locale: StTools.configuration.locale)}#{e}"
|
23
20
|
else
|
24
|
-
return "#{(val.to_f / (s / 1000)).round(1)} #{e}"
|
21
|
+
return "#{(val.to_f / (s / 1000)).round(1)}#{I18n.t('st_tools.numbers_separator', locale: StTools.configuration.locale)}#{e}"
|
25
22
|
end
|
26
23
|
end
|
27
24
|
end
|
28
25
|
end
|
29
26
|
|
30
27
|
# Метод форматирует число, добавляя суффиксы 'кбайт', 'Мбайт' и др.
|
28
|
+
# Предварительно необходимо вызвать StTools.configure { |config| config.locale = :ru }.
|
31
29
|
#
|
32
30
|
# @param [Integer] val исходное числовое значение в байтах
|
33
31
|
# @return [String] строка вида "512,4 Мбайт"
|
34
32
|
# @example Примеры использования
|
33
|
+
# StTools.configure { |config| config.locale = :ru }
|
35
34
|
# StTools::Human.bytes(123) #=> "123 байта"
|
36
35
|
# StTools::Human.bytes(14563) #=> "14 кбайт"
|
37
36
|
# StTools::Human.bytes(763552638) #=> "728.2 Мбайт"
|
38
37
|
def self.bytes(val)
|
39
|
-
# todo: локлаизовать через i18N
|
40
38
|
# noinspection RubyStringKeysInHashInspection
|
41
|
-
|
42
|
-
'Гбайт' => 1024 * 1024 * 1024 * 1024, 'Тбайт' => 1024 * 1024 * 1024 * 1024 * 1024}
|
43
|
-
|
44
|
-
arr.each_pair do |e, s|
|
39
|
+
StTools.configuration.bytes_array.each_pair do |e, s|
|
45
40
|
if val < s
|
46
|
-
if
|
41
|
+
if s <= 1024*1024
|
47
42
|
return "#{(val.to_f / (s / 1024)).round(0)} #{e}"
|
48
43
|
else
|
49
44
|
return "#{(val.to_f / (s / 1024)).round(1)} #{e}"
|
@@ -61,13 +56,13 @@ module StTools
|
|
61
56
|
end
|
62
57
|
|
63
58
|
# Метод переводит DateTime в строку на русском или иных языках вида "4 дня 23 часа назад".
|
64
|
-
# Предварительно необходимо вызвать StTools.
|
59
|
+
# Предварительно необходимо вызвать StTools.configure { |config| config.locale = :ru }.
|
65
60
|
#
|
66
61
|
# @param [DateTime] time время и дата
|
67
62
|
# @param [Boolean] ago true, если надо добавить слово "назад" в конец строки
|
68
63
|
# @return [String] строка вида "3 дня 12 часов" или "3 дня 12 часов назад"
|
69
64
|
# @example Примеры использования
|
70
|
-
# StTools
|
65
|
+
# StTools.configure { |config| config.locale = :ru }
|
71
66
|
# StTools::Human.human_ago(Time.now - 23, true) #=> "23 секунды назад"
|
72
67
|
# StTools::Human.human_ago(Time.now - 24553, false) #=> 6 часов 49 минут"
|
73
68
|
# StTools::Human.human_ago(Time.now) #=> "сейчас"
|
@@ -75,37 +70,39 @@ module StTools
|
|
75
70
|
now = self.to_time(Time.now.strftime('%Y-%m-%d %H:%M:%S UTC'))
|
76
71
|
slf = self.to_time(time.strftime('%Y-%m-%d %H:%M:%S UTC'))
|
77
72
|
secs = (now - slf).to_i
|
78
|
-
return I18n.t('common.ago.very_long') if time.year < 1800
|
79
|
-
return I18n.t('common.ago.just_now') if secs > -1 && secs < 1
|
73
|
+
return I18n.t('common.ago.very_long', locale: StTools.configuration.locale) if time.year < 1800
|
74
|
+
return I18n.t('common.ago.just_now', locale: StTools.configuration.locale) if secs > -1 && secs < 1
|
80
75
|
return '' if secs <= -1
|
81
76
|
pair = self.ago_in_words_pair(secs)
|
82
|
-
pair << I18n.t("common.ago.ago_word") if ago == true
|
77
|
+
pair << I18n.t("common.ago.ago_word", locale: StTools.configuration.locale) if ago == true
|
83
78
|
pair.join(' ')
|
84
79
|
end
|
85
80
|
|
86
81
|
# Метод принимает параметр - количество секунд между двумя любыми событиями в секундах,
|
87
82
|
# и переводит их в строку на русском или иных языках вида "4 дня 23 часа назад".
|
88
|
-
# Предварительно необходимо вызвать StTools.
|
83
|
+
# Предварительно необходимо вызвать StTools.configure { |config| config.locale = :ru (или :en) }.
|
89
84
|
#
|
90
85
|
# @param [DateTime] sesc количество секунд
|
91
86
|
# @param [Boolean] ago true, если надо добавить слово "назад" в конец строки
|
92
87
|
# @return [String] строка вида "3 дня 12 часов" или "3 дня 12 часов назад"
|
93
88
|
# @example Примеры использования
|
94
|
-
# StTools
|
89
|
+
# StTools.configure { |config| config.locale = :ru }
|
95
90
|
# StTools::Human.seconds_ago(23, true) #=> "23 секунды назад"
|
96
91
|
# StTools::Human.seconds_ago(24553, false) #=> 6 часов 49 минут"
|
97
92
|
# StTools::Human.seconds_ago(0) #=> "сейчас"
|
98
93
|
def self.seconds_ago(secs, ago = true)
|
99
94
|
secs_i = secs.to_i
|
100
|
-
return I18n.t('common.ago.just_now') if secs_i > -1 && secs_i < 1
|
95
|
+
return I18n.t('common.ago.just_now', locale: StTools.configuration.locale) if secs_i > -1 && secs_i < 1
|
101
96
|
return '' if secs_i <= -1
|
102
97
|
pair = self.ago_in_words_pair(secs_i)
|
103
|
-
pair << I18n.t("common.ago.ago_word") if ago == true
|
98
|
+
pair << I18n.t("common.ago.ago_word", locale: StTools.configuration.locale) if ago == true
|
104
99
|
pair.join(' ')
|
105
100
|
end
|
106
101
|
|
107
102
|
# Метод переводит DateTime в строку на русском или иных языках. Предварительно необходимо вызвать
|
108
|
-
# StTools.
|
103
|
+
# StTools.configure { |config| config.locale = :ru (или :en) }.
|
104
|
+
#
|
105
|
+
# DEPRECATED
|
109
106
|
#
|
110
107
|
# @param [DateTime] time исходные время и дата
|
111
108
|
# @param [Sym] what формат возвращаемого результата, принимает одно из следующих значений
|
@@ -117,7 +114,7 @@ module StTools
|
|
117
114
|
# @option :short короткая форма
|
118
115
|
# @return [String] строка с форматированными датой и временем
|
119
116
|
# @example Примеры использования
|
120
|
-
# StTools
|
117
|
+
# StTools.configure { |config| config.locale = :ru }
|
121
118
|
# StTools::Human.format_time(Time.now, :full, :full) #=> "30 апреля 2015 г. 08:54:34"
|
122
119
|
# StTools::Human.format_time(Time.now, :date, :full) #=> "30 апреля 2015 г."
|
123
120
|
# StTools::Human.format_time(Time.now, :time, :full) #=> "08:54:34"
|
@@ -129,9 +126,57 @@ module StTools
|
|
129
126
|
warn "WARNING: what ':#{what.to_s}' must be in [:full, :date, :time]. Use ':full' now (at line #{__LINE__} of StTools::#{File.basename(__FILE__)})"
|
130
127
|
what = :full
|
131
128
|
end
|
132
|
-
return I18n.l(time, :format => "#{what.to_s}_#{type.to_s}".to_sym)
|
129
|
+
return I18n.l(time, :format => "#{what.to_s}_#{type.to_s}".to_sym, locale: StTools.configuration.locale)
|
133
130
|
end
|
134
131
|
|
132
|
+
# Метод переводит DateTime в строку на русском или иных языках. Предварительно необходимо вызвать
|
133
|
+
# StTools.configure { |config| config.locale = :ru (или :en) }.
|
134
|
+
#
|
135
|
+
# @param [DateTime] timestamp исходные время и дата
|
136
|
+
# @param [Sym] date формат возвращаемого результата, принимает одно из следующих значений
|
137
|
+
# @option :human форматирует дату и время в формате "21 марта 2011"
|
138
|
+
# @option :full форматирует дату и время в формате "21.03.2016"
|
139
|
+
# @option :short форматирует только дату в формате "21.3.16"
|
140
|
+
# @option :none игнорирует значение даты
|
141
|
+
# @param [Sym] time форма в которой возращать результат
|
142
|
+
# @option :full длинна форма в формате "08:23:03"
|
143
|
+
# @option :short короткая форма в формате "8:23", "22:34", "8:23 am"
|
144
|
+
# @option :none игнорирует значение времени
|
145
|
+
# @param [Sym] god при русской локализации и методе :human добавляет "г." после даты
|
146
|
+
# @return [String] строка с форматированными датой и временем
|
147
|
+
# @example Примеры использования
|
148
|
+
# StTools.configure { |config| config.locale = :ru }
|
149
|
+
# StTools::Human.format_time2(Time.now, :human, :full) #=> "30 апреля 2015 г. 08:54:34"
|
150
|
+
# StTools::Human.format_time2(Time.now, :human, :full, god: false) #=> "30 апреля 2015 08:54:34"
|
151
|
+
# StTools::Human.format_time2(Time.now, :human, :short) #=> "30 апреля 2015 г. 8:54"
|
152
|
+
# StTools::Human.format_time2(Time.now, :human, :none) #=> "30 апреля 2015 г."
|
153
|
+
# StTools::Human.format_time2(Time.now, :full, :full) #=> "30/04/2015 08:54:34"
|
154
|
+
# StTools::Human.format_time2(Time.now, :short, :short) #=> "30/04/15 8:54"
|
155
|
+
# StTools::Human.format_time2(Time.now, :none, :full) #=> "08:54:34"
|
156
|
+
# StTools::Human.format_time2(Time.now, :none, :short) #=> "8:54"
|
157
|
+
def self.format_time2(timestamp, date, time, god: true)
|
158
|
+
unless [:human, :full, :short, :none].include?(date)
|
159
|
+
warn "WARNING: date ':#{date.to_s}' must be in [:human, :full, :short, :none]. Use ':human' now (at line #{__LINE__} of StTools::#{File.basename(__FILE__)})"
|
160
|
+
date = :human
|
161
|
+
end
|
162
|
+
unless [:full, :short, :none].include?(time)
|
163
|
+
warn "WARNING: time ':#{time.to_s}' must be in [:full, :short, :none]. Use ':full' now (at line #{__LINE__} of StTools::#{File.basename(__FILE__)})"
|
164
|
+
time = :full
|
165
|
+
end
|
166
|
+
|
167
|
+
case
|
168
|
+
when date == :none && time == :none
|
169
|
+
""
|
170
|
+
when date != :none && time == :none
|
171
|
+
StTools::Human.format_time2_date(timestamp, date, god)
|
172
|
+
when date != :none && time != :none
|
173
|
+
"#{StTools::Human.format_time2_date(timestamp, date, god)} #{StTools::Human.format_time2_time(timestamp, time)}"
|
174
|
+
when date == :none && time != :none
|
175
|
+
StTools::Human.format_time2_time(timestamp, time)
|
176
|
+
else
|
177
|
+
""
|
178
|
+
end
|
179
|
+
end
|
135
180
|
|
136
181
|
# Метод оформляет число красивым способом, в виде "1 456 742,34".
|
137
182
|
#
|
@@ -193,10 +238,10 @@ module StTools
|
|
193
238
|
def self.ago_in_words_one_value(val, tag)
|
194
239
|
num100 = val % 100
|
195
240
|
num10 = val % 10
|
196
|
-
return val.to_s + " " + I18n.t("common.ago.#{tag}.other") if (num100 >=5 && num100 <= 20)
|
197
|
-
return val.to_s + " " + I18n.t("common.ago.#{tag}.one") if (num10 == 1)
|
198
|
-
return val.to_s + " " + I18n.t("common.ago.#{tag}.two") if ([2, 3, 4].include?(num10))
|
199
|
-
return val.to_s + " " + I18n.t("common.ago.#{tag}.other")
|
241
|
+
return val.to_s + " " + I18n.t("common.ago.#{tag}.other", locale: StTools.configuration.locale) if (num100 >=5 && num100 <= 20)
|
242
|
+
return val.to_s + " " + I18n.t("common.ago.#{tag}.one", locale: StTools.configuration.locale) if (num10 == 1)
|
243
|
+
return val.to_s + " " + I18n.t("common.ago.#{tag}.two", locale: StTools.configuration.locale) if ([2, 3, 4].include?(num10))
|
244
|
+
return val.to_s + " " + I18n.t("common.ago.#{tag}.other", locale: StTools.configuration.locale)
|
200
245
|
end
|
201
246
|
|
202
247
|
def self.to_time(time, form = :local)
|
@@ -217,5 +262,15 @@ module StTools
|
|
217
262
|
form == :utc ? time.utc : time.getlocal
|
218
263
|
end
|
219
264
|
|
265
|
+
def self.format_time2_time(timestamp, format)
|
266
|
+
I18n.l(timestamp, :format => "t#{format.to_s}".to_sym, locale: StTools.configuration.locale)
|
267
|
+
end
|
268
|
+
|
269
|
+
def self.format_time2_date(timestamp, format, god)
|
270
|
+
res = I18n.l(timestamp, :format => "d#{format.to_s}".to_sym, locale: StTools.configuration.locale)
|
271
|
+
res += " г." if god && StTools.configuration.locale == :ru
|
272
|
+
res
|
273
|
+
end
|
274
|
+
|
220
275
|
end
|
221
276
|
end
|
data/lib/st_tools/string.rb
CHANGED
@@ -16,8 +16,7 @@ module StTools
|
|
16
16
|
'ъ' => '', 'ю' => 'ju', 'я' => 'ja',
|
17
17
|
'Ж' => 'Zh', 'Ц' => 'Ts', 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sch',
|
18
18
|
'Ъ' => '', 'Ю' => 'Ju', 'Я' => 'Ja')
|
19
|
-
translited.gsub
|
20
|
-
return translited
|
19
|
+
translited.gsub('\'', '')
|
21
20
|
end
|
22
21
|
|
23
22
|
# Метод преобразует строку в нижний регистр с одновременной заменой буквы 'ё' на 'е'.
|
@@ -29,9 +28,15 @@ module StTools
|
|
29
28
|
# @example Примеры использования
|
30
29
|
# StTools::String.downcase("Hello, Вася!") #=> "hello, вася!"
|
31
30
|
def self.downcase(text)
|
32
|
-
|
33
|
-
|
34
|
-
|
31
|
+
if text
|
32
|
+
if RUBY_VERSION < "2.4"
|
33
|
+
return text.tr('QWERTYUIOPASDFGHJKLZXCVBNMАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ',
|
34
|
+
'qwertyuiopasdfghjklzxcvbnmабвгдеежзийклмнопрстуфхцчшщъыьэюя')
|
35
|
+
else
|
36
|
+
return text.downcase
|
37
|
+
end
|
38
|
+
end
|
39
|
+
""
|
35
40
|
end
|
36
41
|
|
37
42
|
# Метод преобразует строку в верхний регистр с одновременной заменой буквы 'Ё' на 'Е'.
|
@@ -43,9 +48,15 @@ module StTools
|
|
43
48
|
# @example Примеры использования
|
44
49
|
# StTools::String.upcase("Hello, Вася!") #=> "HELLO, ВАСЯ!"
|
45
50
|
def self.upcase(text)
|
46
|
-
|
47
|
-
|
48
|
-
|
51
|
+
if text
|
52
|
+
if RUBY_VERSION < "2.4"
|
53
|
+
return text.tr('qwertyuiopasdfghjklzxcvbnmабвгдеёжзийклмнопрстуфхцчшщъыьэюя',
|
54
|
+
'QWERTYUIOPASDFGHJKLZXCVBNMАБВГДЕЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ')
|
55
|
+
else
|
56
|
+
return text.upcase
|
57
|
+
end
|
58
|
+
end
|
59
|
+
""
|
49
60
|
end
|
50
61
|
|
51
62
|
# Метод заменяет в исходной строке английские символы, похожие
|
@@ -57,7 +68,7 @@ module StTools
|
|
57
68
|
# @return [String] текст только с русскими буквами
|
58
69
|
def self.delat(text)
|
59
70
|
return nil if text.nil?
|
60
|
-
|
71
|
+
text.tr('ёЁEeHCcTOoPpAHKXxBM', 'еЕЕеНСсТОоРрАНКХхВМ')
|
61
72
|
end
|
62
73
|
|
63
74
|
# Метод проводит нормализацию строки для последующей машиной обработки. При этом осуществляется:
|
@@ -68,12 +79,16 @@ module StTools
|
|
68
79
|
# - в строке удаляются повторные пробелы между словами
|
69
80
|
#
|
70
81
|
# @param [String] text строка, введенная пользователям
|
82
|
+
# @param [Boolean] delat флаг необходимости проводить де-латинизацию. По умолчанию - false
|
71
83
|
# @return [String] строка без 'ё', в нижнем регистре, без английских букв
|
72
84
|
# @example Примеры использования
|
73
85
|
# StTools::String.normalize(" Ёлки- ПАЛКИ") #=> "елки- палки"
|
74
|
-
|
75
|
-
|
76
|
-
|
86
|
+
# StTools::String.normalize("Ee", delat: true) #=> "ее" (русские буквы)
|
87
|
+
# StTools::String.normalize("Ee") #=> "ee" (латинские буквы)
|
88
|
+
def self.normalize(text, delat: false)
|
89
|
+
return nil if text.nil? || text.empty?
|
90
|
+
out = delat ? self.delat(text) : text.gsub('ё', 'е').gsub('Ё', 'Е')
|
91
|
+
self.downcase(out).strip.gsub(/[\s\t\u00A0]{1,100}/, ' ')
|
77
92
|
end
|
78
93
|
|
79
94
|
# Метод позволяет показывать клиенту строку в неполном объеме, с закрытием части символов в строке звездочкой.
|
@@ -91,7 +106,7 @@ module StTools
|
|
91
106
|
len = text.length - 3
|
92
107
|
0.upto((len/4).to_i) do
|
93
108
|
pos = rand(len)
|
94
|
-
text[pos,1] = '*'
|
109
|
+
text[pos, 1] = '*'
|
95
110
|
end
|
96
111
|
return text
|
97
112
|
end
|
@@ -218,7 +233,7 @@ module StTools
|
|
218
233
|
#
|
219
234
|
# @return [String] конвертированная строка
|
220
235
|
# @example Примеры использования
|
221
|
-
# StTools
|
236
|
+
# StTools.configure { |config| config.locale = :ru }
|
222
237
|
# StTools::String.pretty_list([1,2]) #=> "1 и 2"
|
223
238
|
# StTools::String.pretty_list([1,2,4]) #=> "1, 2 и 4"
|
224
239
|
# StTools::String.pretty_list([1,2,3,4], union: :or) #=> "1, 2, 3 или 4"
|
@@ -227,7 +242,7 @@ module StTools
|
|
227
242
|
return "#{pretag}#{items.first}#{afttag}" if items.count == 1
|
228
243
|
out = Array.new
|
229
244
|
last = items.last
|
230
|
-
arr = items[0,items.count-1]
|
245
|
+
arr = items[0, items.count-1]
|
231
246
|
arr.each do |one|
|
232
247
|
out << "#{pretag}#{one}#{afttag}"
|
233
248
|
out << separator + ' '
|
@@ -235,9 +250,9 @@ module StTools
|
|
235
250
|
out.pop
|
236
251
|
case union
|
237
252
|
when :and
|
238
|
-
out << " #{I18n.t('
|
253
|
+
out << " #{I18n.t('st_tools.pretty_list.and', locale: StTools.configuration.locale)} "
|
239
254
|
else
|
240
|
-
out << " #{I18n.t('
|
255
|
+
out << " #{I18n.t('st_tools.pretty_list.or', locale: StTools.configuration.locale)} "
|
241
256
|
end
|
242
257
|
out << "#{pretag}#{last}#{afttag}"
|
243
258
|
out.join
|
@@ -261,7 +276,7 @@ module StTools
|
|
261
276
|
return text if text.length <= length
|
262
277
|
return text[0, length] if length <= endwith.length
|
263
278
|
|
264
|
-
out = text.strip[0,length - endwith.length]
|
279
|
+
out = text.strip[0, length - endwith.length]
|
265
280
|
out.gsub!(/\s[^\s]+?\z/, '') if words
|
266
281
|
out.strip + endwith
|
267
282
|
end
|
data/lib/st_tools/version.rb
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
require "st_tools"
|
2
|
+
|
3
|
+
input = "Слово о полку ИГОРЕВЕ (Slovo O POLKU IGOREVE)"
|
4
|
+
count = 50_000
|
5
|
+
total = 5
|
6
|
+
|
7
|
+
def test_st_tools(str, count)
|
8
|
+
started_at = Time.now.to_f
|
9
|
+
count.times do
|
10
|
+
StTools::String.downcase(str)
|
11
|
+
end
|
12
|
+
executed_at = Time.now.to_f - started_at
|
13
|
+
speed = count.to_f / executed_at
|
14
|
+
puts "Executed at: #{executed_at.round(3)} sec (speed = #{speed.round(1)} ops/sec)"
|
15
|
+
speed
|
16
|
+
end
|
17
|
+
|
18
|
+
puts "RUBY_VERSION: #{RUBY_VERSION}"
|
19
|
+
|
20
|
+
avg = 0
|
21
|
+
puts "StTools::Strings.downcase"
|
22
|
+
total.times do
|
23
|
+
avg += test_st_tools(input, count)
|
24
|
+
end
|
25
|
+
puts "------------------------------------------------------"
|
26
|
+
puts "Average speed = #{(avg.to_f / total).round(1)} ops/sec"
|
27
|
+
puts
|
28
|
+
|
29
|
+
|
30
|
+
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require 'st_tools'
|
3
|
+
|
4
|
+
describe 'Проверка методов StTools::Human.format_time2 (:ru)' do
|
5
|
+
it '.format_time2 (:human, :full)' do
|
6
|
+
StTools.configure { |config| config.locale = :ru }
|
7
|
+
test = ::StTools::Human.format_time2(Time.now, :human, :full)
|
8
|
+
expect(test).to match(/[а-я]{3,10}/)
|
9
|
+
expect(test).to match(/г\./)
|
10
|
+
expect(test).to match(/\d{2}\:\d{2}\:\d{2}/)
|
11
|
+
end
|
12
|
+
|
13
|
+
it '.format_time2 (:human, :full, god:false)' do
|
14
|
+
StTools.configure { |config| config.locale = :ru }
|
15
|
+
test = ::StTools::Human.format_time2(Time.now, :human, :full, god: false)
|
16
|
+
expect(test).to match(/[а-я]{3,10}/)
|
17
|
+
expect(test).to_not match(/г\./)
|
18
|
+
expect(test).to match(/\d{2}\:\d{2}\:\d{2}/)
|
19
|
+
end
|
20
|
+
|
21
|
+
it '.format_time2 (:full, :full)' do
|
22
|
+
StTools.configure { |config| config.locale = :ru }
|
23
|
+
test = ::StTools::Human.format_time2(Time.now, :full, :full)
|
24
|
+
expect(test).to match(/\d{2}\/\d{2}\/\d{4}/)
|
25
|
+
expect(test).to match(/\d{2}\:\d{2}\:\d{2}/)
|
26
|
+
end
|
27
|
+
|
28
|
+
it '.format_time2 (:full, :short)' do
|
29
|
+
StTools.configure { |config| config.locale = :ru }
|
30
|
+
test = ::StTools::Human.format_time2(Time.now, :full, :short)
|
31
|
+
expect(test).to match(/\d{2}\/\d{2}\/\d{4}/)
|
32
|
+
expect(test).to_not match(/\d{2}\:\d{2}\:\d{2}/)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe 'Проверка методов StTools::Human.format_time2 (:en)' do
|
37
|
+
it '.format_time2 (:human, :full)' do
|
38
|
+
StTools.configure { |config| config.locale = :en }
|
39
|
+
test = ::StTools::Human.format_time2(Time.now, :human, :full)
|
40
|
+
expect(test).to match(/[a-zA-Z]{3,10}/)
|
41
|
+
expect(test).to match(/\d{2}\:\d{2}\:\d{2}/)
|
42
|
+
end
|
43
|
+
|
44
|
+
it '.format_time2 (:full, :full)' do
|
45
|
+
StTools.configure { |config| config.locale = :en }
|
46
|
+
test = ::StTools::Human.format_time2(Time.now, :full, :full)
|
47
|
+
expect(test).to match(/\d{2}\/\d{2}\/\d{4}/)
|
48
|
+
expect(test).to match(/\d{2}\:\d{2}\:\d{2}/)
|
49
|
+
end
|
50
|
+
|
51
|
+
it '.format_time2 (:full, :short)' do
|
52
|
+
StTools.configure { |config| config.locale = :en }
|
53
|
+
test = ::StTools::Human.format_time2(Time.now, :full, :short)
|
54
|
+
expect(test).to match(/\d{2}\/\d{2}\/\d{4}/)
|
55
|
+
expect(test).to_not match(/\d{2}\:\d{2}\:\d{2}/)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
data/test/human_lib_spec.rb
CHANGED
@@ -4,63 +4,94 @@ require 'st_tools'
|
|
4
4
|
|
5
5
|
describe 'Проверка методов StTools::Human.*' do
|
6
6
|
it '.bytes(234)' do
|
7
|
+
StTools.configure { |config| config.locale = :ru }
|
7
8
|
test = ::StTools::Human.bytes(234)
|
8
9
|
expect(test).to include('234')
|
9
10
|
expect(test).to include('байт')
|
10
11
|
end
|
11
12
|
|
12
13
|
it '.bytes(14234)' do
|
14
|
+
StTools.configure { |config| config.locale = :ru }
|
13
15
|
test = ::StTools::Human.bytes(14234)
|
14
16
|
expect(test).to include('14')
|
15
17
|
expect(test).to include('кбайт')
|
16
18
|
end
|
17
19
|
|
20
|
+
it '.bytes(:en, 234)' do
|
21
|
+
StTools.configure { |config| config.locale = :en }
|
22
|
+
test = ::StTools::Human.bytes(234)
|
23
|
+
expect(test).to include('234')
|
24
|
+
expect(test).to include('b')
|
25
|
+
end
|
26
|
+
|
27
|
+
it '.bytes(:en, 14234)' do
|
28
|
+
StTools.configure { |config| config.locale = :en }
|
29
|
+
test = ::StTools::Human.bytes(14234)
|
30
|
+
expect(test).to include('14')
|
31
|
+
expect(test).to include('kb')
|
32
|
+
end
|
33
|
+
|
18
34
|
it '.number(234)' do
|
35
|
+
StTools.configure { |config| config.locale = :ru }
|
19
36
|
test = ::StTools::Human.number(234)
|
20
37
|
expect(test).to include('234')
|
21
38
|
end
|
22
39
|
|
23
40
|
it '.number(14234)' do
|
41
|
+
StTools.configure { |config| config.locale = :ru }
|
24
42
|
test = ::StTools::Human.number(14234)
|
25
43
|
expect(test).to include('14')
|
26
|
-
expect(test).to include('тыс.')
|
44
|
+
expect(test).to include(' тыс.')
|
45
|
+
end
|
46
|
+
|
47
|
+
it '.number(:en, 234)' do
|
48
|
+
StTools.configure { |config| config.locale = :en }
|
49
|
+
test = ::StTools::Human.number(234)
|
50
|
+
expect(test).to include('234')
|
51
|
+
end
|
52
|
+
|
53
|
+
it '.number(:en, 14234)' do
|
54
|
+
StTools.configure { |config| config.locale = :en }
|
55
|
+
test = ::StTools::Human.number(14234)
|
56
|
+
expect(test).to include('14k')
|
27
57
|
end
|
28
58
|
|
29
59
|
it '.memory' do
|
60
|
+
StTools.configure { |config| config.locale = :ru }
|
30
61
|
test = ::StTools::Human.memory
|
31
62
|
expect(test).to include('байт')
|
32
63
|
end
|
33
64
|
|
34
65
|
it '.human_ago (:ru)' do
|
35
|
-
|
66
|
+
StTools.configure { |config| config.locale = :ru }
|
36
67
|
test = ::StTools::Human.human_ago(DateTime.new(2001,2,3,4,5,6,'+7'), true)
|
37
68
|
expect(test).to include('назад')
|
38
69
|
expect(test).to include('лет')
|
39
70
|
end
|
40
71
|
|
41
72
|
it '.human_ago (:en)' do
|
42
|
-
|
73
|
+
StTools.configure { |config| config.locale = :en }
|
43
74
|
test = ::StTools::Human.human_ago(DateTime.new(2001,2,3,4,5,6,'+7'), true)
|
44
75
|
expect(test).to include('ago')
|
45
76
|
expect(test).to include('years')
|
46
77
|
end
|
47
78
|
|
48
79
|
it '.seconds_ago (:ru)' do
|
49
|
-
|
80
|
+
StTools.configure { |config| config.locale = :ru }
|
50
81
|
test = ::StTools::Human.seconds_ago(67, true)
|
51
82
|
expect(test).to include('назад')
|
52
83
|
expect(test).to include('1 минута')
|
53
84
|
end
|
54
85
|
|
55
86
|
it '.seconds_ago (:en)' do
|
56
|
-
|
87
|
+
StTools.configure { |config| config.locale = :en }
|
57
88
|
test = ::StTools::Human.seconds_ago(67, true)
|
58
89
|
expect(test).to include('ago')
|
59
90
|
expect(test).to include('1 minute')
|
60
91
|
end
|
61
92
|
|
62
93
|
it '.format_time (:ru)' do
|
63
|
-
|
94
|
+
StTools.configure { |config| config.locale = :ru }
|
64
95
|
test = ::StTools::Human.format_time(Time.now, :full, :full)
|
65
96
|
expect(test).to match(/[а-я]{1,3}/)
|
66
97
|
test = ::StTools::Human.format_time(Time.now, :full, :short)
|
@@ -68,7 +99,7 @@ describe 'Проверка методов StTools::Human.*' do
|
|
68
99
|
end
|
69
100
|
|
70
101
|
it '.format_time (:en)' do
|
71
|
-
|
102
|
+
StTools.configure { |config| config.locale = :en }
|
72
103
|
test = ::StTools::Human.format_time(Time.now, :full, :full)
|
73
104
|
expect(test).to match(/[a-z]{1,3}/i)
|
74
105
|
test = ::StTools::Human.format_time(Time.now, :full, :short)
|
@@ -95,5 +126,5 @@ describe 'Проверка методов StTools::Human.*' do
|
|
95
126
|
expect(test).to match('0')
|
96
127
|
end
|
97
128
|
|
129
|
+
end
|
98
130
|
|
99
|
-
end
|
data/test/string_lib_spec.rb
CHANGED
@@ -14,10 +14,20 @@ describe 'Проверка методов StTools::String.*' do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
it '.normalize' do
|
17
|
-
test = ::StTools::String.normalize('Ярослав Му(y)дрёный')
|
17
|
+
test = ::StTools::String.normalize('Ярослав Му(y)дрёный', delat: true)
|
18
18
|
expect(test).to include('ярослав му(y)дреный')
|
19
19
|
end
|
20
20
|
|
21
|
+
it '.normalize без delat' do
|
22
|
+
test = ::StTools::String.normalize('Ee') # Английские буквы
|
23
|
+
expect(test).to include('ee') # Английские буквы
|
24
|
+
end
|
25
|
+
|
26
|
+
it '.normalize с delat' do
|
27
|
+
test = ::StTools::String.normalize('Ee', delat: true) # Английкие буквы
|
28
|
+
expect(test).to include('ее') # Русские буквы
|
29
|
+
end
|
30
|
+
|
21
31
|
it '.downcase("EngLish")' do
|
22
32
|
test = ::StTools::String.downcase('EngLish')
|
23
33
|
expect(test).to include('english')
|
@@ -112,7 +122,7 @@ describe 'Проверка методов StTools::String.*' do
|
|
112
122
|
end
|
113
123
|
|
114
124
|
it 'pretty_list - ru' do
|
115
|
-
|
125
|
+
StTools.configure { |config| config.locale = :ru }
|
116
126
|
test = ::StTools::String.pretty_list(['Паша'])
|
117
127
|
expect(test).to eq('Паша')
|
118
128
|
test = ::StTools::String.pretty_list(['Паша', 'Маша'])
|
@@ -126,7 +136,7 @@ describe 'Проверка методов StTools::String.*' do
|
|
126
136
|
end
|
127
137
|
|
128
138
|
it 'pretty_list - en' do
|
129
|
-
|
139
|
+
StTools.configure { |config| config.locale = :en }
|
130
140
|
test = ::StTools::String.pretty_list(['Паша'])
|
131
141
|
expect(test).to eq('Паша')
|
132
142
|
test = ::StTools::String.pretty_list(['Паша', 'Маша'])
|
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.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stan Zhuravlev
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -98,8 +98,10 @@ files:
|
|
98
98
|
- lib/st_tools/system.rb
|
99
99
|
- lib/st_tools/tokenizer.rb
|
100
100
|
- lib/st_tools/version.rb
|
101
|
+
- test/bench/strings/downcase.rb
|
101
102
|
- test/countries_lib_spec.rb
|
102
103
|
- test/fias_lib_spec.rb
|
104
|
+
- test/human_lib_format_time2_spec.rb
|
103
105
|
- test/human_lib_spec.rb
|
104
106
|
- test/progress_bar_lib_spec.rb
|
105
107
|
- test/string_caps_lib_spec.rb
|