From f09c7b1e78d9fe077237bcc43029f14c80c1a5c5 Mon Sep 17 00:00:00 2001 From: Stefanni Brasil Date: Mon, 12 Jan 2026 16:49:49 -0700 Subject: [PATCH 1/6] Organize benchmark gems in a group Inspired by ruby/json#606 --- .github/workflows/ruby.yml | 4 +++- Gemfile | 6 +++++- Gemfile.lock | 2 ++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ruby.yml b/.github/workflows/ruby.yml index 2cc35fde6d..d8f6c801de 100644 --- a/.github/workflows/ruby.yml +++ b/.github/workflows/ruby.yml @@ -53,7 +53,9 @@ jobs: ruby-version: ${{ matrix.ruby }} - name: Install dependencies - run: bundle install + run: | + bundle config --without benchmark + bundle install - name: Run tests run: bundle exec rake test diff --git a/Gemfile b/Gemfile index 0d4ab83bc6..e5bd7d90f6 100644 --- a/Gemfile +++ b/Gemfile @@ -5,7 +5,6 @@ source 'https://rubygems.org' # Specify your gem's dependencies in faker.gemspec gemspec -gem 'benchmark' gem 'irb' gem 'minitest', '5.26.1' gem 'pry', '0.16.0' @@ -18,3 +17,8 @@ gem 'simplecov', '0.22.0' gem 'test-unit', '3.7.7' gem 'timecop', '0.9.10' gem 'yard', '0.9.38' + +group :benchmark do + gem 'benchmark' + gem 'benchmark-ips' +end diff --git a/Gemfile.lock b/Gemfile.lock index a6f6046630..e0a7ebfe54 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -9,6 +9,7 @@ GEM specs: ast (2.4.3) benchmark (0.5.0) + benchmark-ips (2.14.0) coderay (1.1.3) concurrent-ruby (1.3.6) date (3.5.1) @@ -96,6 +97,7 @@ PLATFORMS DEPENDENCIES benchmark + benchmark-ips faker! irb minitest (= 5.26.1) From a109a55572099a64852f5839bc9729927a9a41ae Mon Sep 17 00:00:00 2001 From: Stefanni Brasil Date: Mon, 12 Jan 2026 16:52:38 -0700 Subject: [PATCH 2/6] Reorganize benchmark scripts Having these in a folder helps because we can document experiment results in it as well. And we can edit the require script to raise an error if it takes longer than a threshold to load faker. Co-Authored-By: Thiago Araujo --- .github/workflows/bench.yml | 25 ++++++++++++++ .rubocop.yml | 12 ++++--- benchmark/generators.rb | 40 ++++++++++++++++++++++ benchmark/load_yml_vs_json.rb | 12 +++++++ benchmark/require.rb | 9 +++++ tasks/benchmark.rake | 62 ----------------------------------- 6 files changed, 93 insertions(+), 67 deletions(-) create mode 100644 .github/workflows/bench.yml create mode 100644 benchmark/generators.rb create mode 100644 benchmark/load_yml_vs_json.rb create mode 100644 benchmark/require.rb delete mode 100644 tasks/benchmark.rake diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml new file mode 100644 index 0000000000..fb431439a9 --- /dev/null +++ b/.github/workflows/bench.yml @@ -0,0 +1,25 @@ +name: Bench + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + build: + runs-on: ubuntu-latest + name: Benchmarks + steps: + - uses: actions/checkout@v6 + - uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.4' + - name: Install dependencies + run: bundle install + + - name: Generators + run: RUBYOPT="-W0" bundle exec ruby benchmark/generators.rb + - name: Require + run: RUBYOPT="-W0" bundle exec ruby benchmark/require.rb + diff --git a/.rubocop.yml b/.rubocop.yml index a0e62b8292..8e26db6a6f 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -50,6 +50,12 @@ Naming/VariableNumber: Description: Use the configured style when numbering symbols, methods and variables. Enabled: false +Security/Eval: + Description: The use of eval represents a serious security risk. + Exclude: + - 'lib/faker/default/json.rb' + - 'benchmark/generators.rb' + Style/AsciiComments: Description: This cop checks for non-ascii (non-English) characters in comments. Exclude: @@ -71,6 +77,7 @@ Style/EvalWithLocation: Description: This cop checks eval method usage. eval can receive source location metadata, that are filename and line number. Exclude: - 'lib/faker/default/json.rb' + - 'benchmark/generators.rb' Style/FormatStringToken: Description: This cop checks for a consistent style for named format string tokens. @@ -102,11 +109,6 @@ Style/RegexpLiteral: - mixed AllowInnerSlashes: false -Security/Eval: - Description: The use of eval represents a serious security risk. - Exclude: - - 'lib/faker/default/json.rb' - Style/IfUnlessModifier: Description: Checks for `if` and `unless` statements that would fit on one line if written as modifier `if`/`unless`. The cop also checks for modifier `if`/`unless` lines that exceed the maximum line length. Enabled: false diff --git a/benchmark/generators.rb b/benchmark/generators.rb new file mode 100644 index 0000000000..7e3408fde9 --- /dev/null +++ b/benchmark/generators.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +require 'benchmark/ips' +require 'faker' + +def all_generators + generators.map do |klass| + subclass_methods(klass).flatten + end.flatten.sort +end + +def generators + Faker.constants.delete_if do |subclass| + %i[ + Base + Cat + Char + Base58 + Config + Date + Deprecator + Dog + Religion + Time + VERSION + ].include?(subclass) + end.sort +end + +def subclass_methods(subclass) + eval("Faker::#{subclass}.public_methods(false) - Faker::Base.public_methods(false)").sort.map do |method| + "Faker::#{subclass}.#{method}" + end.sort +end + +Benchmark.ips do |x| + x.report("Number of generators: #{all_generators.count}") do + all_generators.each { |generator| eval(generator) } + end +end diff --git a/benchmark/load_yml_vs_json.rb b/benchmark/load_yml_vs_json.rb new file mode 100644 index 0000000000..296f26f916 --- /dev/null +++ b/benchmark/load_yml_vs_json.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +require 'benchmark/ips' +require 'json' +require 'yaml' + +Benchmark.ips do |x| + x.report('YML') { YAML.load_file(File.expand_path("#{File.dirname(__FILE__)}/../lib/locales/es-MX.yml")) } + x.report('JSON') { JSON.load_file("#{File.dirname(__FILE__)}/../test/fixtures/locales/es-MX.json") } + + x.compare!(order: :baseline) +end diff --git a/benchmark/require.rb b/benchmark/require.rb new file mode 100644 index 0000000000..f4fa70d838 --- /dev/null +++ b/benchmark/require.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +require 'benchmark' + +ms = Benchmark.realtime do + require 'faker' +end * 1000 + +puts "took #{ms}ms to load" diff --git a/tasks/benchmark.rake b/tasks/benchmark.rake deleted file mode 100644 index 501224402b..0000000000 --- a/tasks/benchmark.rake +++ /dev/null @@ -1,62 +0,0 @@ -# frozen_string_literal: true - -# rubocop:disable Security/Eval,Style/EvalWithLocation - -require 'benchmark' -require 'faker' - -namespace :benchmark do - desc 'Benchmarking all methods' - task :all_methods do - all_methods = BenchmarkHelper.all_methods - count = all_methods.count - - Benchmark.bmbm do |x| - x.report("Number of generators: #{count}") do - 100.times do - all_methods.each { |method_name| eval(method_name) } - end - end - end - end - - desc 'Comparing loading translations from YML vs. JSON' - task :compare_loading_yml_vs_json do - Benchmark.bmbm do |x| - x.report('YML') do - 100.times do - YAML.load_file(File.expand_path("#{File.dirname(__FILE__)}/../lib/locales/es-MX.yml")) - end - end - - x.report('JSON') do - 100.times do - JSON.load_file("#{File.dirname(__FILE__)}/../test/fixtures/locales/es-MX.json") - end - end - end - end -end - -class BenchmarkHelper - class << self - def all_methods - subclasses.map do |subclass| - subclass_methods(subclass).flatten - end.flatten.sort - end - - def subclasses - Faker.constants.delete_if do |subclass| - %i[Base Bank Books Cat Char Base58 ChileRut CLI Config Creature Date Deprecator Dog DragonBall Dota ElderScrolls Fallout Games GamesHalfLife HeroesOfTheStorm Internet JapaneseMedia LeagueOfLegends Movies Myst Overwatch OnePiece Pokemon Religion Sports SwordArtOnline TvShows Time VERSION Witcher WorldOfWarcraft Zelda].include?(subclass) - end.sort - end - - def subclass_methods(subclass) - eval("Faker::#{subclass}.public_methods(false) - Faker::Base.public_methods(false)").sort.map do |method| - "Faker::#{subclass}.#{method}" - end.sort - end - end -end -# rubocop:enable Security/Eval,Style/EvalWithLocation From 07769e927f5611d9827db8886bdc78430a04e17a Mon Sep 17 00:00:00 2001 From: Stefanni Brasil Date: Tue, 13 Jan 2026 11:35:47 -0700 Subject: [PATCH 3/6] Strict permissions for gh workflows --- .github/workflows/bench.yml | 4 ++++ .github/workflows/ruby.yml | 1 + 2 files changed, 5 insertions(+) diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml index fb431439a9..2d1d66e3f3 100644 --- a/.github/workflows/bench.yml +++ b/.github/workflows/bench.yml @@ -6,6 +6,10 @@ on: pull_request: branches: [ main ] +permissions: + contents: read + pull-requests: read + jobs: build: runs-on: ubuntu-latest diff --git a/.github/workflows/ruby.yml b/.github/workflows/ruby.yml index d8f6c801de..c54a857b34 100644 --- a/.github/workflows/ruby.yml +++ b/.github/workflows/ruby.yml @@ -15,6 +15,7 @@ on: permissions: contents: read + pull-requests: read jobs: lint: From 8714ae3a4a14e6433b4fbbf89d5e94a282f1a77e Mon Sep 17 00:00:00 2001 From: Stefanni Brasil Date: Tue, 13 Jan 2026 11:56:03 -0700 Subject: [PATCH 4/6] Skip eval and avoid generating all generators inside of the benchmark execution Looping over the constants instead of using `eval` is a more secure approach. Plus, build the list of generators outside so that we're only benchmarking generator execution. Co-Authored-By: Thiago Araujo --- .rubocop.yml | 2 -- benchmark/generators.rb | 24 +++++++++++++++--------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 8e26db6a6f..7fffa274c6 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -54,7 +54,6 @@ Security/Eval: Description: The use of eval represents a serious security risk. Exclude: - 'lib/faker/default/json.rb' - - 'benchmark/generators.rb' Style/AsciiComments: Description: This cop checks for non-ascii (non-English) characters in comments. @@ -77,7 +76,6 @@ Style/EvalWithLocation: Description: This cop checks eval method usage. eval can receive source location metadata, that are filename and line number. Exclude: - 'lib/faker/default/json.rb' - - 'benchmark/generators.rb' Style/FormatStringToken: Description: This cop checks for a consistent style for named format string tokens. diff --git a/benchmark/generators.rb b/benchmark/generators.rb index 7e3408fde9..2b09b8b7f7 100644 --- a/benchmark/generators.rb +++ b/benchmark/generators.rb @@ -3,13 +3,13 @@ require 'benchmark/ips' require 'faker' -def all_generators - generators.map do |klass| - subclass_methods(klass).flatten - end.flatten.sort +def generators + constants.flat_map do |klass| + subclass_methods(klass) + end end -def generators +def constants Faker.constants.delete_if do |subclass| %i[ Base @@ -28,13 +28,19 @@ def generators end def subclass_methods(subclass) - eval("Faker::#{subclass}.public_methods(false) - Faker::Base.public_methods(false)").sort.map do |method| - "Faker::#{subclass}.#{method}" - end.sort + klass = Faker.const_get(subclass) + + public_methods = klass.public_methods(false) - Faker::Base.public_methods(false) + + public_methods.sort.map do |method| + [klass, method] + end end +all_generators = generators + Benchmark.ips do |x| x.report("Number of generators: #{all_generators.count}") do - all_generators.each { |generator| eval(generator) } + all_generators.each { |klass, generator| klass.send(generator) } end end From 7745001f6dda16f4e8c39a9ca354ec79022e54fa Mon Sep 17 00:00:00 2001 From: Stefanni Brasil Date: Tue, 13 Jan 2026 11:59:41 -0700 Subject: [PATCH 5/6] This was a one-time experiment --- benchmark/load_yml_vs_json.rb | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 benchmark/load_yml_vs_json.rb diff --git a/benchmark/load_yml_vs_json.rb b/benchmark/load_yml_vs_json.rb deleted file mode 100644 index 296f26f916..0000000000 --- a/benchmark/load_yml_vs_json.rb +++ /dev/null @@ -1,12 +0,0 @@ -# frozen_string_literal: true - -require 'benchmark/ips' -require 'json' -require 'yaml' - -Benchmark.ips do |x| - x.report('YML') { YAML.load_file(File.expand_path("#{File.dirname(__FILE__)}/../lib/locales/es-MX.yml")) } - x.report('JSON') { JSON.load_file("#{File.dirname(__FILE__)}/../test/fixtures/locales/es-MX.json") } - - x.compare!(order: :baseline) -end From 766c36c6910cc1d4e1e1bfe9a43fcaae16e36a09 Mon Sep 17 00:00:00 2001 From: Stefanni Brasil Date: Tue, 13 Jan 2026 13:13:28 -0700 Subject: [PATCH 6/6] Don't need to keep this around anymore after comparing YML vs JSON --- test/fixtures/locales/es-MX.json | 2026 ------------------------------ 1 file changed, 2026 deletions(-) delete mode 100644 test/fixtures/locales/es-MX.json diff --git a/test/fixtures/locales/es-MX.json b/test/fixtures/locales/es-MX.json deleted file mode 100644 index 09797b9620..0000000000 --- a/test/fixtures/locales/es-MX.json +++ /dev/null @@ -1,2026 +0,0 @@ -{ - "es-MX": { - "faker": { - "address": { - "city_prefix": "", - "city_suffix": "", - "country": [ - "Afganistán", - "Albania", - "Alemania", - "Andorra", - "Angola", - "Anguila", - "Antigua y Barbuda", - "Antártida", - "Arabia Saudita", - "Argelia", - "Argentina", - "Armenia", - "Aruba", - "Australia", - "Austria", - "Autoridad Nacional Palestina", - "Azerbaiyán", - "Bahamas", - "Bangladés", - "Barbados", - "Baréin", - "Belice", - "Benín", - "Bermudas", - "Bielorrusia", - "Birmania", - "Bolivia", - "Bonaire", - "San Eustaquio y Saba", - "Bosnia y Herzegovina", - "Botsuana", - "Brasil", - "Brunéi", - "Bulgaria", - "Burkina Faso", - "Burundi", - "Bután", - "Bélgica", - "Cabo Verde", - "Camboya", - "Camerún", - "Canadá", - "Chad", - "Chile", - "China", - "Chipre", - "Ciudad del Vaticano", - "Colombia", - "Comoras", - "Corea del Norte", - "Corea del Sur", - "Costa Rica", - "Costa de Marfil", - "Croacia", - "Cuba", - "Curaçao", - "Dinamarca", - "Dominica", - "Ecuador", - "Egipto", - "El Salvador", - "Emiratos Árabes Unidos", - "Eritrea", - "Eslovaquia", - "Eslovenia", - "España", - "Estados Unidos", - "Estonia", - "Etiopía", - "Filipinas", - "Finlandia", - "Fiyi", - "Francia", - "Gabón", - "Gambia", - "Georgia", - "Ghana", - "Gibraltar", - "Granada", - "Grecia", - "Groenlandia", - "Guadalupe", - "Guam", - "Guatemala", - "Guayana Francesa", - "Guernsey", - "Guinea", - "Guinea Ecuatorial", - "Guinea-Bissau", - "Guyana", - "Haití", - "Honduras", - "Hong Kong", - "Hungría", - "India", - "Indonesia", - "Irak", - "Irlanda", - "Irán", - "Isla Bouvet", - "Isla de Man", - "Isla de Navidad", - "Islandia", - "Islas Caimán", - "Islas Cocos", - "Islas Cook", - "Islas Faroe", - "Islas Georgias del Sur y Sandwich del Sur", - "Islas Heard y McDonald", - "Islas Malvinas", - "Islas Marianas del Norte", - "Islas Marshall", - "Islas Pitcairn", - "Islas Salomón", - "Islas Turcas y Caicos", - "Islas Vírgenes Británicas", - "Islas Vírgenes de los Estados Unidos", - "Islas ultramarinas de Estados Unidos", - "Israel", - "Italia", - "Jamaica", - "Japón", - "Jersey", - "Jordania", - "Kazajistán", - "Kenia", - "Kirguistán", - "Kiribati", - "Kuwait", - "Laos", - "Lesoto", - "Letonia", - "Liberia", - "Libia", - "Liechtenstein", - "Lituania", - "Luxemburgo", - "Líbano", - "Macao", - "Madagascar", - "Malasia", - "Malaui", - "Maldivas", - "Malta", - "Malí", - "Marruecos", - "Martinica", - "Mauricio", - "Mauritania", - "Mayotte", - "Micronesia", - "Moldavia", - "Mongolia", - "Montenegro", - "Montserrat", - "Mozambique", - "México", - "Mónaco", - "Namibia", - "Nauru", - "Nepal", - "Nicaragua", - "Nigeria", - "Niue", - "Norfolk", - "Noruega", - "Nueva Caledonia", - "Nueva Zelanda", - "Níger", - "Omán", - "Pakistán", - "Palaos", - "Panamá", - "Papúa Nueva Guinea", - "Paraguay", - "Países Bajos", - "Perú", - "Polinesia Francesa", - "Polonia", - "Portugal", - "Qatar", - "Reino Unido", - "Rep. Dem. del Congo", - "República Centroafricana", - "República Checa", - "República Dominicana", - "República de Macedonia", - "República del Congo", - "Reunión", - "Ruanda", - "Rumania", - "Rusia", - "Samoa", - "Samoa Estadounidense", - "San Bartolomé", - "San Cristóbal y Nieves", - "San Marino", - "San Martín", - "San Martín (parte holandesa)", - "San Pedro y Miquelón", - "San Vicente y las Granadinas", - "Santa Helena", - "A. y T.", - "Santa Lucía", - "Santo Tomé y Príncipe", - "Senegal", - "Serbia", - "Seychelles", - "Sierra Leona", - "Singapur", - "Siria", - "Somalia", - "Sri Lanka", - "Suazilandia", - "Sudáfrica", - "Sudán", - "Sudán del Sur", - "Suecia", - "Suiza", - "Surinam", - "Svalbard y Jan Mayen", - "Sáhara Occidental", - "Tailandia", - "Taiwán", - "Tanzania", - "Tayikistán", - "Territorio Británico del Océano Índico", - "Territorios Australes Franceses", - "Timor Oriental", - "Togo", - "Tokelau", - "Tonga", - "Trinidad y Tobago", - "Turkmenistán", - "Turquía", - "Tuvalu", - "Túnez", - "Ucrania", - "Uganda", - "Uruguay", - "Uzbekistán", - "Vanuatu", - "Venezuela", - "Vietnam", - "Wallis y Futuna", - "Yemen", - "Yibuti", - "Zambia", - "Zimbabue", - "Åland" - ], - "building_number": [ - "S/N", - "#", - "##", - "###", - "####", - "#####" - ], - "municipality": [ - "Abasolo", - "Acapulco", - "Actopan", - "Acuña", - "Aguascalientes", - "Ahome", - "Ahuacatlán", - "Ahuacuotzingo", - "Ahuatlan", - "Alaquines", - "Altar", - "Amatlán de Cañas", - "Angostura", - "Apan", - "Apaseo el Alto", - "Apizaco", - "Apodaca", - "Aporo", - "Aquila", - "Armería", - "Arroyo Seco", - "Arteaga", - "Asientos", - "Atenco", - "Atenguillo", - "Atolinga", - "Atzalan", - "Ayapango", - "Azcapotzalco", - "Bacadehuachi", - "Bacalar", - "Bacanora", - "Badiraguato", - "Benito Juárez", - "Brise", - "Buenaventura", - "Burgos", - "Bustamante", - "Cabo Corrientes", - "Caborca", - "Calakmul", - "Calera", - "Calnali", - "Calvillo", - "Camargo", - "Campeche", - "Canatlán", - "Cancún", - "Candelaria", - "Cantamayec", - "Carbo", - "Carmen", - "Catorce", - "Celaya", - "Centla", - "Centro", - "Cerritos", - "Chalchihuites", - "Champotón", - "Chanal", - "Chapulhuacán", - "Chapultepec", - "Chavinda", - "Chiautempan", - "Chichiquila", - "Chicoasen", - "Chietla", - "Chihuahua", - "Chimalhuacán", - "Choix", - "Citlaltepetl", - "Ciudad Madero", - "Ciudad Valles", - "Coatzacoalcos", - "Cocula", - "Colima", - "Comala", - "Comondú", - "Comonfort", - "Compostela", - "Copainala", - "Copalillo", - "Copanatoyac", - "Coquimatlán", - "Coronango", - "Cosio", - "Coyame del Sotol", - "Coyoacán", - "Cozumel", - "Cualac", - "Cuatro Ciénegas", - "Cuauhtémoc", - "Cucurpe", - "Cuencame", - "Cuernavaca", - "Culiacán", - "Cunduacán", - "Cárdenas", - "Doctor Mora", - "Durango", - "Dzidzantun", - "Ecatepec", - "El Fuerte", - "El Llano", - "El Mante", - "El Marqués", - "El Naranjo", - "El Salvador", - "Emiliano Zapata", - "Ensenada", - "Epazoyucan", - "Epitacio Huerta", - "Erongaricuaro", - "Escarcega", - "Esperanza", - "Ezequiel Montes", - "Galeana", - "Genaro Codina", - "General Escobedo", - "González", - "Gral. Zaragoza", - "Guachochi", - "Guadalajara", - "Guadalupe", - "Guanacevi", - "Guerrero", - "Gómez Palacio", - "Hecelchakan", - "Hermosillo", - "Hocaba", - "Hopelchen", - "Huajicori", - "Hualahuises", - "Huanimaro", - "Huayacocotla", - "Huejucar", - "Hueyotlipan", - "Huimilpan", - "Huixquilucan", - "Hunucma", - "Iliatenco", - "Inde", - "Irapuato", - "Irimbo", - "Isla Mujeres", - "Ixil", - "Ixtapaluca", - "Ixtlahuacán", - "Ixtlan de Juárez", - "Ixtlán del Río", - "Iztacalco", - "Jalpa de Méndez", - "Jalpan de Serra", - "Jamapa", - "Jesús María", - "Jiutepec", - "Jonuta", - "Juárez", - "Kaua", - "La Huerta", - "La Independencia", - "La Paz", - "La Yesca", - "Las Margaritas", - "Lazaro Cárdenas", - "Lerdo", - "León", - "Lolotla", - "Loreto", - "Los Cabos", - "Luvianos", - "López", - "Magdalena", - "Manzanillo", - "Marin", - "Matamoros", - "Matehuala", - "Mazapil", - "Mazatepec", - "Mazatlan", - "Mazatlán", - "Mecatlan", - "Melchor Ocampo", - "Metepec", - "Metztitlán", - "Mexicali", - "Mezquital", - "Mier y Noriega", - "Miguel Hidalgo", - "Milpa Alta", - "Minatitlán", - "Miquihuana", - "Moctezuma", - "Monclova", - "Monte Escobedo", - "Montemorelos", - "Monterrey", - "Morelia", - "Morelos", - "Moroleón", - "Mulege", - "Méndez", - "Mérida", - "Nacajuca", - "Nadadores", - "Naucalpan", - "Naupan", - "Nava", - "Navolato", - "Nazareno Etla", - "Nazas", - "Nezahualcóyotl", - "Nombre de Dios", - "Nuevo Laredo", - "Nuevo Zoquiapam", - "Ocampo", - "Ojinaga", - "Othón P. Blanco", - "Oxkutzcab", - "Palizada", - "Panuco", - "Paracuaro", - "Patzcuaro", - "Pedro Escobedo", - "Penjamo", - "Pinal de Amoles", - "Poncitlan", - "Progreso", - "Puebla", - "Puente de Ixtla", - "Queretaro", - "Querétaro", - "Rayones", - "Reynosa", - "Rincón de Romos", - "Romita", - "Rosario", - "Salamanca", - "Salinas Victoria", - "Saltillo", - "Salto de Agua", - "San Blas", - "San Buenaventura", - "San Carlos", - "San Ignacio", - "San Juan", - "San Juan del Río", - "San Lorenzo", - "San Luis Potosí", - "San Marcos", - "San Miguel Yotao", - "San Nicolas", - "San Nicolás de los Garza", - "Santa Catarina", - "Santiago Nuyoo", - "Santiago Tenango", - "Saric", - "Sinaloa", - "Singuilucan", - "Solidaridad", - "Soteapan", - "Suchiate", - "Susticacán", - "Tacotalpa", - "Tahdziu", - "Tamazunchale", - "Tancanhuitz", - "Tapachula", - "Tapilula", - "Taxco de Alarcón", - "Teapa", - "Tecamac", - "Tecate", - "Tecomán", - "Tecuala", - "Temosachic", - "Tenabo", - "Tenango del Aire", - "Tenosique", - "Teocaltiche", - "Tepalcingo", - "Tepezala", - "Tepic", - "Tepoztlan", - "Tetecala", - "Tetepango", - "Tijuana", - "Tlacuilotepec", - "Tlalchapa", - "Tlalnepantla", - "Tlalpan", - "Tlaquepaque", - "Tlayacapan", - "Tocatlan", - "Tochimilco", - "Tocumbo", - "Tolimán", - "Toluca", - "Tonalá", - "Tonatico", - "Torreón", - "Totolac", - "Tulum", - "Tuxpan", - "Tuxtla", - "Umán", - "Unión Hidalgo", - "Uruachi", - "Valladolid", - "Vanegas", - "Veracruz", - "Villa Victoria", - "Villa de Álvarez", - "Villa del Carbón", - "Villahermosa", - "Xalapa", - "Xalisco", - "Xaloztoc", - "Xico", - "Xicohtzinco", - "Xochihuehuetlán", - "Xochimilco", - "Xochistlahuaca", - "Xochitepec", - "Yauhquemehcan", - "Yecapixtla", - "Yogana", - "Zacatecas", - "Zacatepec", - "Zapopan", - "Zaragoza", - "Zongolica", - "Álvaro Obregón" - ], - "street_prefix": [ - "Arroyo", - "Avenida", - "Bajada", - "Barranco", - "Calle", - "Camino", - "Carretera", - "Conjunto", - "Entrada", - "Escalinata", - "Explanada", - "Glorieta", - "Grupo", - "Huerta", - "Jardines", - "Lago", - "Manzana", - "Mercado", - "Monte", - "Muelle", - "Parque", - "Pasaje", - "Paseo", - "Plaza", - "Privada", - "Prolongación", - "Quinta", - "Rampa", - "Rincón", - "Salida", - "Sector", - "Subida", - "Vía" - ], - "secondary_address": [ - "Apartamento ##", - "Departamento ###", - "Depto. ###", - "Interior ###", - "Interior ?#", - "Int. #", - "Piso #", - "Piso ##", - "#ª Planta", - "Planta alta", - "Planta baja" - ], - "postcode": [ - "#####" - ], - "state": [ - "Aguascalientes", - "Baja California", - "Baja California Sur", - "Campeche", - "Coahuila", - "Colima", - "Chiapas", - "Chihuahua", - "Ciudad de México", - "Durango", - "Guanajuato", - "Guerrero", - "Hidalgo", - "Jalisco", - "México", - "Michoacán", - "Morelos", - "Nayarit", - "Nuevo León", - "Oaxaca", - "Puebla", - "Querétaro", - "Quintana Roo", - "San Luis Potosí", - "Sinaloa", - "Sonora", - "Tabasco", - "Tamaulipas", - "Tlaxcala", - "Veracruz", - "Yucatán", - "Zacatecas" - ], - "state_abbr": [ - "AGU", - "BCN", - "BCS", - "CAM", - "CHP", - "CHH", - "COA", - "COL", - "DIF", - "DUR", - "GUA", - "GRO", - "HID", - "JAL", - "MEX", - "MIC", - "MOR", - "NAY", - "NLE", - "OAX", - "PUE", - "QUE", - "ROO", - "SLP", - "SIN", - "SON", - "TAB", - "TAM", - "TLA", - "VER", - "YUC", - "ZAC" - ], - "time_zone": [ - "África/Argel", - "África/Cairo", - "África/Casablanca", - "África/Harare", - "África/Johannesburgo", - "África/Monrovia", - "África/Nairobi", - "América/Argentina/Buenos_Aires", - "América/Bogotá", - "América/Caracas", - "América/Chicago", - "América/Chihuahua", - "América/Ciudad_de_México", - "América/Denver", - "América/Guatemala", - "América/Guyana", - "América/Halifax", - "América/Indiana/Indianapolis", - "América/Juneau", - "América/La_Paz", - "América/Lima", - "América/Los_Angeles", - "América/Mazatlán", - "América/Monterrey", - "América/Nueva_York", - "América/Nuuk", - "América/Phoenix", - "América/Regina", - "América/San_Juan_de_Terranova", - "América/Santiago", - "América/São_Paulo", - "América/Tijuana", - "Asia/Almatý", - "Asia/Bagdad", - "Asia/Bakú", - "Asia/Bangkok", - "Asia/Calcuta", - "Asia/Chongqing", - "Asia/Colombo", - "Asia/Daca", - "Asia/Ekaterimburgo", - "Asia/Ereván", - "Asia/Hong_Kong", - "Asia/Irkutsk", - "Asia/Jerusalén", - "Asia/Kabul", - "Asia/Kamchatka", - "Asia/Karachi", - "Asia/Katmandú", - "Asia/Krasnoyarsk", - "Asia/Kuala_Lumpur", - "Asia/Kuwait", - "Asia/Magadán", - "Asia/Mascate", - "Asia/Novosibirsk", - "Asia/Rangún", - "Asia/Riad", - "Asia/Seúl", - "Asia/Shanghai", - "Asia/Singapur", - "Asia/Taipéi", - "Asia/Taskent", - "Asia/Teherán", - "Asia/Tiflis", - "Asia/Tokio", - "Asia/Ulán_Bator", - "Asia/Urumchi", - "Asia/Vladivostok", - "Asia/Yakarta", - "Asia/Yakutsk", - "Atlantic/Azores", - "Atlantic/Cabo_Verde", - "Atlantic/Georgia_Del_Sur", - "Australia/Adelaida", - "Australia/Brisbane", - "Australia/Darwin", - "Australia/Hobart", - "Australia/Melbourne", - "Australia/Perth", - "Australia/Sydney", - "Etc/UTC", - "Europa/Atenas", - "Europa/Belgrado", - "Europa/Berlín", - "Europa/Bratislava", - "Europa/Bruselas", - "Europa/Bucarest", - "Europa/Budapest", - "Europa/Copenhague", - "Europa/Dublín", - "Europa/Estambul", - "Europa/Estocolmo", - "Europa/Helsinki", - "Europa/Kiev", - "Europa/Lisboa", - "Europa/Liubliana", - "Europa/Londres", - "Europa/Madrid", - "Europa/Minsk", - "Europa/Moscú", - "Europa/Paris", - "Europa/Praga", - "Europa/Riga", - "Europa/Roma", - "Europa/Sarajevo", - "Europa/Skopie", - "Europa/Sofía", - "Europa/Tallin", - "Europa/Viena", - "Europa/Vilna", - "Europa/Warsaw Europa/Zagreb", - "Europa/Ámsterdam", - "Pacífico/Apia", - "Pacífico/Auckland", - "Pacífico/Fakaofo", - "Pacífico/Fiji", - "Pacífico/Guaján", - "Pacífico/Honolulú", - "Pacífico/Islas_Midway", - "Pacífico/Majuro", - "Pacífico/Numea", - "Pacífico/Pago_Pago", - "Pacífico/Puerto_Moresby", - "Pacífico/Tongatapu" - ], - "city": [ - "#{municipality}" - ], - "city_with_state": [ - "#{municipality}, #{state}" - ], - "street_name": [ - "#{street_prefix} #{Name.first_name}", - "#{street_prefix} #{Name.first_name} #{Name.last_name}", - "#{street_prefix} #{state}", - "#{street_prefix} #{municipality}" - ], - "street_address": [ - "#{street_name} #{building_number}", - "#{street_name} #{building_number} #{secondary_address}" - ], - "default_country": [ - "México" - ], - "default_country_code": [ - "MX" - ] - }, - "company": { - "suffix": [ - "S.A.", - "S.A. de C.V.", - "S.R.L", - "S.A.B.", - "S.C." - ], - "prefix": [ - "Grupo", - "Sociedad", - "Grupo Financiero", - "Colegio", - "Fondo" - ], - "name": [ - "#{Name.last_name} #{suffix}", - "#{prefix} #{Name.last_name} #{suffix}", - "#{Name.last_name} y #{Name.last_name} #{suffix}", - "#{Name.last_name} #{Name.last_name} #{suffix}", - "#{Name.last_name}, #{Name.last_name} y #{Name.last_name} Asociados #{suffix}" - ], - "university": { - "suffix": [ - "Norte", - "del Norte", - "Occidental", - "Oeste", - "Del Sur", - "Sur", - "Oriental", - "Oriente", - "de Graduados", - "de Administración" - ], - "prefix": [ - "Universidad", - "Instituto", - "Academia", - "Colegio" - ], - "name": [ - "#{University.prefix} #{Name.last_name} #{University.suffix}", - "#{University.prefix} #{Name.last_name}", - "#{University.prefix} #{Address.state} #{University.suffix}" - ] - } - }, - "internet": { - "domain_suffix": [ - "com", - "com.mx", - "mx", - "info", - "me", - "org", - "org.mx" - ] - }, - "name": { - "first_name": [ - "José Luis", - "Juan", - "Francisco", - "José", - "Antonio", - "Jesús", - "Miguel Ángel", - "Pedro", - "Alejandro", - "Manuel", - "Juan Carlos", - "Roberto", - "Jorge", - "Carlos", - "Fernando", - "Ricardo", - "Miguel", - "Javier", - "Martín", - "Rafael", - "Raúl", - "Arturo", - "Daniel", - "Eduardo", - "Enrique", - "Mario", - "José Antonio", - "Sergio", - "Gerardo", - "Salvador", - "Marco Antonio", - "Alfredo", - "David", - "Armando", - "Alberto", - "Luis", - "Óscar", - "Ramón", - "Guillermo", - "Rubén", - "Jaime", - "Felipe", - "Julio César", - "Andrés", - "Pablo", - "Ángel", - "Gabriel", - "Héctor", - "Alfonso", - "José Guadalupe", - "Agustín", - "Ignacio", - "Víctor", - "Rogelio", - "Gustavo", - "Ernesto", - "Rodolfo", - "Luis Alberto", - "Gilberto", - "Vicente", - "Juan Antonio", - "Tomás", - "Israel", - "César", - "Adrián", - "Ismael", - "Santiago", - "Humberto", - "Gregorio", - "Joel", - "Esteban", - "José Alfredo", - "Nicolás", - "Omar", - "Moisés", - "Félix", - "Lorenzo", - "Samuel", - "Carlos Alberto", - "José Angel", - "Ramiro", - "Abel", - "Jorge Luis", - "Marcos", - "Mario Alberto", - "Rodrigo", - "Edgar", - "Isidro", - "José Alberto", - "Leonardo", - "Benjamín", - "Jorge Alberto", - "Julio", - "Raymundo", - "Víctor Hugo", - "Saúl", - "Benito", - "José Juan", - "Rigoberto", - "Hugo", - "Guadalupe", - "María", - "Margarita", - "Verónica", - "María Elena", - "Josefina", - "Leticia", - "Teresa", - "Patricia", - "Rosa", - "Martha", - "Rosa María", - "Alicia", - "Yolanda", - "Francisca", - "Silvia", - "Elizabeth", - "Gloria", - "Ana María", - "Gabriela", - "Alejandra", - "María Luisa", - "María de Lourdes", - "Adriana", - "Araceli", - "Antonia", - "Lucía", - "Carmen", - "Irma", - "Claudia", - "Beatriz", - "Isabel", - "Laura", - "Maribel", - "Graciela", - "Virginia", - "Catalina", - "Esperanza", - "Angélica", - "Maricela", - "Cecilia", - "Susana", - "Cristina", - "Julia", - "Concepción", - "Victoria", - "Ofelia", - "Rocío", - "Carolina", - "Raquel", - "Petra", - "Lorena", - "Reyna", - "Sandra", - "Paula", - "Guillermina", - "Sara", - "Elvira", - "Manuela", - "Marisol", - "Mónica", - "Erika", - "Celia", - "Luz María", - "Irene", - "Magdalena", - "Estela", - "Ángela", - "Rosario", - "Esther", - "Eva", - "Norma", - "Aurora", - "Socorro", - "Consuelo", - "Lidia", - "Bertha", - "Sofía", - "Dolores", - "Elena", - "Rosalba", - "Liliana", - "Andrea", - "Adela", - "Mariana", - "Fabiola", - "Karina", - "Martina", - "Marcela", - "Miriam", - "Mercedes", - "Marina", - "Amalia", - "Olivia", - "Angelina", - "Sonia", - "Agustina", - "Edith", - "Lilia", - "Micaela" - ], - "last_name": [ - "Hernández", - "García", - "Martínez", - "López", - "González", - "Rodríguez", - "Pérez", - "Sánchez", - "Ramírez", - "Cruz", - "Flores", - "Gómez", - "Morales", - "Vázquez", - "Reyes", - "Jímenez", - "Torres", - "Díaz", - "Gutiérrez", - "Mendoza", - "Ruiz", - "Aguilar", - "Ortiz", - "Castillo", - "Moreno", - "Romero", - "Álvarez", - "Chávez", - "Rivera", - "Juárez", - "Ramos", - "Méndez", - "Domínguez", - "Herrera", - "Medina", - "Vargas", - "Castro", - "Guzmán", - "Velázquez", - "Muñoz", - "Rojas", - "Contreras", - "Salazar", - "Luna", - "de la Cruz", - "Ortega", - "Guerrero", - "Santiago", - "Estrada", - "Bautista", - "Cortés", - "Soto", - "Alvarado", - "Espinoza", - "Lara", - "Ávila", - "Ríos", - "Cervantes", - "Silva", - "Delgado", - "Vega", - "Márquez", - "Sandoval", - "Fernández", - "León", - "Carrillo", - "Mejía", - "Solís", - "Núñez", - "Rosas", - "Valdez", - "Ibarra", - "Campos", - "Santos", - "Camacho", - "Peña", - "Maldonado", - "Navarro", - "Rosales", - "Acosta", - "Miranda", - "Trejo", - "Cabrera", - "Valencia", - "Nava", - "Castañeda", - "Pacheco", - "Robles", - "Molina", - "Rangel", - "Fuentes", - "Huerta", - "Meza", - "Aguirre", - "Cárdenas", - "Orozco", - "Padilla", - "Espinosa", - "Ayala", - "Salas", - "Valenzuela", - "Zúñiga", - "Ochoa", - "Salinas", - "Mora", - "Tapia", - "Serrano", - "Durán", - "Olvera", - "Macías", - "Zamora", - "Calderón", - "Arellano", - "Suárez", - "Barrera", - "Zavala", - "Villegas", - "Gallegos", - "Lozano", - "Galván", - "Figueroa", - "Beltrán", - "Franco", - "Villanueva", - "Sosa", - "Montes", - "Andrade", - "Velasco", - "Arias", - "Marín", - "Corona", - "Garza", - "Ponce", - "Esquivel", - "Pineda", - "Alonso", - "Palacios", - "Antonio", - "Vásquez", - "Trujillo", - "Cortez", - "Rocha", - "Rubio", - "Bernal", - "Benítez", - "Escobar", - "Villa", - "Galindo", - "Cuevas", - "Bravo", - "Cano", - "Osorio", - "Mata", - "Carmona", - "Montoya", - "de Jesús", - "Enríquez", - "Cisneros", - "Rivas", - "Parra", - "Reséndiz", - "Téllez", - "Zárate", - "Salgado", - "de la Rosa", - "Vera", - "Tovar", - "Arroyo", - "Córdova", - "Leyva", - "Quintero", - "Becerra", - "Quiroz", - "Barajas", - "Ávalos", - "Peralta", - "Román", - "Esparza", - "Murillo", - "Guevara", - "Olivares", - "Félix", - "de León", - "Castellanos", - "Villarreal", - "Villalobos", - "Lugo", - "Ángeles", - "Montiel", - "Segura", - "Magaña", - "Saucedo", - "Gallardo", - "Mercado", - "Navarrete", - "Reyna", - "Paredes", - "Dávila", - "Leal", - "Guerra", - "Saldaña", - "Guillén", - "Santana", - "Uribe", - "Monroy", - "Piña", - "Yáñez", - "Nieto", - "Islas", - "Granados", - "Escobedo", - "Zapata", - "Caballero", - "del Ángel", - "Solano", - "Barron", - "Zepeda", - "Acevedo", - "Arriaga", - "Barrios", - "Mondragón", - "Galicia", - "Godínez", - "Ojeda", - "Duarte", - "Alfaro", - "Medrano", - "Rico", - "Aguilera", - "Gil", - "Ventura", - "Balderas", - "Arredondo", - "Coronado", - "Escamilla", - "Nájera", - "Palma", - "Amador", - "Blanco", - "Ocampo", - "Garduño", - "Barragán", - "Gámez", - "Francisco", - "Meléndez", - "Carbajal", - "Hurtado", - "Carrasco", - "Bonilla", - "Correa", - "Sierra", - "Anaya", - "Carranza", - "Romo", - "Valdés", - "Armenta", - "Alcántara", - "Escalante", - "Arreola", - "Quezada", - "Alarcón", - "Gaytán", - "Rentería", - "Vidal", - "Báez", - "de los Santos", - "Toledo", - "Colín", - "May", - "Carrera", - "Jaramillo", - "Santillán", - "Valle", - "Varela", - "Arenas", - "Rendón", - "Treviño", - "Venegas", - "Soriano", - "Zaragoza", - "Morán", - "Áviles", - "Aranda", - "Lira", - "Quintana", - "Arteaga", - "Valadez", - "Cordero", - "Sotelo", - "de la Torre", - "Muñiz", - "Hidalgo", - "Cázares", - "Covarrubias", - "Zamudio", - "Ordoñez", - "Aparicio", - "Baltazar", - "Gálvez", - "Madrigal" - ], - "prefix": [ - "Sr.", - "Sra.", - "Srita.", - "Dr.", - "Ing." - ], - "suffix": [ - "Jr.", - "Sr.", - "I", - "II", - "III", - "IV", - "V" - ], - "title": { - "descriptor": [ - "Supervisor", - "Asociado", - "Ejecutivo", - "Relacciones", - "Oficial", - "Gerente", - "Ingeniero", - "Especialista", - "Director", - "Coordinador", - "Administrador", - "Arquitecto", - "Analista", - "Diseñador", - "Planificador", - "Técnico", - "Funcionario", - "Desarrollador", - "Productor", - "Consultor", - "Asistente", - "Facilitador", - "Agente", - "Representante", - "Estratega" - ], - "level": [ - "de", - "para" - ], - "job": [ - "Soluciones", - "Programa", - "Marca", - "Seguridad", - "Investigación", - "Marketing", - "Normas", - "Implementación", - "Integración", - "Funcionalidad", - "Respuesta", - "Paradigma", - "Tácticas", - "Identidad", - "Mercados", - "Grupo", - "División", - "Aplicaciones", - "Optimización", - "Operaciones", - "Infraestructura", - "Tecnologías de Información", - "Comunicaciones", - "Web", - "Calidad", - "Seguro", - "Mobilidad", - "Cuentas", - "Datos", - "Creativo", - "Configuración", - "Contabilidad", - "Interacciones", - "Factores", - "Usabilidad", - "Métricas", - "Departamento", - "Región", - "Supervisión", - "Planeación" - ] - }, - "name": [ - "#{prefix} #{first_name} #{last_name} #{last_name}", - "#{first_name} #{last_name} #{last_name}" - ], - "name_with_middle": [ - "#{prefix} #{first_name} #{last_name} #{last_name}", - "#{first_name} #{last_name} #{last_name} #{suffix}", - "#{first_name} #{last_name} #{last_name}", - "#{first_name} #{last_name} #{last_name}", - "#{first_name} #{last_name} #{last_name}", - "#{first_name} #{last_name} #{last_name}" - ] - }, - "phone_number": { - "lada_dos": [ - "33", - "55", - "81" - ], - "lada_tres": [ - "222", - "223", - "224", - "225", - "226", - "227", - "228", - "229", - "231", - "232", - "233", - "235", - "236", - "237", - "238", - "241", - "243", - "244", - "245", - "246", - "247", - "248", - "249", - "271", - "272", - "273", - "274", - "275", - "276", - "278", - "279", - "281", - "282", - "283", - "284", - "285", - "287", - "288", - "294", - "296", - "297", - "311", - "312", - "313", - "314", - "315", - "316", - "317", - "319", - "321", - "322", - "323", - "324", - "325", - "326", - "327", - "328", - "329", - "341", - "342", - "343", - "344", - "345", - "346", - "347", - "348", - "349", - "351", - "352", - "353", - "354", - "355", - "356", - "357", - "358", - "359", - "371", - "372", - "373", - "374", - "375", - "376", - "377", - "378", - "381", - "382", - "383", - "384", - "385", - "386", - "387", - "388", - "389", - "391", - "392", - "393", - "394", - "395", - "411", - "412", - "413", - "414", - "415", - "417", - "418", - "419", - "421", - "422", - "423", - "424", - "425", - "426", - "427", - "428", - "429", - "431", - "432", - "433", - "434", - "435", - "436", - "437", - "438", - "441", - "442", - "443", - "444", - "445", - "447", - "448", - "449", - "451", - "452", - "453", - "454", - "455", - "456", - "457", - "458", - "459", - "461", - "462", - "463", - "464", - "465", - "466", - "467", - "468", - "469", - "471", - "472", - "473", - "474", - "475", - "476", - "477", - "478", - "481", - "482", - "483", - "485", - "486", - "487", - "488", - "489", - "492", - "493", - "494", - "495", - "496", - "498", - "499", - "588", - "591", - "592", - "593", - "594", - "595", - "596", - "597", - "599", - "612", - "613", - "614", - "615", - "616", - "618", - "621", - "622", - "623", - "624", - "625", - "626", - "627", - "628", - "629", - "631", - "632", - "633", - "634", - "635", - "636", - "637", - "638", - "639", - "641", - "642", - "643", - "644", - "645", - "646", - "647", - "648", - "649", - "651", - "652", - "653", - "656", - "658", - "659", - "661", - "662", - "664", - "665", - "667", - "668", - "669", - "671", - "672", - "673", - "674", - "675", - "676", - "677", - "686", - "687", - "694", - "695", - "696", - "697", - "698", - "711", - "712", - "713", - "714", - "715", - "716", - "717", - "718", - "719", - "721", - "722", - "723", - "724", - "725", - "726", - "727", - "728", - "731", - "732", - "733", - "734", - "735", - "736", - "737", - "738", - "739", - "741", - "742", - "743", - "744", - "745", - "746", - "747", - "748", - "749", - "751", - "753", - "754", - "755", - "756", - "757", - "758", - "759", - "761", - "762", - "763", - "764", - "765", - "766", - "767", - "768", - "769", - "771", - "772", - "773", - "774", - "775", - "776", - "777", - "778", - "779", - "781", - "782", - "783", - "784", - "785", - "786", - "789", - "791", - "797", - "821", - "823", - "824", - "825", - "826", - "828", - "829", - "831", - "832", - "833", - "834", - "835", - "836", - "841", - "842", - "844", - "845", - "846", - "861", - "862", - "864", - "866", - "867", - "868", - "869", - "871", - "872", - "873", - "877", - "878", - "891", - "892", - "894", - "897", - "899", - "913", - "914", - "916", - "917", - "918", - "919", - "921", - "922", - "923", - "924", - "932", - "933", - "934", - "936", - "937", - "938", - "951", - "953", - "954", - "958", - "961", - "962", - "963", - "964", - "965", - "966", - "967", - "968", - "969", - "971", - "972", - "981", - "982", - "983", - "984", - "985", - "986", - "987", - "988", - "991", - "992", - "993", - "994", - "995", - "996", - "997", - "998", - "999" - ], - "formats": [ - "#{PhoneNumber.lada_dos} #### ####", - "#{PhoneNumber.lada_tres} ### ####", - "(#{PhoneNumber.lada_dos}) #### ####", - "(#{PhoneNumber.lada_tres}) ### ####", - "#{PhoneNumber.lada_dos}-####-####", - "#{PhoneNumber.lada_tres}-###-####" - ] - }, - "cell_phone": { - "formats": [ - "#{PhoneNumber.lada_dos} #### ####", - "#{PhoneNumber.lada_tres} ### ####", - "(#{PhoneNumber.lada_dos}) #### ####", - "(#{PhoneNumber.lada_tres}) ### ####", - "#{PhoneNumber.lada_dos}-####-####", - "#{PhoneNumber.lada_tres}-###-####", - "044 #{PhoneNumber.lada_dos} #### ####", - "044 #{PhoneNumber.lada_tres} ### ####", - "044 (#{PhoneNumber.lada_dos}) #### ####", - "044 (#{PhoneNumber.lada_tres}) ### ####", - "044 #{PhoneNumber.lada_dos}-####-####", - "044 #{PhoneNumber.lada_tres}-###-####" - ] - }, - "subscription": { - "plans": [ - "Prueba gratuita", - "Basico", - "Starter", - "Essential", - "Estudiante", - "Bronze\"", - "Standard", - "Silver", - "Gold", - "Platinum", - "Profesional", - "Business", - "Diamond", - "Premium" - ], - "statuses": [ - "Activo", - "Parado", - "Bloqueado", - "Pendiente" - ], - "payment_methods": [ - "Tarjeta de credito", - "Tarjeta de débito", - "Paypal", - "Efectivo", - "Transferencia de dinero", - "Bitcoins", - "Cheque", - "Apple Pay", - "Google Pay", - "WeChat Pay", - "Alipay", - "Visa Checkout" - ], - "subscription_terms": [ - "Diaria", - "Semanal", - "Mensual", - "Anual", - "Bienal", - "Trienal", - "Quinquenal", - "De por vida" - ], - "payment_terms": [ - "Pago por adelantado", - "Mensual", - "Anual", - "Suscripción completa" - ] - }, - "finance": { - "vat_number": { - "MX": "/^([A-ZÑ]{3,4})([0-9]{2})(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1])[A-Z0-9]{3}$/" - } - } - } - } -}