Class: Faker::Internet
- Defined in:
- lib/faker/default/internet.rb,
lib/faker/default/internet_http.rb
Defined Under Namespace
Classes: HTTP
Constant Summary collapse
- PRIVATE_IPV4_ADDRESS_RANGES =
Private, Host, and Link-Local network address blocks as defined in en.wikipedia.org/wiki/IPv4#Special-use_addresses
[ [10..10, 0..255, 0..255, 1..255], # 10.0.0.0/8 - Used for local communications within a private network [100..100, 64..127, 0..255, 1..255], # 100.64.0.0/10 - Shared address space for communications between an ISP and its subscribers [127..127, 0..255, 0..255, 1..255], # 127.0.0.0/8 - Used for loopback addresses to the local host [169..169, 254..254, 0..255, 1..255], # 169.254.0.0/16 - Used for link-local addresses between two hosts on a single link when [172..172, 16..31, 0..255, 1..255], # 172.16.0.0/12 - Used for local communications within a private network [192..192, 0..0, 0..0, 1..255], # 192.0.0.0/24 - IETF Protocol Assignments [192..192, 168..168, 0..255, 1..255], # 192.168.0.0/16 - Used for local communications within a private network [198..198, 18..19, 0..255, 1..255] # 198.18.0.0/15 - Used for benchmark testing of inter-network communications between subnets ].each(&:freeze).freeze
Constants inherited from Base
Base::LLetters, Base::Letters, Base::NOT_GIVEN, Base::Numbers, Base::ULetters
Class Method Summary collapse
-
.base64(length: 16, padding: false, urlsafe: true) ⇒ String
Produces a random string of alphabetic characters, (no digits).
-
.bot_user_agent(vendor: nil) ⇒ String
Generate Web Crawler's user agents.
-
.device_token ⇒ Object
Generates random token.
-
.domain_name(legacy_subdomain = NOT_GIVEN, subdomain: false, domain: nil) ⇒ String
Returns the domain name.
-
.domain_suffix ⇒ String
Returns the domain suffix e.g.
-
.domain_word ⇒ String
Returns the domain word for internet.
-
.email(legacy_name = NOT_GIVEN, legacy_separators = NOT_GIVEN, name: nil, separators: nil, domain: nil) ⇒ String
Returns the email address.
-
.fix_umlauts(legacy_string = NOT_GIVEN, string: '') ⇒ String
Fixes ä, ö, ü, ß characters in string passed with ae, oe, ue, ss resp.
-
.free_email(legacy_name = NOT_GIVEN, name: nil) ⇒ String
Returns the email address with domain either gmail.com, yahoo.com or hotmail.com.
-
.ip_v4_address ⇒ String
Returns the IPv4 address.
-
.ip_v4_cidr ⇒ String
Returns Ipv4 address with CIDR, range from 1 to 31.
-
.ip_v6_address ⇒ String
Returns Ipv6 address.
-
.ip_v6_cidr ⇒ String
Returns Ipv6 address with CIDR, range between 1 to 127.
-
.mac_address(legacy_prefix = NOT_GIVEN, prefix: '') ⇒ String
Returns the MAC address.
-
.password(legacy_min_length = NOT_GIVEN, legacy_max_length = NOT_GIVEN, legacy_mix_case = NOT_GIVEN, legacy_special_characters = NOT_GIVEN, min_length: 8, max_length: 16, mix_case: true, special_characters: false) ⇒ String
Produces a randomized string of characters suitable for passwords.
-
.private_ip_v4_address ⇒ String
Returns the private IPv4 address.
-
.private_net_checker ⇒ Lambda
Returns lambda to check if address passed is private or not.
-
.private_nets_regex ⇒ Array
Returns the private network regular expressions.
-
.public_ip_v4_address ⇒ String
Returns the public IPv4 address.
-
.reserved_net_checker ⇒ Lambda
Returns lambda function to check address passed is reserved or not.
-
.reserved_nets_regex ⇒ Array
Returns the reserved network regular expressions.
-
.safe_email(legacy_name = NOT_GIVEN, name: nil) ⇒ String
Returns the email address with fixed domain name as 'example'.
-
.slug(legacy_words = NOT_GIVEN, legacy_glue = NOT_GIVEN, words: nil, glue: nil) ⇒ String
Returns unique string in URL.
-
.url(legacy_host = NOT_GIVEN, legacy_path = NOT_GIVEN, legacy_scheme = NOT_GIVEN, host: domain_name, path: "/#{username}", scheme: 'http') ⇒ String
Returns URL.
-
.user(*args) ⇒ hash
Produces a randomized hash of internet user details.
-
.user_agent(legacy_vendor = NOT_GIVEN, vendor: nil) ⇒ String
Generates the random browser identifier.
-
.username(legacy_specifier = NOT_GIVEN, legacy_separators = NOT_GIVEN, specifier: nil, separators: %w[. _]) ⇒ String
(also: user_name)
Returns the username.
-
.uuid ⇒ String
Generated universally unique identifier.
Methods inherited from Base
bothify, disable_enforce_available_locales, fetch, fetch_all, flexible, letterify, method_missing, numerify, parse, rand, rand_in_range, regexify, resolve, respond_to_missing?, sample, shuffle, translate, unique, with_locale
Class Method Details
.base64(length: 16, padding: false, urlsafe: true) ⇒ String
Produces a random string of alphabetic characters, (no digits)
577 578 579 580 581 582 583 584 585 586 587 |
# File 'lib/faker/default/internet.rb', line 577 def base64(length: 16, padding: false, urlsafe: true) char_range = [ Array('0'..'9'), Array('A'..'Z'), Array('a'..'z'), urlsafe ? %w[- _] : %w[+ /] ].flatten s = Array.new(length) { sample(char_range) }.join s += '=' if padding s end |
.bot_user_agent(vendor: nil) ⇒ String
Generate Web Crawler's user agents
539 540 541 542 543 |
# File 'lib/faker/default/internet.rb', line 539 def bot_user_agent(vendor: nil) agent_hash = translate('faker.internet.bot_user_agent') agents = vendor.respond_to?(:to_sym) && agent_hash[vendor.to_sym] || agent_hash[sample(agent_hash.keys)] sample(agents) end |
.device_token ⇒ Object
Generates random token
502 503 504 |
# File 'lib/faker/default/internet.rb', line 502 def device_token shuffle(rand(16**64).to_s(16).rjust(64, '0').chars.to_a).join end |
.domain_name(legacy_subdomain = NOT_GIVEN, subdomain: false, domain: nil) ⇒ String
Returns the domain name
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 |
# File 'lib/faker/default/internet.rb', line 224 def domain_name(legacy_subdomain = NOT_GIVEN, subdomain: false, domain: nil) warn_for_deprecated_arguments do |keywords| keywords << :subdomain if legacy_subdomain != NOT_GIVEN end with_locale(:en) do if domain domain .split('.') .map { |domain_part| Char.prepare(domain_part) } .tap do |domain_elements| domain_elements << domain_suffix if domain_elements.length < 2 domain_elements.unshift(Char.prepare(domain_word)) if subdomain && domain_elements.length < 3 end.join('.') else [domain_word, domain_suffix].tap do |domain_elements| domain_elements.unshift(Char.prepare(domain_word)) if subdomain end.join('.') end end end |
.domain_suffix ⇒ String
Returns the domain suffix e.g. com, org, co, biz, info etc.
283 284 285 |
# File 'lib/faker/default/internet.rb', line 283 def domain_suffix fetch('internet.domain_suffix') end |
.domain_word ⇒ String
Returns the domain word for internet
272 273 274 |
# File 'lib/faker/default/internet.rb', line 272 def domain_word with_locale(:en) { Char.prepare(Company.name.split.first) } end |
.email(legacy_name = NOT_GIVEN, legacy_separators = NOT_GIVEN, name: nil, separators: nil, domain: nil) ⇒ String
Returns the email address
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/faker/default/internet.rb', line 32 def email(legacy_name = NOT_GIVEN, legacy_separators = NOT_GIVEN, name: nil, separators: nil, domain: nil) warn_for_deprecated_arguments do |keywords| keywords << :name if legacy_name != NOT_GIVEN keywords << :separators if legacy_separators != NOT_GIVEN end local_part = if separators username(specifier: name, separators: separators) else username(specifier: name) end sanitized_local_part = sanitize_email_local_part(local_part) construct_email(sanitized_local_part, domain_name(domain: domain)) end |
.fix_umlauts(legacy_string = NOT_GIVEN, string: '') ⇒ String
Fixes ä, ö, ü, ß characters in string passed with ae, oe, ue, ss resp.
257 258 259 260 261 262 263 |
# File 'lib/faker/default/internet.rb', line 257 def fix_umlauts(legacy_string = NOT_GIVEN, string: '') warn_for_deprecated_arguments do |keywords| keywords << :string if legacy_string != NOT_GIVEN end Char.fix_umlauts(string) end |
.free_email(legacy_name = NOT_GIVEN, name: nil) ⇒ String
Returns the email address with domain either gmail.com, yahoo.com or hotmail.com
58 59 60 61 62 63 64 65 66 67 |
# File 'lib/faker/default/internet.rb', line 58 def free_email(legacy_name = NOT_GIVEN, name: nil) warn_for_deprecated_arguments do |keywords| keywords << :name if legacy_name != NOT_GIVEN end construct_email( sanitize_email_local_part(username(specifier: name)), fetch('internet.free_email') ) end |
.ip_v4_address ⇒ String
Returns the IPv4 address
314 315 316 317 |
# File 'lib/faker/default/internet.rb', line 314 def ip_v4_address [rand_in_range(0, 255), rand_in_range(0, 255), rand_in_range(0, 255), rand_in_range(0, 255)].join('.') end |
.ip_v4_cidr ⇒ String
Returns Ipv4 address with CIDR, range from 1 to 31
417 418 419 |
# File 'lib/faker/default/internet.rb', line 417 def ip_v4_cidr "#{ip_v4_address}/#{rand(1..31)}" end |
.ip_v6_address ⇒ String
Returns Ipv6 address
428 429 430 |
# File 'lib/faker/default/internet.rb', line 428 def ip_v6_address (1..8).map { rand(65_536).to_s(16) }.join(':') end |
.ip_v6_cidr ⇒ String
Returns Ipv6 address with CIDR, range between 1 to 127
439 440 441 |
# File 'lib/faker/default/internet.rb', line 439 def ip_v6_cidr "#{ip_v6_address}/#{rand(1..127)}" end |
.mac_address(legacy_prefix = NOT_GIVEN, prefix: '') ⇒ String
Returns the MAC address
297 298 299 300 301 302 303 304 305 |
# File 'lib/faker/default/internet.rb', line 297 def mac_address(legacy_prefix = NOT_GIVEN, prefix: '') warn_for_deprecated_arguments do |keywords| keywords << :prefix if legacy_prefix != NOT_GIVEN end prefix_digits = prefix.split(':').map { |d| d.to_i(16) } address_digits = Array.new((6 - prefix_digits.size)) { rand(256) } (prefix_digits + address_digits).map { |d| format('%02x', d) }.join(':') end |
.password(legacy_min_length = NOT_GIVEN, legacy_max_length = NOT_GIVEN, legacy_mix_case = NOT_GIVEN, legacy_special_characters = NOT_GIVEN, min_length: 8, max_length: 16, mix_case: true, special_characters: false) ⇒ String
Produces a randomized string of characters suitable for passwords
169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/faker/default/internet.rb', line 169 def password(legacy_min_length = NOT_GIVEN, legacy_max_length = NOT_GIVEN, legacy_mix_case = NOT_GIVEN, legacy_special_characters = NOT_GIVEN, min_length: 8, max_length: 16, mix_case: true, special_characters: false) warn_for_deprecated_arguments do |keywords| keywords << :min_length if legacy_min_length != NOT_GIVEN keywords << :max_length if legacy_max_length != NOT_GIVEN keywords << :mix_case if legacy_mix_case != NOT_GIVEN keywords << :special_characters if legacy_special_characters != NOT_GIVEN end raise ArgumentError, 'Password of length 1 can not have both mixed case and special characters' if min_length <= 1 && mix_case && special_characters min_alpha = mix_case && min_length > 1 ? 2 : 0 temp = Lorem.characters(number: min_length, min_alpha: min_alpha) diff_length = max_length - min_length if diff_length.positive? diff_rand = rand(diff_length + 1) temp += Lorem.characters(number: diff_rand) end if mix_case alpha_count = 0 temp.chars.each_with_index do |char, index| if char =~ /[[:alpha:]]/ temp[index] = char.upcase if alpha_count.even? alpha_count += 1 end end end if special_characters chars = %w[! @ # $ % ^ & *] rand(1..min_length).times do |i| temp[i] = chars[rand(chars.length)] end end temp[rand(temp.size - 1)] = Lorem.characters(number: 1, min_alpha: 1).upcase if mix_case && special_characters && !temp.match(/[A-z]+/) temp end |
.private_ip_v4_address ⇒ String
Returns the private IPv4 address
326 327 328 |
# File 'lib/faker/default/internet.rb', line 326 def private_ip_v4_address sample(PRIVATE_IPV4_ADDRESS_RANGES).map { |range| rand(range) }.join('.') end |
.private_net_checker ⇒ Lambda
Returns lambda to check if address passed is private or not
374 375 376 |
# File 'lib/faker/default/internet.rb', line 374 def private_net_checker ->(addr) { private_nets_regex.any? { |net| net =~ addr } } end |
.private_nets_regex ⇒ Array
Returns the private network regular expressions
353 354 355 356 357 358 359 360 361 362 363 364 |
# File 'lib/faker/default/internet.rb', line 353 def private_nets_regex [ /^10\./, # 10.0.0.0 - 10.255.255.255 /^100\.(6[4-9]|[7-9]\d|1[0-1]\d|12[0-7])\./, # 100.64.0.0 - 100.127.255.255 /^127\./, # 127.0.0.0 - 127.255.255.255 /^169\.254\./, # 169.254.0.0 - 169.254.255.255 /^172\.(1[6-9]|2\d|3[0-1])\./, # 172.16.0.0 - 172.31.255.255 /^192\.0\.0\./, # 192.0.0.0 - 192.0.0.255 /^192\.168\./, # 192.168.0.0 - 192.168.255.255 /^198\.(1[8-9])\./ # 198.18.0.0 - 198.19.255.255 ] end |
.public_ip_v4_address ⇒ String
Returns the public IPv4 address
337 338 339 340 341 342 343 344 |
# File 'lib/faker/default/internet.rb', line 337 def public_ip_v4_address addr = nil loop do addr = ip_v4_address break unless reserved_net_checker[addr] end addr end |
.reserved_net_checker ⇒ Lambda
Returns lambda function to check address passed is reserved or not
405 406 407 |
# File 'lib/faker/default/internet.rb', line 405 def reserved_net_checker ->(addr) { (private_nets_regex + reserved_nets_regex).any? { |net| net =~ addr } } end |
.reserved_nets_regex ⇒ Array
Returns the reserved network regular expressions
385 386 387 388 389 390 391 392 393 394 395 |
# File 'lib/faker/default/internet.rb', line 385 def reserved_nets_regex [ /^0\./, # 0.0.0.0 - 0.255.255.255 /^192\.0\.2\./, # 192.0.2.0 - 192.0.2.255 /^192\.88\.99\./, # 192.88.99.0 - 192.88.99.255 /^198\.51\.100\./, # 198.51.100.0 - 198.51.100.255 /^203\.0\.113\./, # 203.0.113.0 - 203.0.113.255 /^(22[4-9]|23\d)\./, # 224.0.0.0 - 239.255.255.255 /^(24\d|25[0-5])\./ # 240.0.0.0 - 255.255.255.254 and 255.255.255.255 ] end |
.safe_email(legacy_name = NOT_GIVEN, name: nil) ⇒ String
Returns the email address with fixed domain name as 'example'
79 80 81 82 83 84 85 86 87 88 |
# File 'lib/faker/default/internet.rb', line 79 def safe_email(legacy_name = NOT_GIVEN, name: nil) warn_for_deprecated_arguments do |keywords| keywords << :name if legacy_name != NOT_GIVEN end construct_email( sanitize_email_local_part(username(specifier: name)), "example.#{sample(%w[org com net])}" ) end |
.slug(legacy_words = NOT_GIVEN, legacy_glue = NOT_GIVEN, words: nil, glue: nil) ⇒ String
Returns unique string in URL
483 484 485 486 487 488 489 490 491 492 493 |
# File 'lib/faker/default/internet.rb', line 483 def slug(legacy_words = NOT_GIVEN, legacy_glue = NOT_GIVEN, words: nil, glue: nil) warn_for_deprecated_arguments do |keywords| keywords << :words if legacy_words != NOT_GIVEN keywords << :glue if legacy_glue != NOT_GIVEN end glue ||= sample(%w[- _]) return words.delete(',.').gsub(' ', glue).downcase unless words.nil? sample(translate('faker.internet.slug'), 2).join(glue) end |
.url(legacy_host = NOT_GIVEN, legacy_path = NOT_GIVEN, legacy_scheme = NOT_GIVEN, host: domain_name, path: "/#{username}", scheme: 'http') ⇒ String
Returns URL
459 460 461 462 463 464 465 466 467 |
# File 'lib/faker/default/internet.rb', line 459 def url(legacy_host = NOT_GIVEN, legacy_path = NOT_GIVEN, legacy_scheme = NOT_GIVEN, host: domain_name, path: "/#{username}", scheme: 'http') warn_for_deprecated_arguments do |keywords| keywords << :host if legacy_host != NOT_GIVEN keywords << :path if legacy_path != NOT_GIVEN keywords << :scheme if legacy_scheme != NOT_GIVEN end "#{scheme}://#{host}#{path}" end |
.user(*args) ⇒ hash
Produces a randomized hash of internet user details
600 601 602 603 604 605 |
# File 'lib/faker/default/internet.rb', line 600 def user(*args) user_hash = {} args = %w[username email] if args.empty? args.each { |arg| user_hash[:"#{arg}"] = send(arg) } user_hash end |
.user_agent(legacy_vendor = NOT_GIVEN, vendor: nil) ⇒ String
Generates the random browser identifier
518 519 520 521 522 523 524 525 526 |
# File 'lib/faker/default/internet.rb', line 518 def user_agent(legacy_vendor = NOT_GIVEN, vendor: nil) warn_for_deprecated_arguments do |keywords| keywords << :vendor if legacy_vendor != NOT_GIVEN end agent_hash = translate('faker.internet.user_agent') agents = vendor.respond_to?(:to_sym) && agent_hash[vendor.to_sym] || agent_hash[sample(agent_hash.keys)] sample(agents) end |
.username(legacy_specifier = NOT_GIVEN, legacy_separators = NOT_GIVEN, specifier: nil, separators: %w[. _]) ⇒ String Also known as: user_name
Returns the username
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/faker/default/internet.rb', line 103 def username(legacy_specifier = NOT_GIVEN, legacy_separators = NOT_GIVEN, specifier: nil, separators: %w[. _]) warn_for_deprecated_arguments do |keywords| keywords << :specifier if legacy_specifier != NOT_GIVEN keywords << :separators if legacy_separators != NOT_GIVEN end with_locale(:en) do return shuffle(specifier.scan(/[[:word:]]+/)).join(sample(separators)).downcase if specifier.respond_to?(:scan) case specifier when Integer # If specifier is Integer and has large value, Argument error exception is raised to overcome memory full error raise ArgumentError, 'Given argument is too large' if specifier > 10**6 tries = 0 # Don't try forever in case we get something like 1_000_000. result = nil loop do result = username(specifier: nil, separators: separators) tries += 1 break unless result.length < specifier && tries < 7 end return result * (specifier / result.length + 1) if specifier.positive? when Range tries = 0 result = nil loop do result = username(specifier: specifier.min, separators: separators) tries += 1 break unless !specifier.include?(result.length) && tries < 7 end return result[0...specifier.max] end sample([ Char.prepare(Name.first_name), [Name.first_name, Name.last_name].map do |name| Char.prepare(name) end.join(sample(separators)) ]) end end |
.uuid ⇒ String
Generated universally unique identifier
552 553 554 555 556 557 558 |
# File 'lib/faker/default/internet.rb', line 552 def uuid # borrowed from: https://github.com/ruby/ruby/blob/d48783bb0236db505fe1205d1d9822309de53a36/lib/securerandom.rb#L250 ary = Faker::Config.random.bytes(16).unpack('NnnnnN') ary[2] = (ary[2] & 0x0fff) | 0x4000 ary[3] = (ary[3] & 0x3fff) | 0x8000 '%08x-%04x-%04x-%04x-%04x%08x' % ary # rubocop:disable Style/FormatString end |