__PACKAGE__->config(
namespace
=>
q{}
);
sub
_feed_link :Private {
return
$_
[1]->req->base; }
sub
_feed_base :Private {
return
$_
[1]->req->base; }
sub
_feed_title :Private {
return
'My awesome site'
; }
sub
_feed_tagline :Private {
return
'A great tagline'
; }
sub
_feed_description :Private {
return
'The greatest site ever'
; }
sub
_feed_author :Private {
return
'Mark A. Stratman'
; }
sub
_feed_language :Private {
return
'en-us'
; }
sub
_feed_copyright :Private {
return
'Copyright me 2011'
; }
sub
_feed_generator :Private {
return
'Catalyst::View::XML::Feed '
.
$Catalyst::View::XML::Feed::VERSION
; }
sub
_feed_id : Private {
return
_feed_link(
@_
); }
sub
_entry_title : Private {
return
'My first post'
}
sub
_entry_base : Private {
$_
[1]->uri_for(
'/'
,
'my_first_post'
); }
sub
_entry_link : Private {
$_
[1]->uri_for(
'/'
,
'my_first_post'
); }
sub
_entry_content : Private {
return
'It works! And even more stuff here'
}
sub
_entry_summary : Private {
return
'It wor...'
}
sub
_entry_category : Private {
return
'Junk'
}
sub
_entry_author : Private {
return
_feed_author(
@_
) }
sub
_entry_id : Private {
return
_entry_link(
@_
) }
sub
_now : Private {
return
DateTime->now }
sub
index
: Path {
my
(
$self
,
$ctx
) =
@_
;
$ctx
->res->body(
'<h1>It works</h1>'
);
}
sub
string : Local {
my
(
$self
,
$c
) =
@_
;
$c
->stash->{feed} =
q{<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
>
<channel>
<title>My awesome site</title>
<description>A great tagline</description>
<copyright>Copyright me 2011</copyright>
<pubDate>Wed, 23 Mar 2011 00:34:40 -0000</pubDate>
<webMaster>Mark A. Stratman</webMaster>
<generator>Catalyst::View::XML::Feed 0.01</generator>
<item>
<title>My first post</title>
<description>It wor...</description>
<author>Mark A. Stratman</author>
<category>Junk</category>
<pubDate>Wed, 23 Mar 2011 00:34:40 -0000</pubDate>
<content:encoded>It works! And even more stuff here</content:encoded>
<dcterms:modified>2011-03-23T00:34:40Z</dcterms:modified>
</item>
</channel>
</rss>}
;
$c
->forward(
'View::Feed'
);
}
sub
_xml_feed : Private {
my
(
$self
,
$c
,
@format
) =
@_
;
my
$feed
= XML::Feed->new(
@format
);
$feed
->id(
$self
->_feed_id(
$c
));
$feed
->title(
$self
->_feed_title(
$c
));
$feed
->description(
$self
->_feed_description(
$c
));
$feed
->
link
(
$self
->_feed_link(
$c
));
$feed
->modified(
$self
->_now(
$c
));
$feed
->base(
$self
->_feed_base(
$c
));
$feed
->tagline(
$self
->_feed_tagline(
$c
));
$feed
->author(
$self
->_feed_author(
$c
));
$feed
->copyright(
$self
->_feed_copyright(
$c
));
$feed
->generator(
$self
->_feed_generator(
$c
));
my
$entry
= XML::Feed::Entry->new();
$entry
->title(
$self
->_entry_title(
$c
));
$entry
->base(
$self
->_entry_base(
$c
));
$entry
->
link
(
$self
->_entry_link(
$c
));
$entry
->content(
$self
->_entry_content(
$c
));
$entry
->summary(
$self
->_entry_summary(
$c
));
$entry
->category(
$self
->_entry_category(
$c
));
$entry
->author(
$self
->_entry_author(
$c
));
$entry
->id(
$self
->_entry_id(
$c
));
$entry
->issued(
$self
->_now(
$c
));
$entry
->modified(
$self
->_now(
$c
));
$feed
->add_entry(
$entry
);
return
$feed
;
}
sub
xml_feed__atom : Local {
my
(
$self
,
$c
) =
@_
;
$c
->stash->{feed} =
$self
->_xml_feed(
$c
,
'Atom'
);
$c
->forward(
'View::Feed'
);
}
sub
xml_feed__rss : Local {
my
(
$self
,
$c
) =
@_
;
$c
->stash->{feed} =
$self
->_xml_feed(
$c
,
'RSS'
);
$c
->forward(
'View::Feed'
);
}
sub
xml_feed__rss09 : Local {
my
(
$self
,
$c
) =
@_
;
$c
->stash->{feed} =
$self
->_xml_feed(
$c
,
'RSS'
,
version
=>
'0.9'
);
$c
->forward(
'View::Feed'
);
}
sub
xml_feed__rss1 : Local {
my
(
$self
,
$c
) =
@_
;
$c
->stash->{feed} =
$self
->_xml_feed(
$c
,
'RSS'
,
version
=>
'1.0'
);
$c
->forward(
'View::Feed'
);
}
sub
xml_feed__rss2 : Local {
my
(
$self
,
$c
) =
@_
;
$c
->stash->{feed} =
$self
->_xml_feed(
$c
,
'RSS'
,
version
=>
'2.0'
);
$c
->forward(
'View::Feed'
);
}
sub
feed_obj_entries_arrayref_objs__rss : Local {
my
(
$self
,
$c
) =
@_
;
my
$feed
= MyFeed->new(
$self
->_my_feed_hash(
$c
));
my
$entry
= MyEntry->new(
$self
->_my_entry_hash(
$c
));
$feed
->entries([
$entry
]);
$c
->stash->{feed} =
$feed
;
$c
->forward(
'View::Feed'
);
}
sub
feed_obj_array_entries_array_objs__rss : Local {
my
(
$self
,
$c
) =
@_
;
my
$feed
= MyFeed->new(
$self
->_my_feed_hash(
$c
));
my
$entry
= MyEntry->new(
$self
->_my_entry_hash(
$c
));
$feed
->{_return_entries_array} = 1;
$feed
->entries([
$entry
]);
$c
->stash->{feed} =
$feed
;
$c
->forward(
'View::Feed'
);
}
sub
feed_hash_entries_objs__rss : Local {
my
(
$self
,
$c
) =
@_
;
my
$feed
=
$self
->_my_feed_hash(
$c
);
my
$entry
= MyEntry->new(
$self
->_my_entry_hash(
$c
));
$feed
->{entries} = [
$entry
];
$c
->stash->{feed} =
$feed
;
$c
->forward(
'View::Feed'
);
}
sub
feed_hash_entries_objs__atom : Local {
my
(
$self
,
$c
) =
@_
;
my
$feed
=
$self
->_my_feed_hash(
$c
);
my
$entry
= MyEntry->new(
$self
->_my_entry_hash(
$c
));
$feed
->{
format
} =
'Atom'
;
$feed
->{entries} = [
$entry
];
$c
->stash->{feed} =
$feed
;
$c
->forward(
'View::Feed'
);
}
sub
feed_hash_entries_hashes__rss : Local {
my
(
$self
,
$c
) =
@_
;
my
$feed
=
$self
->_my_feed_hash(
$c
);
$feed
->{entries} = [
$self
->_my_entry_hash(
$c
) ];
$c
->stash->{feed} =
$feed
;
$c
->forward(
'View::Feed'
);
}
sub
xml_rss : Local {
my
(
$self
,
$c
) =
@_
;
if
($@) {
return
$c
->res->body(
'XML::RSS not installed'
);
}
my
$rss
= XML::RSS->new(
version
=>
'1.0'
);
$rss
->channel(
title
=>
$self
->_feed_title(
$c
),
link
=>
$self
->_feed_link(
$c
),
description
=>
$self
->_feed_description(
$c
),
dc
=> {
date
=>
'2000-08-23T07:00+00:00'
,
subject
=>
"what is this"
,
creator
=>
$self
->_feed_author(
$c
),
publisher
=>
$self
->_feed_author(
$c
),
rights
=>
$self
->_feed_copyright(
$c
),
language
=>
$self
->_feed_language(
$c
),
},
);
$rss
->add_item(
title
=>
$self
->_entry_title(
$c
),
link
=>
$self
->_entry_link(
$c
),
description
=>
$self
->_entry_content(
$c
),
);
$c
->stash->{feed} =
$rss
;
$c
->forward(
'View::Feed'
);
}
sub
xml_atom_simplefeed : Local {
my
(
$self
,
$c
) =
@_
;
if
($@) {
return
$c
->res->body(
'XML::Atom::SimpleFeed not installed'
);
}
my
$feed
= XML::Atom::SimpleFeed->new(
title
=>
$self
->_feed_title(
$c
),
link
=>
$self
->_feed_link(
$c
),
updated
=>
'2003-12-13T18:30:02Z'
,
author
=>
$self
->_feed_author(
$c
),
id
=>
$self
->_feed_id(
$c
),
);
$feed
->add_entry(
title
=>
$self
->_entry_title(
$c
),
link
=>
$self
->_entry_link(
$c
),
id
=>
$self
->_entry_id(
$c
),
updated
=>
'2003-12-13T18:30:02Z'
,
summary
=>
$self
->_entry_summary(
$c
),
category
=>
$self
->_entry_category(
$c
),
content
=>
$self
->_entry_content(
$c
),
author
=>
$self
->_entry_author(
$c
),
);
$c
->stash->{feed} =
$feed
;
$c
->forward(
'View::Feed'
);
}
sub
xml_atom_feed : Local {
my
(
$self
,
$c
) =
@_
;
if
($@) {
return
$c
->res->body(
'XML::Atom::Feed not installed'
);
}
my
$feed
= XML::Atom::Feed->new();
$feed
->title(
$self
->_feed_title(
$c
));
$feed
->
link
(
$self
->_feed_link(
$c
));
$feed
->updated(
'2003-12-13T18:30:02Z'
);
$feed
->author(
$self
->_feed_author(
$c
));
$feed
->id(
$self
->_feed_id(
$c
));
my
$entry
= XML::Atom::Entry->new;
$entry
->title(
$self
->_entry_title(
$c
));
$entry
->
link
(
$self
->_entry_link(
$c
));
$entry
->id(
$self
->_entry_id(
$c
));
$entry
->updated(
'2003-12-13T18:30:02Z'
);
$entry
->summary(
$self
->_entry_summary(
$c
));
$entry
->content(
$self
->_entry_content(
$c
));
$entry
->author(
$self
->_entry_author(
$c
));
$feed
->add_entry(
$entry
);
$c
->stash->{feed} =
$feed
;
$c
->forward(
'View::Feed'
);
}
sub
_my_feed_hash : Private {
my
(
$self
,
$c
) =
@_
;
return
{
id
=>
$self
->_feed_id(
$c
),
title
=>
$self
->_feed_title(
$c
),
description
=>
$self
->_feed_description(
$c
),
link
=>
$self
->_feed_link(
$c
),
modified
=>
$self
->_now(
$c
),
base
=>
$self
->_feed_base(
$c
),
tagline
=>
$self
->_feed_tagline(
$c
),
author
=>
$self
->_feed_author(
$c
),
copyright
=>
$self
->_feed_copyright(
$c
),
generator
=>
$self
->_feed_generator(
$c
),
};
}
sub
_my_entry_hash : Private {
my
(
$self
,
$c
) =
@_
;
return
{
title
=>
$self
->_entry_title(
$c
),
link
=>
$self
->_entry_link(
$c
),
content
=>
$self
->_entry_content(
$c
),
summary
=>
$self
->_entry_summary(
$c
),
category
=>
$self
->_entry_category(
$c
),
author
=>
$self
->_entry_author(
$c
),
id
=>
$self
->_entry_id(
$c
),
issued
=>
$self
->_now(
$c
),
modified
=>
$self
->_now(
$c
),
};
}
__PACKAGE__->meta->make_immutable;