-
Notifications
You must be signed in to change notification settings - Fork 12
/
YAMLConfig.pm
128 lines (91 loc) · 2.61 KB
/
YAMLConfig.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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
126
127
128
package Perlanet::Trait::YAMLConfig;
use strict;
use warnings;
use Moose::Role;
use namespace::autoclean;
=head1 NAME
Perlanet::Trait::YAMLConfig - configure Perlanet through a YAML configuration
file
=head1 SYNOPSIS
package MyPerlanet;
extends 'Perlanet';
with 'Perlanet::Traits::YAMLConfig';
my $perlanet = MyPerlanet->new_with_config(
configfile => 'whatever.yml'
);
$perlanet->run;
=head1 DESCRIPTION
Allows you to move the configuration of Perlanet to an external YAML
configuration file.
=head2 Example Configuration File
title: planet test
description: A Test Planet
url: http://planet.example.com/
author:
name: Dave Cross
email: dave@dave.org.uk
entries: 20
opml: opml.xml
page:
file: index.html
template: index.tt
feed:
file: atom.xml
format: Atom
cache_dir: /tmp/feeds
feeds:
- url: http://blog.dave.org.uk/atom.xml
title: Dave's Blog
web: http://blog.dave.org.uk/
- url: http://use.perl.org/~davorg/journal/rss
title: Dave's use.perl Journal
web: http://use.perl.org/~davorg/journal/
- url: http://www.oreillynet.com/pub/feed/31?au=2607
title: Dave on O'Reillynet
web: http://www.oreillynet.com/pub/au/2607
=head1 METHODS
=head2 THIRTY_DAYS
The default length of caching, if caching options are present in the
configuration
=head2 get_config_from_file
Extracts the configuration from a YAML file
=cut
with 'MooseX::ConfigFromFile';
use Carp qw( carp croak );
use YAML qw( LoadFile );
use constant THIRTY_DAYS => 30 * 24 * 60 * 60;
sub get_config_from_file {
my ($self, $file) = @_;
open my $cfg_file, '<:encoding(UTF-8)', $file
or croak "Cannot open file $file: $!";
my $cfg = LoadFile($cfg_file);
$cfg->{feeds} = [ map {
Perlanet::Feed->new($_)
} @{ $cfg->{feeds} } ];
$cfg->{max_entries} = $cfg->{entries}
if $cfg->{entries};
if ($cfg->{cache_dir}) {
eval { require CHI; };
if ($@) {
carp "You need to install CHI to enable caching.\n";
carp "Caching disabled for this run.\n";
delete $cfg->{cache_dir};
}
}
$cfg->{cache_dir}
and $cfg->{cache} = CHI->new(
driver => 'File',
root_dir => delete $cfg->{cache_dir},
expires_in => THIRTY_DAYS,
);
return $cfg;
}
=head1 AUTHOR
Oliver Charles, <oliver.g.charles@googlemail.com>
=head1 COPYRIGHT AND LICENSE
Copyright (c) 2010 by Magnum Solutions Ltd.
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.10.0 or,
at your option, any later version of Perl 5 you may have available.
=cut
1;