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 +4 -4
- data/README.md +16 -0
- data/lib/i18n/en.yml +6 -1
- data/lib/i18n/ru.yml +6 -1
- data/lib/st_tools/string.rb +37 -0
- data/lib/st_tools/version.rb +1 -1
- data/test/string_lib_spec.rb +33 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a88a647c0f49b178c918012abe51b2726ecf6df2
|
4
|
+
data.tar.gz: a337d8e0a59aae2051b5d9aaa628f02c08d8f352
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
data/lib/i18n/ru.yml
CHANGED
data/lib/st_tools/string.rb
CHANGED
@@ -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
|
data/lib/st_tools/version.rb
CHANGED
data/test/string_lib_spec.rb
CHANGED
@@ -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.
|
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-
|
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:
|
120
|
+
version: 2.2.1
|
121
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
123
|
- - ">="
|