st_tools 0.3.9 → 0.3.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +58 -2
- data/lib/modules/string.rb +20 -0
- data/lib/st_tools/string.rb +44 -1
- data/lib/st_tools/version.rb +1 -1
- data/test/string_lib_spec.rb +15 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 10f93a2349223d5bd2a740ff842b74f9cee2430d
|
4
|
+
data.tar.gz: ae363ce67f9587fde735756bfbbd5b6087afa74c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 86ba45333dd1dba115edac9cd691c5e14190f49588bf4433719e82f8f4470f12b200bfb86bd81705fe3f3715b6b70f8d45cd71eff9f895a1783dbdbafe69bcc5
|
7
|
+
data.tar.gz: b7ae48dfb3505891d48e1753fd90a6ada5e5829afb12920face31dbd602cb601d031825e7f7e5e3b35927cabf1330f6d7d4d5963d161127534080016c951e9dd
|
data/README.md
CHANGED
@@ -130,18 +130,24 @@ Time.now.format_date(:short) # => 28/04/2015
|
|
130
130
|
|
131
131
|
### StTools::String
|
132
132
|
|
133
|
+
#### translit
|
134
|
+
|
133
135
|
Транслитерация строки из русского на английский
|
134
136
|
|
135
137
|
```ruby
|
136
138
|
StTools::String.translit('Жмеринка') # => Zhmerinka
|
137
139
|
```
|
138
140
|
|
141
|
+
#### delat
|
142
|
+
|
139
143
|
Иногда пользователи вводят английские буквы, похожие на русские, чаще все - букву 'C'. Метод delat заменяет такие символы на русские
|
140
144
|
|
141
145
|
```ruby
|
142
146
|
StTools::String.delat('Соль') # => Соль
|
143
147
|
```
|
144
148
|
|
149
|
+
#### upcase/downcase
|
150
|
+
|
145
151
|
Перевести строку в верхний или нижний регистр. Используется метод, не использующий :mb_chars
|
146
152
|
|
147
153
|
```ruby
|
@@ -149,6 +155,8 @@ StTools::String.downcase('Москва') # => москва
|
|
149
155
|
StTools::String.upcase('Москва') # => МОСКВА
|
150
156
|
```
|
151
157
|
|
158
|
+
#### normalize
|
159
|
+
|
152
160
|
Иногда надо нормализовать строку и привести ее к виду, удобному для машинной обработки.
|
153
161
|
Метод normalize последовательно делает: strip, delat, downcase
|
154
162
|
|
@@ -156,6 +164,8 @@ StTools::String.upcase('Москва') # => МОСКВА
|
|
156
164
|
StTools::String.normalize(' Москва ') # => "москва"
|
157
165
|
```
|
158
166
|
|
167
|
+
#### caps
|
168
|
+
|
159
169
|
Следующий метод приводит строку к нижнему регистру, но делает первую букву заглавной.
|
160
170
|
Удобно для нормализации имени и фамилии, вводимых пользователем
|
161
171
|
|
@@ -171,13 +181,17 @@ StTools::String.caps('н.а.римский-корсаков пришел в го
|
|
171
181
|
#=> "Н.А.Римский-Корсаков Пришел В Гости К В.И. Ленину На Улицу Героев 1812-го Года"
|
172
182
|
```
|
173
183
|
|
174
|
-
|
175
|
-
|
184
|
+
#### hide
|
185
|
+
|
186
|
+
Для реализации деморежимов различных приложений иногда надо скрыть реальный результат. Для это можно
|
187
|
+
использовать метод hide
|
176
188
|
|
177
189
|
```ruby
|
178
190
|
StTools::String.hide('Краснодар') # => "Кра*но*ар"
|
179
191
|
```
|
180
192
|
|
193
|
+
#### to_bool
|
194
|
+
|
181
195
|
В Ruby отсутствует метод перевода строки пользователя в тип Boolean.
|
182
196
|
|
183
197
|
```ruby
|
@@ -203,6 +217,8 @@ StTools::String.to_bool(params[:opt1], false) #=> true
|
|
203
217
|
StTools::String.to_bool(params[:opt2], true) #=> true
|
204
218
|
```
|
205
219
|
|
220
|
+
#### split
|
221
|
+
|
206
222
|
Если пользователь введет в качестве входного параметра перечисление, следующий метод разобъет его на токены,
|
207
223
|
с нормализацией при необходимости
|
208
224
|
|
@@ -212,6 +228,8 @@ StTools::String.split('ТАНЯ, маша, петя', ',', normalize: true)
|
|
212
228
|
StTools::String.split('ТАНЯ, маша, петя', ',', normalize: true, sort: true) # => ['маша', 'петя', 'таня']
|
213
229
|
```
|
214
230
|
|
231
|
+
#### to_range
|
232
|
+
|
215
233
|
Если от пользователя требуется ввести численные значения в виде перечисления или диапазоне, нужно использовать
|
216
234
|
метод to_range
|
217
235
|
|
@@ -221,6 +239,8 @@ StTools::String.to_range('54, 3-6, 5, 1', uniq: true) # => [
|
|
221
239
|
StTools::String.to_range('54, 3-6, 5, 1', uniq: true, sort: true) # => [1, 3, 5, 6, 54]
|
222
240
|
```
|
223
241
|
|
242
|
+
#### pretty_list
|
243
|
+
|
224
244
|
Следующий метод `pretty_list` позволяет сделать human-подобное оформление списков-перечислений.
|
225
245
|
|
226
246
|
```ruby
|
@@ -237,6 +257,8 @@ StTools::Setup.setup(:en)
|
|
237
257
|
# => "Discount is <em>$100</em> or <em>$200</em>"
|
238
258
|
```
|
239
259
|
|
260
|
+
#### prune
|
261
|
+
|
240
262
|
В ряде случаев необходимо обрезать строку таким образом, чтобы на экране уместилась часть строки, и многоточие,
|
241
263
|
которе показывает, что строка была сокращена. Для этого можно использовать метод `StTools::String.prune`.
|
242
264
|
|
@@ -253,6 +275,40 @@ StTools::String.prune("Привет мир!", 12, words: true) #=> "Прив
|
|
253
275
|
`word: true`, то произойдет более "умное" обрезание фразы - не посреди слова (как показано в примере выше), а по границе
|
254
276
|
слова, то есть по пробелу между словами в меньшую сторону.
|
255
277
|
|
278
|
+
#### to_float
|
279
|
+
|
280
|
+
Метод `to_float` позволяет переводить различные строки, введенные пользователем, в тип `Float` языка Ruby.
|
281
|
+
|
282
|
+
```ruby
|
283
|
+
StTools::String.to_float('123.45678') #=> 123.45678
|
284
|
+
StTools::String.to_float('123.474565', round: 2) #=> 123.47
|
285
|
+
StTools::String.to_float('123,474565', round: 2) #=> 123.47
|
286
|
+
StTools::String.to_float(' 123,47456564', round: 2) #=> 123.47
|
287
|
+
StTools::String.to_float(' 10 123,47456', round: 2) #=> 10123.47
|
288
|
+
StTools::String.to_float(' - 10 123,474565', round: 2) #=> -10123.47
|
289
|
+
```
|
290
|
+
|
291
|
+
Если у Вас уже есть число в формате `Float` или `Integer`, то все равно можно вызвать метод `to_float`. При этом
|
292
|
+
произойдет только округление числа в соответствии с параметром `round`.
|
293
|
+
|
294
|
+
```ruby
|
295
|
+
StTools::String.to_float(145.5667, round: 2) #=> 145.57
|
296
|
+
StTools::String.to_float(23, round: 2) #=> 23
|
297
|
+
```
|
298
|
+
|
299
|
+
Возможны ситуации, когда параметр переданный является `nil` или строкой, не содержащей числа. В этом случае возможны
|
300
|
+
две модели поведения. Первая (установленная по умолчанию), выбрасывает Exception в случае, если переданная на вход
|
301
|
+
метода строка не содержит цифр. Другая модель предусматривает возвращаение нулевого значения при ошибке. Для этого
|
302
|
+
нужно установить параметр `stop` в значение `false`.
|
303
|
+
|
304
|
+
```ruby
|
305
|
+
StTools::String.to_float(nil) rescue 'fail') #=> "fail"
|
306
|
+
StTools::String.to_float(nil, stop: false) rescue 'fail') #=> 0
|
307
|
+
StTools::String.to_float('no digits') rescue 'fail') #=> "fail"
|
308
|
+
StTools::String.to_float('no digits', stop: false) rescue 'fail') #=> 0
|
309
|
+
```
|
310
|
+
|
311
|
+
#### Расширение класса String (include StTools)
|
256
312
|
|
257
313
|
Вы можете подмешать модуль `StTools::Module` в классы String, Integer, Time.
|
258
314
|
|
data/lib/modules/string.rb
CHANGED
@@ -103,6 +103,26 @@ module StTools
|
|
103
103
|
::StTools::String.prune(self, length, words, endwith)
|
104
104
|
end
|
105
105
|
|
106
|
+
# Метод преобразует строковое выражение в число с плавающей запятой. При этом метод корректно преобразует
|
107
|
+
# числа вида "12.34" и "12,34", то есть с точкой и запятой (но будет некорректный результат в случае
|
108
|
+
# американских чисел, где запятая - разделитель тысяч, а не дробная часть).
|
109
|
+
#
|
110
|
+
# @param [Integer] round число цифр после запятой при округлении. По умолчанию - 6
|
111
|
+
# @param [Object] stop если true, то при ошибке будет выброшен "Exception", иначе при ошибках будет возвращаться "0". По умолчанию - true.
|
112
|
+
# @return [Float] число с плавающей запятой
|
113
|
+
# @example Примеры использования
|
114
|
+
# '123.45678'.to_float #=> 123.45678
|
115
|
+
# '123.474565'.to_float(round: 2) #=> 123.47
|
116
|
+
# '123,474565'.to_float(round: 2) #=> 123.47
|
117
|
+
# ' 123,47456564'.to_float(round: 2) #=> 123.47
|
118
|
+
# ' 10 123,47456'.to_float(round: 2) #=> 10123.47
|
119
|
+
# ' - 10 123,474565'.to_float(round: 2) #=> -10123.47
|
120
|
+
# nil.to_float(round: 2) rescue 'fail' #=> "fail"
|
121
|
+
# nil.to_float(round: 2, stop: false) rescue 'fail' #=> 0
|
122
|
+
def to_float(round: 6, stop: true)
|
123
|
+
::StTools::String.to_float(self, round, stop)
|
124
|
+
end
|
125
|
+
|
106
126
|
# Метод переводит строку в значение boolean (true или false). True - если строка имеет одно из трех значений:
|
107
127
|
# ['true', 'on', '1']
|
108
128
|
#
|
data/lib/st_tools/string.rb
CHANGED
@@ -262,9 +262,52 @@ module StTools
|
|
262
262
|
return text[0, length] if length <= endwith.length
|
263
263
|
|
264
264
|
out = text.strip[0,length - endwith.length]
|
265
|
-
out.gsub!(/\s
|
265
|
+
out.gsub!(/\s[^\s]+?\z/, '') if words
|
266
266
|
out.strip + endwith
|
267
267
|
end
|
268
268
|
|
269
|
+
# Метод преобразует строковое выражение в число с плавающей запятой. При этом метод корректно преобразует
|
270
|
+
# числа вида "12.34" и "12,34", то есть с точкой и запятой (но будет некорректный результат в случае
|
271
|
+
# американских чисел, где запятая - разделитель тысяч, а не дробная часть).
|
272
|
+
#
|
273
|
+
# @param [String, Float, Integer] text строка или число, которое нужно преобразовать в Float
|
274
|
+
# @param [Integer] round число цифр после запятой при округлении. По умолчанию - 6
|
275
|
+
# @param [Object] stop если true, то при ошибке будет выброшен "Exception", иначе при ошибках будет возвращаться "0". По умолчанию - true.
|
276
|
+
# @return [Float] число с плавающей запятой
|
277
|
+
# @example Примеры использования
|
278
|
+
# StTools::String.to_float('123.45678') #=> 123.45678
|
279
|
+
# StTools::String.to_float('123.474565', round: 2) #=> 123.47
|
280
|
+
# StTools::String.to_float('123,474565', round: 2) #=> 123.47
|
281
|
+
# StTools::String.to_float(' 123,47456564', round: 2) #=> 123.47
|
282
|
+
# StTools::String.to_float(' 10 123,47456', round: 2) #=> 10123.47
|
283
|
+
# StTools::String.to_float(' - 10 123,474565', round: 2) #=> -10123.47
|
284
|
+
# StTools::String.to_float(nil, round: 2) rescue 'fail') #=> "fail"
|
285
|
+
# StTools::String.to_float(nil, round: 2, stop: false) rescue 'fail') #=> 0
|
286
|
+
# StTools::String.to_float(145.5667, round: 2) #=> 145.57
|
287
|
+
# StTools::String.to_float(23, round: 2) #=> 23
|
288
|
+
def self.to_float(text, round: 6, stop: true)
|
289
|
+
# http://stackoverflow.com/questions/1034418/determine-if-a-string-is-a-valid-float-value
|
290
|
+
if text.nil?
|
291
|
+
stop ? (raise TypeError, "can't convert nil into Float") : (return 0)
|
292
|
+
end
|
293
|
+
|
294
|
+
if text.is_a?(::Float) || text.is_a?(::Integer)
|
295
|
+
return text.to_f.round(round)
|
296
|
+
end
|
297
|
+
|
298
|
+
if text.is_a?(::String)
|
299
|
+
str = text.strip.gsub(/\,/, '.').gsub(/\s/, '')
|
300
|
+
if str.match(/\A\s*[+-]?((\d+_?)*\d+(\.(\d+_?)*\d+)?|\.(\d+_?)*\d+)(\s*|([eE][+-]?(\d+_?)*\d+)\s*)\z/)
|
301
|
+
begin
|
302
|
+
return str.to_f.round(round)
|
303
|
+
rescue Exception => e
|
304
|
+
stop ? (raise ArgumentError, "invalid value for Float(): #{str.inspect}") : (return 0)
|
305
|
+
end
|
306
|
+
end
|
307
|
+
end
|
308
|
+
|
309
|
+
stop ? (raise ArgumentError, "invalid value for Float(): #{text.inspect}") : (return 0)
|
310
|
+
end
|
311
|
+
|
269
312
|
end
|
270
313
|
end
|
data/lib/st_tools/version.rb
CHANGED
data/test/string_lib_spec.rb
CHANGED
@@ -154,4 +154,19 @@ describe 'Проверка методов StTools::String.*' do
|
|
154
154
|
expect(test).to eq('Привет...')
|
155
155
|
end
|
156
156
|
|
157
|
+
it 'to_float' do
|
158
|
+
expect(::StTools::String.to_float('123.45')).to eq(123.45)
|
159
|
+
expect(::StTools::String.to_float('123.474565647335', round: 2)).to eq(123.47)
|
160
|
+
expect(::StTools::String.to_float('123,474565647335', round: 2)).to eq(123.47)
|
161
|
+
expect(::StTools::String.to_float(' 123,474565647335', round: 2)).to eq(123.47)
|
162
|
+
expect(::StTools::String.to_float(' 10 123,474565647335', round: 2)).to eq(10123.47)
|
163
|
+
expect(::StTools::String.to_float(' - 10 123,474565647335', round: 2)).to eq(-10123.47)
|
164
|
+
expect((::StTools::String.to_float(nil, round: 2) rescue 'fail')).to eq('fail')
|
165
|
+
expect((::StTools::String.to_float(nil, round: 2, stop: false) rescue 'fail')).to eq(0)
|
166
|
+
expect((::StTools::String.to_float('no_digits', round: 2) rescue 'fail')).to eq('fail')
|
167
|
+
expect((::StTools::String.to_float('no_digits', round: 2, stop: false) rescue 'fail')).to eq(0)
|
168
|
+
expect(::StTools::String.to_float(145.5667, round: 2)).to eq(145.57)
|
169
|
+
expect(::StTools::String.to_float(23, round: 2)).to eq(23)
|
170
|
+
end
|
171
|
+
|
157
172
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: st_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.10
|
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-06-
|
11
|
+
date: 2015-06-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|