Skip to content

Commit

Permalink
Update commerce.department to return department based on random combi…
Browse files Browse the repository at this point in the history
…nations of categories
  • Loading branch information
maartenvg committed Jul 16, 2014
1 parent 710e40f commit 4999019
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 5 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,10 @@ Faker::Code.ean #=> "4600051000057"

Faker::Commerce.color #=> "lavender"

# Optional arguments max=3, fixed_amount=false
Faker::Commerce.department #=> "Grocery, Health & Beauty"
Faker::Commerce.department(5) #=> "Grocery, Books, Health & Beauty"
Faker::Commerce.department(2, true) #=> "Books & Tools"

Faker::Commerce.product_name #=> "Practical Granite Shirt"

Expand Down
32 changes: 30 additions & 2 deletions lib/faker/commerce.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,17 @@ def color
fetch('commerce.color')
end

def department
fetch('commerce.department')
def department(max = 3, fixed_amount = false)
num = max if fixed_amount
num ||= 1 + rand(max)

categories = categories(num)

if num > 1
merge_categories(categories)
else
categories[0]
end
end

def product_name
Expand All @@ -18,6 +27,25 @@ def price
random = Random.new
(random.rand(0..100.0) * 100).floor/100.0
end

private

def categories(num)
categories = []
while categories.length < num do
category = fetch('commerce.department')
categories << category unless categories.include?(category)
end

categories
end

def merge_categories(categories)
separator = fetch('separator')
comma_separated = categories.slice!(0...-1).join(', ')

[comma_separated, categories[0]].join(separator)
end
end
end
end
3 changes: 2 additions & 1 deletion lib/locales/en.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
en:
faker:
separator: ' & '
address:
city_prefix: [North, East, West, South, New, Lake, Port]
city_suffix: [town, ton, land, ville, berg, burgh, borough, bury, view, port, mouth, stad, furt, chester, mouth, fort, haven, side, shire]
Expand Down Expand Up @@ -127,7 +128,7 @@ en:

commerce:
color: [red, green, blue, yellow, purple, mint green, teal, white, black, orange, pink, grey, maroon, violet, turquoise, tan, sky blue, salmon, plum, orchid, olive, magenta, lime, ivory, indigo, gold, fuchsia, cyan, azure, lavender, silver]
department: ["Books", "Movies, Music & Games", "Electronics & Computers", "Home, Garden & Tools", "Grocery, Health & Beauty", "Toys, Kids & Baby", "Clothing, Shoes & Jewelery", "Sports & Outdoors", "Automotive & Industrial"]
department: ["Books", "Movies", "Music", "Games", "Electronics", "Computers", "Home", "Garden", "Tools", "Grocery", "Health", "Beauty", "Toys", "Kids", "Baby", "Clothing", "Shoes", "Jewelery", "Sports", "Outdoors", "Automotive", "Industrial"]
product_name:
adjective: [Small, Ergonomic, Rustic, Intelligent, Gorgeous, Incredible, Fantastic, Practical, Sleek, Awesome]
material: [Steel, Wooden, Concrete, Plastic, Cotton, Granite, Rubber]
Expand Down
3 changes: 2 additions & 1 deletion lib/locales/ru.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
ru:
faker:
separator: " и "
address:
country: [Австралия, Австрия, Азербайджан, Албания, Алжир, Американское Самоа (не признана), Ангилья, Ангола, Андорра, Антарктика (не признана), Антигуа и Барбуда, Антильские Острова (не признана), Аомынь (не признана), Аргентина, Армения, Афганистан, Багамские Острова, Бангладеш, Барбадос, Бахрейн, Беларусь, Белиз, Бельгия, Бенин, Болгария, Боливия, Босния и Герцеговина, Ботсвана, Бразилия, Бруней, Буркина-Фасо, Бурунди, Бутан, Вануату, Ватикан, Великобритания, Венгрия, Венесуэла, Восточный Тимор, Вьетнам, Габон, Гаити, Гайана, Гамбия, Гана, Гваделупа (не признана), Гватемала, Гвиана (не признана), Гвинея, Гвинея-Бисау, Германия, Гондурас, Гренада, Греция, Грузия, Дания, Джибути, Доминика, Доминиканская Республика, Египет, Замбия, Зимбабве, Израиль, Индия, Индонезия, Иордания, Ирак, Иран, Ирландия, Исландия, Испания, Италия, Йемен, Кабо-Верде, Казахстан, Камбоджа, Камерун, Канада, Катар, Кения, Кипр, Кирибати, Китай, Колумбия, Коморские Острова, Конго, Демократическая Республика, Корея (Северная), Корея (Южная), Косово, Коста-Рика, Кот-д'Ивуар, Куба, Кувейт, Кука острова, Кыргызстан, Лаос, Латвия, Лесото, Либерия, Ливан, Ливия, Литва, Лихтенштейн, Люксембург, Маврикий, Мавритания, Мадагаскар, Македония, Малави, Малайзия, Мали, Мальдивы, Мальта, Маршалловы Острова, Мексика, Микронезия, Мозамбик, Молдова, Монако, Монголия, Марокко, Мьянма, Намибия, Науру, Непал, Нигер, Нигерия, Нидерланды, Никарагуа, Новая Зеландия, Норвегия, Объединенные Арабские Эмираты, Оман, Пакистан, Палау, Панама, Папуа — Новая Гвинея, Парагвай, Перу, Польша, Португалия, Республика Конго, Россия, Руанда, Румыния, Сальвадор, Самоа, Сан-Марино, Сан-Томе и Принсипи, Саудовская Аравия, Свазиленд, Сейшельские острова, Сенегал, Сент-Винсент и Гренадины, Сент-Киттс и Невис, Сент-Люсия, Сербия, Сингапур, Сирия, Словакия, Словения, Соединенные Штаты Америки, Соломоновы Острова, Сомали, Судан, Суринам, Сьерра-Леоне, Таджикистан, Таиланд, Тайвань (не признана), Тамил-Илам (не признана), Танзания, Тёркс и Кайкос (не признана), Того, Токелау (не признана), Тонга, Тринидад и Тобаго, Тувалу, Тунис, Турецкая Республика Северного Кипра (не признана), Туркменистан, Турция, Уганда, Узбекистан, Украина, Уругвай, Фарерские Острова (не признана), Фиджи, Филиппины, Финляндия, Франция, Французская Полинезия (не признана), Хорватия, Центральноафриканская Республика, Чад, Черногория, Чехия, Чили, Швейцария, Швеция, Шри-Ланка, Эквадор, Экваториальная Гвинея, Эритрея, Эстония, Эфиопия, Южно-Африканская Республика, Ямайка, Япония]
building_number: ['###']
Expand Down Expand Up @@ -44,7 +45,7 @@ ru:

commerce:
color: [красный, зеленый, синий, желтый, багровый, мятный, зеленовато-голубой, белый, черный, оранжевый, розовый, серый, красно-коричневый, фиолетовый, бирюзовый, желто-коричневый, небесно голубой, оранжево-розовый, темно-фиолетовый, орхидный, оливковый, пурпурный, лимонный, кремовый, сине-фиолетовый, золотой, красно-пурпурный, голубой, лазурный, лиловый, серебряный]
department: ["Книги", "Фильмы, музыка и игры", "Электроника и компьютеры", "Дом, сад и инструмент", "Бакалея, здоровье и красота", "Игрушки, детское и для малышей", "Одежда, обувь и украшения", "Спорт и туризм", "Автомобильное и промышленное"]
department: ["Книги", "Фильмы", "музыка", "игры", "Электроника", "компьютеры", "Дом", "садинструмент", "Бакалея", "здоровье", "красота", "Игрушки", "детское", "для малышей", "Одежда", "обувь", "украшения", "Спорт", "туризм", "Автомобильное", "промышленное"]
product_name:
adjective: [Маленький, Эргономичный, Грубый, Интеллектуальный, Великолепный, Невероятный, Фантастический, Практчиный, Лоснящийся, Потрясающий]
material: [Стальной, Деревянный, Бетонный, Пластиковый, Хлопковый, Гранитный, Резиновый]
Expand Down
2 changes: 1 addition & 1 deletion lib/locales/sv.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ sv:

commerce:
color: [vit, silver, grå, svart, röd, grön, blå, gul, lila, indigo, guld, brun, rosa, purpur, korall]
department: ["Böcker", "Filmer, Musik & Spel", "Elektronik & Datorer", "Hem, Trädgård & Verktyg", "Livsmedel", "Hälsa & Skönhet", "Leksaker", "Klädsel, Skor & Smycken", "Sport"]
department: ["Böcker", "Filmer", "Musik", "Spel", "Elektronik", "Datorer", "Hem", "Trädgård", "Verktyg", "Livsmedel", "Hälsa", "Skönhet", "Leksaker", "Klädsel", "Skor", "Smycken", "Sport"]
product_name:
adjective: [Liten, Ergonomisk, Robust, Intelligent, Söt, Otrolig, Fatastisk, Praktisk, Slimmad, Grym]
material: [Stål, Metall, Trä, Betong, Plast, Bomul, Grnit, Gummi, Latex]
Expand Down
41 changes: 41 additions & 0 deletions test/test_faker_commerce.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,47 @@ def test_department
assert @tester.department.match(/[A-Z][a-z]+\.?/)
end

def test_single_department_should_not_contain_separators
assert_match(/\A[A-Za-z]+\z/, @tester.department(1))
end

def test_department_should_have_ampersand_as_default_separator
assert_match ' & ', @tester.department(2, true)
end

def test_department_should_accept_localized_separator
data = {
:faker => {
:separator => ' + ',
:commerce => {
:department => ['Books', 'Movies']
}
}
}

I18n.backend.store_translations(:xy, data)
I18n.with_locale(:xy) do
assert_match ' + ', @tester.department(2, true)
end
end

def test_department_should_have_exact_number_of_categories_when_fixed_amount
assert_match(/\A([A-Za-z]+, ){8}[A-Za-z]+ & [A-Za-z]+\z/, @tester.department(10, true))
end

def test_department_should_never_exceed_the_max_number_of_categories_when_random_amount
100.times do
assert_match(/\A([A-Za-z]+(, | & )){0,5}[A-Za-z]+\z/, @tester.department(6))
end
end

def test_department_should_have_no_duplicate_categories
department = @tester.department(10, true)

departments = department.split(/[,& ]+/)
assert_equal departments, departments.uniq
end

def test_product_name
assert @tester.product_name.match(/[A-Z][a-z]+\.?/)
end
Expand Down

0 comments on commit 4999019

Please sign in to comment.