class Faker::Internet
def base64(length: 16, padding: false, urlsafe: true)
-
(String)
-
Parameters:
-
urlsafe
(Boolean
) -- Toggles charset to '-' and '_' instead of '+' and '/'. -
padding
(Boolean
) -- Toggles if a final equal '=' will be added. -
length
(Integer
) -- The length of the string to generate
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
def bot_user_agent(vendor: nil)
-
vendor
(String
) -- Name of vendor, supported vendors are googlebot, bingbot, duckduckbot, baiduspider, yandexbot
Returns:
-
(String)
-
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
def construct_email(local_part, domain_name)
def construct_email(local_part, domain_name) [local_part, domain_name].join('@') end
def device_token
@example
@return[String]
Generates random token
#
def device_token shuffle(rand(16**64).to_s(16).rjust(64, '0').chars.to_a).join end
def domain_name(subdomain: false, domain: nil)
-
domain
(String
) -- -
subdomain
(Bool
) -- If true passed adds a subdomain in response
Returns:
-
(String)
-
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| if domain_elements.length < 2 domain_elements << domain_suffix(safe: true) end if subdomain && domain_elements.length < 3 domain_elements.unshift(Char.prepare(domain_word)) end end.join('.') else [domain_word, domain_suffix(safe: true)].tap do |domain_elements| if subdomain domain_elements.unshift(Char.prepare(domain_word)) end end.join('.') end end end
def domain_suffix(safe: nil)
-
(String)
-
def domain_suffix(safe: nil) if safe fetch('internet.safe_domain_suffix') else fetch('internet.domain_suffix') end end
def domain_word
-
(String)
-
def domain_word with_locale(:en) { Char.prepare(Company.name.split.first) } end
def email(name: nil, separators: nil, domain: nil)
-
domain
(String
) -- -
separators
(Array
) -- -
name
(String
) --
Returns:
-
(String)
-
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) generate_domain = if domain.nil? domain_name else domain_name(domain: domain) end construct_email(sanitized_local_part, generate_domain) end
def fix_umlauts(string: '')
-
string
(String
) --
Returns:
-
(String)
-
def fix_umlauts(string: '') Char.fix_umlauts(string) end
def free_email(name: nil)
-
name
(String
) --
Returns:
-
(String)
-
def free_email(name: nil) construct_email( sanitize_email_local_part(username(specifier: name)), fetch('internet.free_email') ) end
def ip_v4_address
-
(String)
-
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
def ip_v4_cidr
-
(String)
-
def ip_v4_cidr "#{ip_v4_address}/#{rand(1..31)}" end
def ip_v6_address
-
(String)
-
def ip_v6_address (1..8).map { rand(65_536).to_s(16) }.join(':') end
def ip_v6_cidr
-
(String)
-
def ip_v6_cidr "#{ip_v6_address}/#{rand(1..127)}" end
def mac_address(prefix: '')
-
(String)
-
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
def password(min_length: 8, max_length: 16, mix_case: true, special_characters: false)
-
(String)
-
Parameters:
-
special_characters
(Boolean
) -- Toggles if special characters are allowed. If true, at least one will be added. -
mix_case
(Boolean
) -- Toggles if uppercased letters are allowed. If true, at least one will be added. -
max_length
(Integer
) -- The maximum length of the password -
min_length
(Integer
) -- The minimum length of the password
def password(min_length: 8, max_length: 16, mix_case: true, special_characters: false) raise ArgumentError, 'min_length and max_length must be greater than or equal to one' if min_length < 1 || max_length < 1 raise ArgumentError, 'min_length must be smaller than or equal to max_length' unless min_length <= max_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 = self::LLetters password << sample(lower_chars) character_bag += lower_chars digits = ('0'..'9').to_a password << sample(digits) character_bag += digits if mix_case upper_chars = self::ULetters password << sample(upper_chars) character_bag += upper_chars end if special_characters special_chars = %w[! @ # $ % ^ & *] password << sample(special_chars) character_bag += special_chars end password << sample(character_bag) while password.length < target_length shuffle(password).join end
def private_ip_v4_address
-
(String)
-
def private_ip_v4_address sample(PRIVATE_IPV4_ADDRESS_RANGES).map { |range| rand(range) }.join('.') end
def private_net_checker
-
(Lambda)
-
def private_net_checker ->(addr) { private_nets_regex.any? { |net| net =~ addr } } end
def private_nets_regex
-
(Array)
-
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
def public_ip_v4_address
-
(String)
-
def public_ip_v4_address addr = nil loop do addr = ip_v4_address break unless reserved_net_checker[addr] end addr end
def reserved_net_checker
-
(Lambda)
-
def reserved_net_checker ->(addr) { (private_nets_regex + reserved_nets_regex).any? { |net| net =~ addr } } end
def reserved_nets_regex
-
(Array)
-
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
def safe_email(name: nil)
-
name
(String
) --
Returns:
-
(String)
-
def safe_email(name: nil) construct_email( sanitize_email_local_part(username(specifier: name)), "example.#{sample(%w[org com net])}" ) end
def sanitize_email_local_part(local_part)
def sanitize_email_local_part(local_part) char_range = [ Array('0'..'9'), Array('A'..'Z'), Array('a'..'z'), "!#$%&'*+-/=?^_`{|}~.".chars ].flatten local_part.chars.map do |char| char_range.include?(char) ? char : '#' end.join end
def slug(words: nil, glue: nil)
-
glue
(String
) -- Separator to add between words passed, default used are '-' or '_' -
words
(String
) -- Comma or period separated words list
Returns:
-
(String)
-
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
def url(host: domain_name, path: "/#{username}", scheme: 'http')
-
scheme
(String
) -- -
path
(String
) -- -
host
(String
) --
Returns:
-
(String)
-
def url(host: domain_name, path: "/#{username}", scheme: 'http') "#{scheme}://#{host}#{path}" end
def user(*args)
-
(hash)
-
def user(*args) user_hash = {} args = %w[username email] if args.empty? args.each { |arg| user_hash[:"#{arg}"] = send(arg) } user_hash end
def user_agent(vendor: nil)
-
vendor
(String
) -- Name of vendor, supported vendors are aol, chrome, firefox, internet_explorer, netscape, opera, safari
Returns:
-
(String)
-
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
def username(specifier: nil, separators: %w[. _])
-
separators
(Array
) -- -
specifier
(Integer, Range, String
) -- When int value passed it returns the username longer than specifier. Max value can be 10^6
Returns:
-
(String)
-
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
def uuid
-
(String)
-
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