File Coverage

blib/lib/Data/Fake/Internet.pm
Criterion Covered Total %
statement 32 32 100.0
branch n/a
condition n/a
subroutine 13 13 100.0
pod 3 3 100.0
total 48 48 100.0


line stmt bran cond sub pod time code
1 2     2   68777 use 5.008001;
  2         16  
2 2     2   12 use strict;
  2         4  
  2         60  
3 2     2   10 use warnings;
  2         4  
  2         130  
4              
5             package Data::Fake::Internet;
6             # ABSTRACT: Fake Internet-related data generators
7              
8             our $VERSION = '0.005';
9              
10 2     2   14 use Exporter 5.57 qw/import/;
  2         28  
  2         112  
11              
12             our @EXPORT = qw(
13             fake_tld
14             fake_domain
15             fake_email
16             );
17              
18 2     2   430 use Data::Fake::Text ();
  2         5  
  2         39  
19 2     2   482 use Data::Fake::Names ();
  2         5  
  2         818  
20              
21             my ( @domain_suffixes, $domain_suffix_count );
22              
23 18     18   124 sub _domain_suffix { return $domain_suffixes[ int( rand($domain_suffix_count) ) ] }
24              
25             #pod =func fake_tld
26             #pod
27             #pod $generator = fake_tld();
28             #pod
29             #pod Returns a generator that randomly selects from a weighted list of about 50
30             #pod domain suffixes based on a list of the top 500 domains by inbound
31             #pod root-domain links.
32             #pod
33             #pod =cut
34              
35             sub fake_tld {
36 6     6 1 16 return sub { _domain_suffix };
  6     6   3056  
37             }
38              
39             #pod =func fake_domain
40             #pod
41             #pod $generator = fake_domain();
42             #pod
43             #pod Returns a generator that concatenates two random words with a random
44             #pod domain suffix.
45             #pod
46             #pod =cut
47              
48             sub fake_domain {
49 12     12 1 7834 my $prefix_gen = Data::Fake::Text::fake_words(2);
50             return sub {
51 12     12   22 my $prefix = $prefix_gen->();
52 12         1251 $prefix =~ s/\s//g;
53 12         28 join( ".", $prefix, _domain_suffix );
54 12         44 };
55             }
56              
57             #pod =func fake_email
58             #pod
59             #pod $generator = fake_email();
60             #pod
61             #pod Returns a generator that constructs an email from a random name and a
62             #pod random domain.
63             #pod
64             #pod =cut
65              
66             sub fake_email {
67 6     6 1 7716 my $fn = Data::Fake::Names::fake_first_name;
68 6         15 my $ln = Data::Fake::Names::fake_surname;
69 6         13 my $dn = fake_domain;
70             return sub {
71 6     6   17 return sprintf( "%s.%s@%s", map { lc } map { $_->() } $fn, $ln, $dn );
  18         59  
  18         29  
72 6         22 };
73             }
74              
75             # list and frequencey of most common domains suffixes taken from moz.org
76             # list of top 500 domains by inbound root domain links
77              
78             my @domain_suffix_freqs = qw(
79             com 295
80             org 29
81             edu 27
82             gov 25
83             net 15
84             co.uk 12
85             ru 9
86             jp 7
87             ne.jp 7
88             de 6
89             co.jp 5
90             fr 4
91             gov.au 3
92             io 3
93             com.cn 3
94             it 3
95             cn 3
96             cz 3
97             gov.cn 2
98             me 2
99             ca 2
100             com.br 2
101             co 2
102             us 2
103             com.au 2
104             pl 2
105             uk 2
106             ac.uk 2
107             info 1
108             gl 1
109             tx.us 1
110             la 1
111             com.hk 1
112             gd 1
113             vu 1
114             eu 1
115             es 1
116             int 1
117             tv 1
118             or.jp 1
119             mil 1
120             cc 1
121             ch 1
122             ly 1
123             org.au 1
124             net.au 1
125             fm 1
126             be 1
127             nl 1
128             );
129              
130             for my $i ( 0 .. @domain_suffix_freqs / 2 - 1 ) {
131             my ( $s, $n ) =
132             ( $domain_suffix_freqs[ 2 * $i ], $domain_suffix_freqs[ 2 * $i + 1 ] );
133             push @domain_suffixes, ($s) x $n;
134             }
135              
136             $domain_suffix_count = @domain_suffixes;
137              
138             1;
139              
140              
141             # vim: ts=4 sts=4 sw=4 et tw=75:
142              
143             __END__