File Coverage

lib/App/Followme/CreateSitemap.pm
Criterion Covered Total %
statement 39 39 100.0
branch n/a
condition n/a
subroutine 10 10 100.0
pod 1 3 33.3
total 50 52 96.1


line stmt bran cond sub pod time code
1             package App::Followme::CreateSitemap;
2              
3 2     2   624 use 5.008005;
  2         14  
4 2     2   14 use strict;
  2         3  
  2         43  
5 2     2   10 use warnings;
  2         3  
  2         85  
6              
7 2     2   13 use lib '../..';
  2         3  
  2         11  
8              
9 2     2   282 use base qw(App::Followme::Module);
  2         3  
  2         603  
10              
11 2     2   16 use File::Spec::Functions qw(catfile);
  2         3  
  2         100  
12 2     2   13 use App::Followme::FIO;
  2         5  
  2         836  
13              
14             our $VERSION = "2.01";
15              
16             #----------------------------------------------------------------------
17             # Read the default parameter values
18              
19             sub parameters {
20 16     16 1 30 my ($pkg) = @_;
21              
22             return (
23 16         51 sitemap => 'sitemap.txt',
24             include_index => 1,
25             data_pkg => 'App::Followme::WebData',
26             );
27             }
28              
29             #----------------------------------------------------------------------
30             # Write a list of urls in a directory tree
31              
32             sub run {
33 3     3 0 6 my ($self, $folder) = @_;
34              
35 3         7 my @urls = $self->list_urls($folder);
36 3         15 my $page = join("\n", @urls) . "\n";
37              
38 3         26 my $filename = catfile($folder, $self->{sitemap});
39 3         13 fio_write_page($filename, $page);
40              
41 3         47 return;
42             }
43              
44             #----------------------------------------------------------------------
45             # Return a list of the urls of all web pages in a directory
46              
47             sub list_urls {
48 7     7 0 25 my ($self, $folder) = @_;
49              
50 7         12 my @urls;
51 7         26 my $index_file = $self->to_file($folder);
52 7         31 my $files = $self->{data}->build('files_by_name', $index_file);
53              
54 7         14 foreach my $file (@$files) {
55             # build returns a reference, so must dereference
56 21         61 my $url = $self->{data}->build('remote_url', $file);
57 21         50 push(@urls, $$url);
58             }
59              
60 7         22 my $folders = $self->{data}->build('folders', $index_file);
61              
62 7         15 foreach my $subfolder (@$folders) {
63 3         12 push(@urls, $self->list_urls($subfolder));
64             }
65              
66 7         31 return @urls;
67             }
68              
69             1;
70             __END__
71              
72             =encoding utf-8
73              
74             =head1 NAME
75              
76             App::Followme::CreateSitemap - Create a Google sitemap
77              
78             =head1 SYNOPSIS
79              
80             use App::Followme::Sitemap;
81             my $map = App::Followme::Sitemap->new();
82             $map->run($folder);
83              
84             =head1 DESCRIPTION
85              
86             This module creates a sitemap file, which is a text file containing the url of
87             every page on the site, one per line. It is also intended as a simple example of
88             how to write a module that can be run by followme.
89              
90             =head1 CONFIGURATION
91              
92             The following field in the configuration file are used:
93              
94             =over 4
95              
96             =item sitemap
97              
98             The name of the sitemap file. It is written to the directory this module is
99             invoked from. Typically this is the top folder of a site. The default value is
100             sitemap.txt.
101              
102             =item data_pkg
103              
104             The package used to retrieve information from each file contained in the
105             sitemap. The default value is 'App::Followme::WebData'.
106              
107             =back
108              
109             =head1 LICENSE
110              
111             Copyright (C) Bernie Simon.
112              
113             This library is free software; you can redistribute it and/or modify
114             it under the same terms as Perl itself.
115              
116             =head1 AUTHOR
117              
118             Bernie Simon E<lt>bernie.simon@gmail.comE<gt>
119              
120             =cut