st_tools 0.3.9 → 0.3.10

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: 43ec9fa72dac604d2acb1fda81c52417ccf5c2cd
4
- data.tar.gz: 04f54d9f33e84cf8f9cfa8ec05072ae58c56c436
3
+ metadata.gz: 10f93a2349223d5bd2a740ff842b74f9cee2430d
4
+ data.tar.gz: ae363ce67f9587fde735756bfbbd5b6087afa74c
5
5
  SHA512:
6
- metadata.gz: a74cac459d7d97a7e3a9d5e4de5a9419a64f993b8a81a5e3ac24b9ce18db7de1d29f02ffae9f7007c5580e335164ddb90aa5b00c06d3093935e3bc26b54dd5a9
7
- data.tar.gz: b3d422acf564373ecfc93de98307cdadc76ff8e644fbbb8a3262318674c138c7cab9c20539e068c410297ae79ea47e05084ee576ce509e4991733589a8140333
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
- Для это можно использовать метод hide
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
 
@@ -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
  #
@@ -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.+\z/, '') if words
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
@@ -1,3 +1,3 @@
1
1
  module StTools
2
- VERSION = '0.3.9'
2
+ VERSION = '0.3.10'
3
3
  end
@@ -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.9
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-04 00:00:00.000000000 Z
11
+ date: 2015-06-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler