ffaker 2.18.0 → 2.19.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Changelog.md +10 -0
- data/REFERENCE.md +1406 -1302
- data/ffaker.gemspec +2 -4
- data/lib/ffaker.rb +13 -3
- data/lib/ffaker/address_au.rb +1 -1
- data/lib/ffaker/address_br.rb +1 -1
- data/lib/ffaker/address_ca.rb +1 -1
- data/lib/ffaker/address_it.rb +37 -0
- data/lib/ffaker/address_mx.rb +2 -8
- data/lib/ffaker/company_fr.rb +35 -0
- data/lib/ffaker/{courses.rb → courses_fr.rb} +2 -0
- data/lib/ffaker/data/address_br/city +0 -1
- data/lib/ffaker/data/address_br/state +1 -1
- data/lib/ffaker/data/address_it/city +111 -0
- data/lib/ffaker/data/address_it/region +20 -0
- data/lib/ffaker/data/food_pl/fermented +1 -1
- data/lib/ffaker/data/food_pl/fruits +1 -1
- data/lib/ffaker/data/food_pl/herbs +1 -1
- data/lib/ffaker/data/food_pl/meats +1 -1
- data/lib/ffaker/data/food_pl/preserves +1 -1
- data/lib/ffaker/data/food_pl/spices +1 -1
- data/lib/ffaker/data/food_pl/vegetables +1 -1
- data/lib/ffaker/data/game/adj_and_adv +18 -0
- data/lib/ffaker/data/game/category +84 -0
- data/lib/ffaker/data/game/mechanic +182 -0
- data/lib/ffaker/data/game/nouns +37 -0
- data/lib/ffaker/data/game/prefixes +17 -0
- data/lib/ffaker/data/job_it/job_adj +37 -0
- data/lib/ffaker/data/job_it/job_noun +25 -0
- data/lib/ffaker/data/job_it/job_prefix +22 -0
- data/lib/ffaker/data/lorem_br/characters +36 -0
- data/lib/ffaker/data/lorem_br/words +183 -0
- data/lib/ffaker/data/lorem_it/words +321 -0
- data/lib/ffaker/data/name/pronouns +1 -1
- data/lib/ffaker/data/name_ga/first_names_male +286 -286
- data/lib/ffaker/data/sport_ru/summer +68 -0
- data/lib/ffaker/data/sport_ru/winter +20 -0
- data/lib/ffaker/freedom_ipsum.rb +1 -1
- data/lib/ffaker/game.rb +33 -0
- data/lib/ffaker/gender_it.rb +17 -0
- data/lib/ffaker/gender_ru.rb +22 -0
- data/lib/ffaker/identification_it.rb +30 -0
- data/lib/ffaker/job_it.rb +12 -0
- data/lib/ffaker/lorem_br.rb +45 -0
- data/lib/ffaker/lorem_it.rb +39 -0
- data/lib/ffaker/name_th_en.rb +1 -1
- data/lib/ffaker/sport_ru.rb +25 -0
- data/lib/ffaker/ssn_se.rb +0 -19
- data/lib/ffaker/utils/array_utils.rb +1 -1
- data/lib/ffaker/utils/module_utils.rb +23 -3
- data/lib/version.rb +1 -1
- data/scripts/profiling.rb +1 -1
- data/scripts/reference.rb +2 -3
- data/test/helper.rb +1 -1
- data/test/test_address.rb +1 -1
- data/test/test_address_au.rb +1 -1
- data/test/test_address_br.rb +1 -1
- data/test/test_address_ca.rb +1 -1
- data/test/test_address_ch.rb +1 -1
- data/test/test_address_ch_de.rb +1 -1
- data/test/test_address_ch_fr.rb +1 -1
- data/test/test_address_ch_it.rb +1 -1
- data/test/test_address_da.rb +1 -1
- data/test/test_address_de.rb +1 -1
- data/test/test_address_fi.rb +1 -1
- data/test/test_address_fr.rb +1 -1
- data/test/test_address_gr.rb +1 -1
- data/test/test_address_id.rb +1 -1
- data/test/test_address_in.rb +1 -1
- data/test/test_address_it.rb +12 -0
- data/test/test_address_ja.rb +1 -1
- data/test/test_address_kr.rb +1 -1
- data/test/test_address_mx.rb +1 -1
- data/test/test_address_nl.rb +1 -1
- data/test/test_address_pl.rb +1 -1
- data/test/test_address_ru.rb +1 -1
- data/test/test_address_se.rb +1 -1
- data/test/test_address_sn.rb +1 -1
- data/test/test_address_ua.rb +1 -1
- data/test/test_address_uk.rb +1 -1
- data/test/test_address_us.rb +1 -1
- data/test/test_airline.rb +1 -1
- data/test/test_animal.rb +1 -1
- data/test/test_animal_cn.rb +1 -1
- data/test/test_animal_es.rb +1 -1
- data/test/test_animal_pl.rb +1 -1
- data/test/test_animal_us.rb +1 -1
- data/test/test_array_utils.rb +2 -1
- data/test/test_avatar.rb +1 -1
- data/test/test_aws.rb +1 -1
- data/test/test_bacon_ipsum.rb +1 -1
- data/test/test_bank.rb +1 -1
- data/test/test_book.rb +1 -1
- data/test/test_boolean.rb +1 -1
- data/test/test_cheesy_lingo.rb +1 -1
- data/test/test_code.rb +1 -1
- data/test/test_color.rb +1 -1
- data/test/test_color_pl.rb +1 -1
- data/test/test_color_ua.rb +1 -1
- data/test/test_company.rb +1 -1
- data/test/test_company_cn.rb +1 -1
- data/test/test_company_fr.rb +33 -0
- data/test/test_company_it.rb +1 -1
- data/test/test_company_ja.rb +1 -1
- data/test/test_company_se.rb +1 -1
- data/test/test_conference.rb +1 -1
- data/test/test_course_mathematiques.rb +1 -1
- data/test/test_course_philosophie.rb +1 -1
- data/test/test_currency.rb +1 -1
- data/test/test_dizzle_ipsum.rb +1 -1
- data/test/test_education.rb +1 -1
- data/test/test_education_cn.rb +1 -1
- data/test/test_ffaker.rb +1 -1
- data/test/test_filesystem.rb +1 -1
- data/test/test_food.rb +1 -1
- data/test/test_food_pl.rb +1 -1
- data/test/test_freedom_ipsum.rb +1 -1
- data/test/test_game.rb +28 -0
- data/test/test_gender.rb +2 -2
- data/test/test_gender_br.rb +1 -1
- data/test/test_gender_cn.rb +1 -1
- data/test/test_gender_id.rb +1 -1
- data/test/test_gender_it.rb +27 -0
- data/test/test_gender_ja.rb +1 -1
- data/test/test_gender_jp.rb +1 -1
- data/test/test_gender_kr.rb +1 -1
- data/test/test_gender_pl.rb +1 -1
- data/test/test_gender_ru.rb +23 -0
- data/test/test_geolocation.rb +1 -1
- data/test/test_guid.rb +1 -1
- data/test/test_healthcare_ipsum.rb +1 -1
- data/test/test_healthcare_ru.rb +1 -1
- data/test/test_hipster_ipsum.rb +1 -1
- data/test/test_html_ipsum.rb +1 -1
- data/test/test_identification.rb +1 -1
- data/test/test_identification_br.rb +1 -1
- data/test/test_identification_co.rb +1 -1
- data/test/test_identification_es.rb +1 -1
- data/test/test_identification_es_cl.rb +1 -1
- data/test/test_identification_es_mx.rb +1 -1
- data/test/test_identification_in.rb +1 -1
- data/test/test_identification_it.rb +34 -0
- data/test/test_identification_kr.rb +1 -1
- data/test/test_identification_tw.rb +1 -1
- data/test/test_image.rb +1 -1
- data/test/test_internet.rb +1 -1
- data/test/test_internet_se.rb +1 -1
- data/test/test_job.rb +1 -1
- data/test/test_job_br.rb +1 -1
- data/test/test_job_cn.rb +1 -1
- data/test/test_job_fr.rb +1 -1
- data/test/test_job_it.rb +17 -0
- data/test/test_job_ja.rb +1 -1
- data/test/test_job_kr.rb +1 -1
- data/test/test_job_vn.rb +1 -1
- data/test/test_locale.rb +1 -1
- data/test/test_lorem.rb +1 -1
- data/test/test_lorem_ar.rb +1 -1
- data/test/test_lorem_br.rb +62 -0
- data/test/test_lorem_cn.rb +1 -1
- data/test/test_lorem_fr.rb +1 -1
- data/test/test_lorem_ie.rb +1 -1
- data/test/test_lorem_it.rb +51 -0
- data/test/test_lorem_ja.rb +1 -1
- data/test/test_lorem_kr.rb +1 -1
- data/test/test_lorem_pl.rb +1 -1
- data/test/test_lorem_ru.rb +1 -1
- data/test/test_lorem_ua.rb +1 -1
- data/test/test_module_utils.rb +1 -1
- data/test/test_movie.rb +1 -1
- data/test/test_music.rb +1 -1
- data/test/test_name.rb +1 -1
- data/test/test_name_ar.rb +1 -1
- data/test/test_name_br.rb +1 -1
- data/test/test_name_cn.rb +1 -1
- data/test/test_name_cs.rb +1 -1
- data/test/test_name_da.rb +1 -1
- data/test/test_name_de.rb +1 -1
- data/test/test_name_es.rb +1 -1
- data/test/test_name_fr.rb +1 -1
- data/test/test_name_ga.rb +1 -1
- data/test/test_name_gr.rb +1 -1
- data/test/test_name_id.rb +1 -1
- data/test/test_name_it.rb +1 -1
- data/test/test_name_ja.rb +1 -1
- data/test/test_name_kh.rb +1 -1
- data/test/test_name_kr.rb +1 -1
- data/test/test_name_mx.rb +1 -1
- data/test/test_name_nb.rb +1 -1
- data/test/test_name_nl.rb +1 -1
- data/test/test_name_ph.rb +1 -1
- data/test/test_name_pl.rb +1 -1
- data/test/test_name_ru.rb +1 -1
- data/test/test_name_se.rb +1 -1
- data/test/test_name_sn.rb +1 -1
- data/test/test_name_th.rb +1 -1
- data/test/test_name_th_en.rb +1 -1
- data/test/test_name_tw.rb +1 -1
- data/test/test_name_ua.rb +1 -1
- data/test/test_name_vn.rb +1 -1
- data/test/test_nato_alphabet.rb +1 -1
- data/test/test_phone_number.rb +1 -1
- data/test/test_phone_number_au.rb +1 -1
- data/test/test_phone_number_br.rb +1 -1
- data/test/test_phone_number_cu.rb +1 -1
- data/test/test_phone_number_da.rb +1 -1
- data/test/test_phone_number_de.rb +1 -1
- data/test/test_phone_number_fr.rb +1 -1
- data/test/test_phone_number_id.rb +1 -1
- data/test/test_phone_number_ja.rb +1 -1
- data/test/test_phone_number_kr.rb +1 -1
- data/test/test_phone_number_mx.rb +1 -1
- data/test/test_phone_number_nl.rb +1 -1
- data/test/test_phone_number_pl.rb +1 -1
- data/test/test_phone_number_se.rb +1 -1
- data/test/test_phone_number_sg.rb +1 -1
- data/test/test_phone_number_sn.rb +1 -1
- data/test/test_phone_number_tw.rb +1 -1
- data/test/test_phone_number_ua.rb +1 -1
- data/test/test_products.rb +1 -1
- data/test/test_sem_ver.rb +1 -1
- data/test/test_skill.rb +1 -1
- data/test/test_sport_pl.rb +1 -1
- data/test/test_sport_ru.rb +30 -0
- data/test/test_sport_us.rb +1 -1
- data/test/test_sports.rb +1 -1
- data/test/test_ssn.rb +1 -1
- data/test/test_ssn_mx.rb +1 -1
- data/test/test_ssn_se.rb +1 -1
- data/test/test_string.rb +1 -1
- data/test/test_time.rb +1 -1
- data/test/test_tweet.rb +1 -1
- data/test/test_unique_utils.rb +1 -1
- data/test/test_units.rb +2 -1
- data/test/test_units_english.rb +1 -1
- data/test/test_units_metric.rb +1 -1
- data/test/test_vehicle.rb +1 -1
- data/test/test_venue.rb +1 -1
- data/test/test_youtube.rb +1 -1
- metadata +206 -161
@@ -0,0 +1,68 @@
|
|
1
|
+
Бадминтон
|
2
|
+
Баскетбол
|
3
|
+
Бейсбол
|
4
|
+
Бокс
|
5
|
+
Борьба
|
6
|
+
Велоспорт
|
7
|
+
Водное поло
|
8
|
+
Волейбол
|
9
|
+
Гандбол
|
10
|
+
Гольф
|
11
|
+
Гребля на байдарках и каноэ
|
12
|
+
Гребной слалом
|
13
|
+
Гребной спорт
|
14
|
+
Дзюдо
|
15
|
+
Каратэ
|
16
|
+
Конный спорт
|
17
|
+
Легкая атлетика
|
18
|
+
Настольный теннис
|
19
|
+
Парусный спорт
|
20
|
+
Плавание
|
21
|
+
Пляжный волейбол
|
22
|
+
Прыжки в воду
|
23
|
+
Прыжки на батуте
|
24
|
+
Регби
|
25
|
+
Серфинг
|
26
|
+
Синхронное плавание
|
27
|
+
Скалолазание
|
28
|
+
Скейтбординг
|
29
|
+
Пятиборье
|
30
|
+
Софтбол
|
31
|
+
Спортивная гимнастика
|
32
|
+
Стрельба
|
33
|
+
Стрельба из лука
|
34
|
+
Теннис
|
35
|
+
Триатлон
|
36
|
+
Тхэквондо
|
37
|
+
Тяжелая атлетика
|
38
|
+
Фехтование
|
39
|
+
Футбол
|
40
|
+
Хоккей на траве
|
41
|
+
Художественная гимнастика
|
42
|
+
Крикет
|
43
|
+
Шахматы
|
44
|
+
Лакросс
|
45
|
+
Футбол
|
46
|
+
Толкание ядра
|
47
|
+
Поло
|
48
|
+
Покер
|
49
|
+
Метание диска
|
50
|
+
Метание копья
|
51
|
+
Прыжок с шестом
|
52
|
+
Дайвинг
|
53
|
+
Прыжки в воду
|
54
|
+
Прыжки в длину
|
55
|
+
Прыжки в высоту
|
56
|
+
Рыбалка
|
57
|
+
Греко-римская борьба
|
58
|
+
Кудо
|
59
|
+
Бильярд
|
60
|
+
Айкидо
|
61
|
+
Дрессура
|
62
|
+
Конкур
|
63
|
+
Дартс
|
64
|
+
Джиу-джитсу
|
65
|
+
Самбо
|
66
|
+
Сумо
|
67
|
+
Скандинавская ходьба
|
68
|
+
Фитнес
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Биатлон
|
2
|
+
Бобслей
|
3
|
+
Горнолыжный спорт
|
4
|
+
Керлинг
|
5
|
+
Конькобежный спорт
|
6
|
+
Лыжное двоеборье
|
7
|
+
Лыжные гонки
|
8
|
+
Прыжки на лыжах с трамплина
|
9
|
+
Санный спорт
|
10
|
+
Скелетон
|
11
|
+
Сноуборд
|
12
|
+
Фигурное катание на коньках
|
13
|
+
Фристайл
|
14
|
+
Хоккей
|
15
|
+
Шорт-трек
|
16
|
+
Юкигассен
|
17
|
+
Ледолазание
|
18
|
+
Мотогонки на льду
|
19
|
+
Гонки на собачьих упряжках
|
20
|
+
Катание на ледяных глыбах
|
data/lib/ffaker/freedom_ipsum.rb
CHANGED
data/lib/ffaker/game.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FFaker
|
4
|
+
module Game
|
5
|
+
extend ModuleUtils
|
6
|
+
extend self
|
7
|
+
|
8
|
+
def title
|
9
|
+
case rand(0..1)
|
10
|
+
when 0 then simple_title
|
11
|
+
when 1 then title_with_prefix
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def category
|
16
|
+
fetch_sample(CATEGORY)
|
17
|
+
end
|
18
|
+
|
19
|
+
def mechanic
|
20
|
+
fetch_sample(MECHANIC)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def simple_title
|
26
|
+
"#{fetch_sample(ADJ_AND_ADV)} #{fetch_sample(NOUNS)}"
|
27
|
+
end
|
28
|
+
|
29
|
+
def title_with_prefix
|
30
|
+
"#{fetch_sample(PREFIXES)} #{simple_title}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FFaker
|
4
|
+
module GenderIT
|
5
|
+
extend ModuleUtils
|
6
|
+
extend self
|
7
|
+
|
8
|
+
GENDERS = %w[maschio femmina].freeze
|
9
|
+
|
10
|
+
def random
|
11
|
+
fetch_sample(GENDERS)
|
12
|
+
end
|
13
|
+
|
14
|
+
alias maybe random
|
15
|
+
alias sample random
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FFaker
|
4
|
+
module GenderRU
|
5
|
+
extend ModuleUtils
|
6
|
+
extend self
|
7
|
+
|
8
|
+
GENDERS = %w[мужчина женщина нонбайнари агендер].freeze
|
9
|
+
BINARY_GENDERS = %w[мужчина женщина].freeze
|
10
|
+
|
11
|
+
def random
|
12
|
+
fetch_sample(GENDERS)
|
13
|
+
end
|
14
|
+
|
15
|
+
def binary
|
16
|
+
fetch_sample(BINARY_GENDERS)
|
17
|
+
end
|
18
|
+
|
19
|
+
alias maybe random
|
20
|
+
alias sample random
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FFaker
|
4
|
+
module IdentificationIT
|
5
|
+
extend ModuleUtils
|
6
|
+
extend self
|
7
|
+
|
8
|
+
ETHNICITIES = [
|
9
|
+
'Afroamericano', 'Asiatico/isolano del Pacifico', 'Caucasico', 'Ispanico', 'Nativo americano',
|
10
|
+
'Multirazziale', 'Altro', 'Preferisco non rispondere'
|
11
|
+
].freeze
|
12
|
+
GENDERS = %w[Maschio Femmina].freeze
|
13
|
+
|
14
|
+
def drivers_license
|
15
|
+
FFaker::String.from_regexp(/U1[1-9]\d{7}[A-Z]/)
|
16
|
+
end
|
17
|
+
|
18
|
+
def ssn
|
19
|
+
FFaker.numerify('####################')
|
20
|
+
end
|
21
|
+
|
22
|
+
def ethnicity
|
23
|
+
fetch_sample(ETHNICITIES)
|
24
|
+
end
|
25
|
+
|
26
|
+
def gender
|
27
|
+
fetch_sample(GENDERS)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FFaker
|
4
|
+
# Based on Perl's Text::Lorem
|
5
|
+
module LoremBR
|
6
|
+
extend ModuleUtils
|
7
|
+
extend self
|
8
|
+
|
9
|
+
def characters(character_count = 255)
|
10
|
+
character_count = 0 if character_count.negative?
|
11
|
+
Array.new(character_count).map { fetch_sample(CHARACTERS) }.join
|
12
|
+
end
|
13
|
+
|
14
|
+
def word
|
15
|
+
fetch_sample(WORDS)
|
16
|
+
end
|
17
|
+
|
18
|
+
def words(num = 3)
|
19
|
+
fetch_sample(WORDS, count: num)
|
20
|
+
end
|
21
|
+
|
22
|
+
def sentence(word_count = 4)
|
23
|
+
first_word, *last_words = words(word_count + rand(1..5))
|
24
|
+
return "#{first_word.capitalize} #{last_words.join(' ')}." if last_words
|
25
|
+
|
26
|
+
first_word.capitalize
|
27
|
+
end
|
28
|
+
|
29
|
+
alias phrase sentence
|
30
|
+
|
31
|
+
def sentences(sentence_count = 3)
|
32
|
+
(1..sentence_count).map { sentence }
|
33
|
+
end
|
34
|
+
|
35
|
+
alias phrases sentences
|
36
|
+
|
37
|
+
def paragraph(sentence_count = 3)
|
38
|
+
sentences(sentence_count + rand(0..2)).join(' ')
|
39
|
+
end
|
40
|
+
|
41
|
+
def paragraphs(paragraph_count = 3)
|
42
|
+
(1..paragraph_count).map { paragraph }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FFaker
|
4
|
+
module LoremIT
|
5
|
+
extend ModuleUtils
|
6
|
+
extend self
|
7
|
+
|
8
|
+
def word
|
9
|
+
fetch_sample(WORDS)
|
10
|
+
end
|
11
|
+
|
12
|
+
def words(num = 3)
|
13
|
+
fetch_sample(WORDS, count: num)
|
14
|
+
end
|
15
|
+
|
16
|
+
def sentence(word_count = 4)
|
17
|
+
s = words(word_count + rand(0..5))
|
18
|
+
s = s.join(' ')
|
19
|
+
s.capitalize!
|
20
|
+
"#{s}."
|
21
|
+
end
|
22
|
+
|
23
|
+
alias phrase sentence
|
24
|
+
|
25
|
+
def sentences(sentence_count = 3)
|
26
|
+
(1..sentence_count).map { sentence }
|
27
|
+
end
|
28
|
+
|
29
|
+
alias phrases sentences
|
30
|
+
|
31
|
+
def paragraph(sentence_count = 3)
|
32
|
+
sentences(sentence_count + rand(0..2)).join(' ')
|
33
|
+
end
|
34
|
+
|
35
|
+
def paragraphs(paragraph_count = 3)
|
36
|
+
(1..paragraph_count).map { paragraph }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/ffaker/name_th_en.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FFaker
|
4
|
+
# Inspirations:
|
5
|
+
# https://olympic.ru/team/sport/
|
6
|
+
# http://ru.sport-wiki.org/vidy-sporta/
|
7
|
+
module SportRU
|
8
|
+
extend ModuleUtils
|
9
|
+
extend self
|
10
|
+
|
11
|
+
ALL = SUMMER + WINTER
|
12
|
+
|
13
|
+
def name
|
14
|
+
fetch_sample(ALL)
|
15
|
+
end
|
16
|
+
|
17
|
+
def summer
|
18
|
+
fetch_sample(SUMMER)
|
19
|
+
end
|
20
|
+
|
21
|
+
def winter
|
22
|
+
fetch_sample(WINTER)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/ffaker/ssn_se.rb
CHANGED
@@ -76,24 +76,5 @@ module FFaker
|
|
76
76
|
def three_character_string(number)
|
77
77
|
format('%03d', number)
|
78
78
|
end
|
79
|
-
|
80
|
-
# http://en.wikipedia.org/wiki/Luhn_algorithm
|
81
|
-
def luhn_check(number)
|
82
|
-
multiplications = []
|
83
|
-
|
84
|
-
number.split(//).each_with_index do |digit, i|
|
85
|
-
multiplications << i.even? ? digit.to_i * 2 : digit.to_i
|
86
|
-
end
|
87
|
-
|
88
|
-
sum = 0
|
89
|
-
multiplications.each do |num|
|
90
|
-
num.to_s.each_byte do |character|
|
91
|
-
sum += character.chr.to_i
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
control_digit = (sum % 10).zero? ? 0 : (sum / 10 + 1) * 10 - sum
|
96
|
-
control_digit.to_s
|
97
|
-
end
|
98
79
|
end
|
99
80
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
require_relative 'array_utils'
|
4
|
+
require_relative 'random_utils'
|
5
|
+
require_relative 'unique_utils'
|
6
6
|
|
7
7
|
module FFaker
|
8
8
|
module ModuleUtils
|
@@ -35,5 +35,25 @@ module FFaker
|
|
35
35
|
def unique(max_retries = 10_000)
|
36
36
|
@unique_generator ||= FFaker::UniqueUtils.new(self, max_retries)
|
37
37
|
end
|
38
|
+
|
39
|
+
# http://en.wikipedia.org/wiki/Luhn_algorithm
|
40
|
+
def luhn_check(number)
|
41
|
+
multiplications = []
|
42
|
+
|
43
|
+
number.split(//).each_with_index do |digit, i|
|
44
|
+
multiplications << i.even? ? digit.to_i * 2 : digit.to_i
|
45
|
+
end
|
46
|
+
|
47
|
+
sum = 0
|
48
|
+
multiplications.each do |num|
|
49
|
+
num.to_s.each_byte do |character|
|
50
|
+
sum += character.chr.to_i
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
control_digit = (sum % 10).zero? ? 0 : (sum / 10 + 1) * 10 - sum
|
55
|
+
control_digit.to_s
|
56
|
+
end
|
57
|
+
|
38
58
|
end
|
39
59
|
end
|
data/lib/version.rb
CHANGED
data/scripts/profiling.rb
CHANGED
data/scripts/reference.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
require 'ffaker'
|
3
|
+
require_relative '../lib/ffaker'
|
5
4
|
|
6
5
|
ICONS = {
|
7
6
|
error: '‼️',
|
@@ -25,7 +24,7 @@ end
|
|
25
24
|
# Returns faker methods for a given module
|
26
25
|
def faker_methods(mod)
|
27
26
|
methods = mod.methods - Module.methods -
|
28
|
-
%i[k underscore fetch_sample rand shuffle unique]
|
27
|
+
%i[k underscore fetch_sample rand shuffle unique luhn_check]
|
29
28
|
|
30
29
|
# For Company.name (et al), don't discard :name if it was reimplemented
|
31
30
|
methods << :name if mod.send(:name) != mod.to_s
|