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(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(name: nil, separators: nil, domain: nil) ⇒ String
Returns the email address.
-
.fix_umlauts(string: '') ⇒ String
Fixes ä, ö, ü, ß characters in string passed with ae, oe, ue, ss resp.
-
.free_email(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(prefix: '') ⇒ String
Returns the MAC address.
-
.password(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(name: nil) ⇒ String
Returns the email address with fixed domain name as ‘example’.
-
.slug(words: nil, glue: nil) ⇒ String
Returns unique string in URL.
-
.url(host: domain_name, path: "/#{username}", scheme: 'http') ⇒ String
Returns URL.
-
.user(*args) ⇒ hash
Produces a randomized hash of internet user details.
-
.user_agent(vendor: nil) ⇒ String
Generates the random browser identifier.
-
.username(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)
530 531 532 533 534 535 536 537 538 539 540 |
# File 'lib/faker/default/internet.rb', line 530 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
492 493 494 495 496 |
# File 'lib/faker/default/internet.rb', line 492 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
459 460 461 |
# File 'lib/faker/default/internet.rb', line 459 def device_token shuffle(rand(16**64).to_s(16).rjust(64, '0').chars.to_a).join end |
.domain_name(subdomain: false, domain: nil) ⇒ String
Returns the domain name
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 |
# File 'lib/faker/default/internet.rb', line 207 def domain_name(subdomain: false, domain: nil) 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.
258 259 260 |
# File 'lib/faker/default/internet.rb', line 258 def domain_suffix fetch('internet.domain_suffix') end |
.domain_word ⇒ String
Returns the domain word for internet
247 248 249 |
# File 'lib/faker/default/internet.rb', line 247 def domain_word with_locale(:en) { Char.prepare(Company.name.split.first) } end |
.email(name: nil, separators: nil, domain: nil) ⇒ String
Returns the email address
32 33 34 35 36 37 38 39 40 41 |
# File 'lib/faker/default/internet.rb', line 32 def email(name: nil, separators: nil, domain: nil) 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(string: '') ⇒ String
Fixes ä, ö, ü, ß characters in string passed with ae, oe, ue, ss resp.
236 237 238 |
# File 'lib/faker/default/internet.rb', line 236 def fix_umlauts(string: '') Char.fix_umlauts(string) end |
.free_email(name: nil) ⇒ String
Returns the email address with domain either gmail.com, yahoo.com or hotmail.com
53 54 55 56 57 58 |
# File 'lib/faker/default/internet.rb', line 53 def free_email(name: nil) construct_email( sanitize_email_local_part(username(specifier: name)), fetch('internet.free_email') ) end |
.ip_v4_address ⇒ String
Returns the IPv4 address
285 286 287 288 |
# File 'lib/faker/default/internet.rb', line 285 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
388 389 390 |
# File 'lib/faker/default/internet.rb', line 388 def ip_v4_cidr "#{ip_v4_address}/#{rand(1..31)}" end |
.ip_v6_address ⇒ String
Returns Ipv6 address
399 400 401 |
# File 'lib/faker/default/internet.rb', line 399 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
410 411 412 |
# File 'lib/faker/default/internet.rb', line 410 def ip_v6_cidr "#{ip_v6_address}/#{rand(1..127)}" end |
.mac_address(prefix: '') ⇒ String
Returns the MAC address
272 273 274 275 276 |
# File 'lib/faker/default/internet.rb', line 272 def mac_address(prefix: '') 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(min_length: 8, max_length: 16, mix_case: true, special_characters: false) ⇒ String
Produces a randomized string of characters suitable for passwords
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
# File 'lib/faker/default/internet.rb', line 149 def password(min_length: 8, max_length: 16, mix_case: true, special_characters: false) raise ArgumentError, 'max_length must be more than min_length' if max_length < min_length character_types = [] required_min_length = 0 if mix_case character_types << :mix_case required_min_length += 2 end if special_characters character_types << :special_characters required_min_length += 1 end raise ArgumentError, "min_length should be at least #{required_min_length} to enable #{character_types.join(', ')} configuration" if min_length < required_min_length target_length = rand(min_length..max_length) password = [] character_bag = [] # use lower_chars by default and add upper_chars if mix_case lower_chars = ('a'..'z').to_a password << lower_chars[rand(lower_chars.count - 1)] character_bag += lower_chars if character_types.include?(:mix_case) upper_chars = ('A'..'Z').to_a password << upper_chars[rand(upper_chars.count - 1)] character_bag += upper_chars end if character_types.include?(:special_characters) special_chars = %w[! @ # $ % ^ & *] password << special_chars[rand(special_chars.count - 1)] character_bag += special_chars end password << character_bag[rand(character_bag.count - 1)] while password.length < target_length shuffle(password).join end |
.private_ip_v4_address ⇒ String
Returns the private IPv4 address
297 298 299 |
# File 'lib/faker/default/internet.rb', line 297 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
345 346 347 |
# File 'lib/faker/default/internet.rb', line 345 def private_net_checker ->(addr) { private_nets_regex.any? { |net| net =~ addr } } end |
.private_nets_regex ⇒ Array
Returns the private network regular expressions
324 325 326 327 328 329 330 331 332 333 334 335 |
# File 'lib/faker/default/internet.rb', line 324 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
308 309 310 311 312 313 314 315 |
# File 'lib/faker/default/internet.rb', line 308 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
376 377 378 |
# File 'lib/faker/default/internet.rb', line 376 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
356 357 358 359 360 361 362 363 364 365 366 |
# File 'lib/faker/default/internet.rb', line 356 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(name: nil) ⇒ String
Returns the email address with fixed domain name as ‘example’
70 71 72 73 74 75 |
# File 'lib/faker/default/internet.rb', line 70 def safe_email(name: nil) construct_email( sanitize_email_local_part(username(specifier: name)), "example.#{sample(%w[org com net])}" ) end |
.slug(words: nil, glue: nil) ⇒ String
Returns unique string in URL
445 446 447 448 449 450 |
# File 'lib/faker/default/internet.rb', line 445 def slug(words: nil, glue: nil) glue ||= sample(%w[- _]) return words.delete(',.').gsub(' ', glue).downcase unless words.nil? sample(translate('faker.internet.slug'), 2).join(glue) end |
.url(host: domain_name, path: "/#{username}", scheme: 'http') ⇒ String
Returns URL
428 429 430 |
# File 'lib/faker/default/internet.rb', line 428 def url(host: domain_name, path: "/#{username}", scheme: 'http') "#{scheme}://#{host}#{path}" end |
.user(*args) ⇒ hash
Produces a randomized hash of internet user details
553 554 555 556 557 558 |
# File 'lib/faker/default/internet.rb', line 553 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(vendor: nil) ⇒ String
Generates the random browser identifier
475 476 477 478 479 |
# File 'lib/faker/default/internet.rb', line 475 def user_agent(vendor: nil) 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(specifier: nil, separators: %w[. _]) ⇒ String Also known as: user_name
Returns the username
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/faker/default/internet.rb', line 90 def username(specifier: nil, separators: %w[. _]) 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
505 506 507 508 509 510 511 |
# File 'lib/faker/default/internet.rb', line 505 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 |