st_tools 0.3.7 → 0.3.8

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: 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
  - - ">="