st_tools 0.3.7 → 0.3.8

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: 9db3fa6dd4099dfcecfe2d25cd33aad9a2d0af51
4
- data.tar.gz: 16898f9a9f298572600b11c61220bfa8ccfbb117
3
+ metadata.gz: a88a647c0f49b178c918012abe51b2726ecf6df2
4
+ data.tar.gz: a337d8e0a59aae2051b5d9aaa628f02c08d8f352
5
5
  SHA512:
6
- metadata.gz: 15e8352e574b673a287db3c7a83b91ac9fddc368b50584caf0b138616127b91caffed2a1395695456056c65cd704e6dc02f37c974f1c4261844a2494d808914a
7
- data.tar.gz: 8c92502e4e9c7e5b3e1ce931a644e96145febac502d1f74ded2e58a2d1d7cd8a0506ffcdfe4614056b65acd043a8e25a2fd7c4f20f8bd3cd96d6d85946c3d6b2
6
+ metadata.gz: df2417819b173f060738656706bfd3f1d643707a822cc4274bc58114cd6f4e9036c485702f883000b6a6b5ea75d3a9f8cdc2cf812a2f980a0bf97806588ba81c
7
+ data.tar.gz: b10f05b28ae6266b5e6319ec54c62023a0f20efb77181b2f75dc6faf4c8406dc16ce322ac8bad19981d6bdd5f6ba8e228ac710865c9f1be519bf9fb3dbc120c7
data/README.md CHANGED
@@ -221,6 +221,22 @@ StTools::String.to_range('54, 3-6, 5, 1', uniq: true) # => [
221
221
  StTools::String.to_range('54, 3-6, 5, 1', uniq: true, sort: true) # => [1, 3, 5, 6, 54]
222
222
  ```
223
223
 
224
+ Следующий метод `pretty_list` позволяет сделать human-подобное оформление списков-перечислений.
225
+
226
+ ```ruby
227
+ StTools::Setup.setup(:ru)
228
+ 'Мы работаем ' + StTools::String.pretty_list([4,5,6]) + ' мая'
229
+ # => "Мы работаем 4, 5 и 6 мая"
230
+ 'Доехать можно на трамваях ' + StTools::String.pretty_list([67, 89], union: :or) + ' маршрутов'
231
+ # => "Доехать можно на трамвае 67 или 89 маршрутов"
232
+ 'Скидка составит ' + StTools::String.pretty_list([100, 200], union: :or, pretag: '<em>', afttag: '</em>') + ' руб.'
233
+ # => "Скидка составит <em>100</em> или <em>200</em> руб."
234
+
235
+ StTools::Setup.setup(:en)
236
+ 'Discount is ' + StTools::String.pretty_list([100, 200], union: :or, pretag: '<em>$', afttag: '</em>')
237
+ # => "Discount is <em>$100</em> or <em>$200</em>"
238
+ ```
239
+
224
240
  Вы можете подмешать модуль `StTools::Module` в классы String, Integer, Time.
225
241
 
226
242
  ```ruby
data/lib/i18n/en.yml CHANGED
@@ -69,4 +69,9 @@ en:
69
69
  second:
70
70
  one: second
71
71
  two: seconds
72
- other: seconds
72
+ other: seconds
73
+
74
+ string:
75
+ pretty_list:
76
+ and: and
77
+ or: or
data/lib/i18n/ru.yml CHANGED
@@ -46,4 +46,9 @@ ru:
46
46
  second:
47
47
  one: секунда
48
48
  two: секунды
49
- other: секунд
49
+ other: секунд
50
+
51
+ string:
52
+ pretty_list:
53
+ and: и
54
+ or: или
@@ -206,5 +206,42 @@ module StTools
206
206
  false
207
207
  end
208
208
 
209
+ # Метод преобразует список Array в строку перечисление вида "это, это и это". Метод позволяет
210
+ # делать перечсиелние на разных языках, использовать частицы 'и' и 'или', а также оформлять
211
+ # список тегами HTML.
212
+ #
213
+ # @param [Array] items массив значений для оформления в виде списка
214
+ # @param [String] separator знак разделитель, по умолчанию запятая (',')
215
+ # @param [Sym] union признак частицы, если указать :and, то будет использована частица 'и', либо 'или' в других случаях
216
+ # @param [String] pretag открывающий тег HTML для обрамления элементов списка
217
+ # @param [String] afttag закрывающий тег HTML для обрамления элементов списка
218
+ #
219
+ # @return [String] конвертированная строка
220
+ # @example Примеры использования
221
+ # StTools::Setup.setup(:ru)
222
+ # StTools::String.pretty_list([1,2]) #=> "1 и 2"
223
+ # StTools::String.pretty_list([1,2,4]) #=> "1, 2 и 4"
224
+ # StTools::String.pretty_list([1,2,3,4], union: :or) #=> "1, 2, 3 или 4"
225
+ def self.pretty_list(items, separator: ',', union: :and, pretag: '', afttag: '')
226
+ return '' if items.nil? || items.empty?
227
+ return "#{pretag}#{items.first}#{afttag}" if items.count == 1
228
+ out = Array.new
229
+ last = items.last
230
+ arr = items[0,items.count-1]
231
+ arr.each do |one|
232
+ out << "#{pretag}#{one}#{afttag}"
233
+ out << separator + ' '
234
+ end
235
+ out.pop
236
+ case union
237
+ when :and
238
+ out << " #{I18n.t('string.pretty_list.and')} "
239
+ else
240
+ out << " #{I18n.t('string.pretty_list.or')} "
241
+ end
242
+ out << "#{pretag}#{last}#{afttag}"
243
+ out.join
244
+ end
245
+
209
246
  end
210
247
  end
@@ -1,3 +1,3 @@
1
1
  module StTools
2
- VERSION = '0.3.7'
2
+ VERSION = '0.3.8'
3
3
  end
@@ -106,5 +106,38 @@ describe 'Проверка методов StTools::String.*' do
106
106
  expect(test).to eq(false)
107
107
  end
108
108
 
109
+ it 'pretty_list(nil)' do
110
+ test = ::StTools::String.pretty_list(nil)
111
+ expect(test).to eq('')
112
+ end
113
+
114
+ it 'pretty_list - ru' do
115
+ ::StTools::Setup.setup(:ru)
116
+ test = ::StTools::String.pretty_list(['Паша'])
117
+ expect(test).to eq('Паша')
118
+ test = ::StTools::String.pretty_list(['Паша', 'Маша'])
119
+ expect(test).to eq('Паша и Маша')
120
+ test = ::StTools::String.pretty_list(['Паша', 'Маша', 'Саша'])
121
+ expect(test).to eq('Паша, Маша и Саша')
122
+ test = ::StTools::String.pretty_list(['Паша', 'Маша', 'Саша'], union: :or)
123
+ expect(test).to eq('Паша, Маша или Саша')
124
+ test = ::StTools::String.pretty_list(['Паша', 'Маша', 'Саша'], union: :or, pretag: '<em>', afttag: '</em>')
125
+ expect(test).to eq('<em>Паша</em>, <em>Маша</em> или <em>Саша</em>')
126
+ end
127
+
128
+ it 'pretty_list - en' do
129
+ ::StTools::Setup.setup(:en)
130
+ test = ::StTools::String.pretty_list(['Паша'])
131
+ expect(test).to eq('Паша')
132
+ test = ::StTools::String.pretty_list(['Паша', 'Маша'])
133
+ expect(test).to eq('Паша and Маша')
134
+ test = ::StTools::String.pretty_list(['Паша', 'Маша', 'Саша'])
135
+ expect(test).to eq('Паша, Маша and Саша')
136
+ test = ::StTools::String.pretty_list(['Паша', 'Маша', 'Саша'], union: :or)
137
+ expect(test).to eq('Паша, Маша or Саша')
138
+ test = ::StTools::String.pretty_list(['Паша', 'Маша', 'Саша'], union: :or, pretag: '<em>', afttag: '</em>')
139
+ expect(test).to eq('<em>Паша</em>, <em>Маша</em> or <em>Саша</em>')
140
+ end
141
+
109
142
 
110
143
  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.7
4
+ version: 0.3.8
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-05-20 00:00:00.000000000 Z
11
+ date: 2015-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -117,7 +117,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
117
117
  requirements:
118
118
  - - "~>"
119
119
  - !ruby/object:Gem::Version
120
- version: '2.0'
120
+ version: 2.2.1
121
121
  required_rubygems_version: !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - ">="