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 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