NAME
    Catalyst::View::XML::Feed - Catalyst view for RSS, Atom, or other XML
    feeds

SYNOPSIS
    Create your view, e.g. lib/MyApp/View/Feed.pm

      package MyApp::View::Feed;
      use base qw( Catalyst::View::XML::Feed );
      1;

    In a controller, set the "feed" stash variable and forward to your view:

      sub rss : Local {
          my ($self, $c) = @_:
          $c->stash->{feed} = $feed_obj_or_data;
          $c->forward('View::Feed');
      }

DESCRIPTION
    Catalyst::View::XML::Feed is a hassle-free way to serve an RSS, Atom, or
    other XML feed from your Catalyst application.

    Your controller should put feed data into "$c->stash->{feed}".

DATA FORMATS
    The value in "$c->stash->{feed}" can be an object from any of the
    popular RSS or Atom classes, a plain Perl data structure, arbitrary
    custom objects, or an xml string.

  Plain Perl data
      $c->stash->{feed} = {
          format      => 'RSS 1.0',
          id          => $c->req->base,
          title       => 'My Great Site',
          description => 'Kitten pictures for the masses',
          link        => $c->req->base,
          modified    => DateTime->now,

          entries => [
              {
                  id       => $c->uri_for('rss', 'kitten_post')->as_string,
                  link     => $c->uri_for('rss', 'kitten_post')->as_string,
                  title    => 'First post!',
                  modified => DateTime->now,
                  content  => 'This is my first post!',
              },
              # ... more entries.
          ],
      };

   Keys for feed
    The "feed" hash can take any of the following keys. They are identical
    to those supported by XML::Feed. See XML::Feed for more details.

    *Note*: Depending on the feed format you choose, different subsets of
    attributes might be required. As such, it is recommended that you run
    the generated XML through a validator such as
    <http://validator.w3.org/feed/> to ensure you included all necessary
    information.

    format
        Can be any of: "Atom", "RSS 0.91", "RSS 1.0", "RSS 2.0"

    id
    title
    link
    description
    modified
        This should be a DateTime object.

    base
    tagline
    author
    language
    copyright
    generator
    self_link
    entries
        An array ref of entries.

   Keys for entries
    The "entries" array contains any number of hashrefs, each representing
    an entry in the feed. Each can contain any of the following keys. They
    are identical to those of XML::Feed::Entry. See XML::Feed::Entry for
    details.

    *Note*: Depending on the feed format you choose, different subsets of
    attributes might be required. As such, it is recommended that you run
    the generated XML through a validator such as
    <http://validator.w3.org/feed/> to ensure you included all necessary
    information.

    id
    title
    content
    link
    modified
        This should be a DateTime object.

    issued
        This should be a DateTime object.

    base
    summary
    category
    tags
    author

  Arbitrary custom objects
    If you have custom objects that you would like to turn into feed
    entries, this can be done similar to plain Perl data structures.

    For example, if we have a "DB::BlogPost" DBIx::Class model, we can do
    the following:

      $c->stash->{feed} = {
          format      => 'Atom',
          id          => $c->req->base,
          title       => 'My Great Site',
          description => 'Kitten pictures for the masses',
          link        => $c->req->base,
          modified    => DateTime->now,

          entries => [ $c->model('DB::BlogPost')->all() ],
      };

    The view will go through the keys for entries fields and, if possible,
    call a method of the same name on your entry object (e.g.
    "$your_entry->title(); $your_entry->modified();") to get that value for
    the XML.

    Any missing fields are simply skipped.

    If your class's method names do not match up to the "entries" keys, you
    can simply alias them by wrapping with another method. For example, if
    your "DB::BlogPost" has a "post_title" field which should be the title
    for the feed entry, you can add this to BlogPost.pm:

      sub title { $_[0]->post_title }

  XML::Feed
    An XML::Feed object.

      $c->stash->{feed} = $xml_feed_obj;

  XML::RSS
    An XML::RSS object.

      $c->stash->{feed} = $xml_rss_obj;

  XML::Atom::SimpleFeed
    An XML::Atom::SimpleFeed object.

      $c->stash->{feed} = $xml_atom_simplefeed_obj;

  XML::Atom::Feed
    An XML::Atom::Feed object.

      $c->stash->{feed} = $xml_atom_feed_obj;

  XML::Atom::Syndication::Feed
    An XML::Atom::Syndication::Feed object.

      $c->stash->{feed} = $xml_atom_syndication_feed_obj;

  Plain text
    If none of the formats mentioned above are suitable, you may also
    provide a string containing the XML data.

      $c->stash->{feed} = $xml_string;

SOURCE REPOSITORY
    <http://github.com/mstratman/Catalyst-View-XML-Feed>

AUTHOR
    Mark A. Stratman <stratman@gmail.com>

COPYRIGHT & LICENSE
    Copyright 2011 the above author(s).

    This sofware is free software, and is licensed under the same terms as
    perl itself.

