The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Revision history for Perl module XML::RSS::Feed / XML::RSS::Headline

2.32     6/30/2008
        - add URI::Escape as a prereq. 

2.31     6/30/2008
        - update README from pod
        - remainder of perlcritic changes
            - init local var in slurp
                -  my $xml = do { local $/, <$fh> };
                +  my $xml = do { local $/ = undef, <$fh> };
            - implictly use decode_entities from HTML::Entities
                - use HTML::Entities;
                + use HTML::Entities qw(decode_entities);
            - use character classes and break up log compiled regexes into chunks

                -    my $stripit = qr/
                -        http\:\/\/
                -        go\.fark\.com\/
                -        cgi\/fark\/go\.pl\?
                -        IDLink\=\d+\&
                -        location\=
                -    /x;

                +    my $domain = qr{ http [:] [/] [/] go [.] fark [.] com }x;
                +    my $uri    = qr{ [/] cgi [/] fark [/] go [.] pl }x;
                +    my $args   = qr{ [?] IDLink [=] \d+ [&] location [=] }x;

2.3      6/26/2008
        - new constructor param "init_headlines_seen" so you can fetch a feed,
          mark everything as seen, then only get updates after the fact.
          Thanks to Carl Fürstenberg for suggesting.
        - Applied Aaron Krowne's patch for XML::RSS::Headline to use guid instead
          of the url if available.  Thanks Aaron!
            - wrote t/021_headline_guid.t for XML::RSS::Headline->guid
        - fix t/008_store_retrieve.t to check if not only is /tmp a dir but also if
          its writeable.  This fixes testing errors reported by Slaven Rezić.
        - Also no longer use LWP::Simple to try to call jbisbee.com/rsstest, just
          hard code the XML in the test because jbisbee.com no longer exists.
        - wrote tests for coverage of the 'init_headlines_seen' param.
        - make some of the logic a bit easier to read the first time through
        - Added Carp as a prerequsiste
        - fixed 013_legacy.t to skip if File::Temp isn't isntalled
        - perlcritic updates
            - use carp instead of warn for errors (not for debug)
            - moved all the pod to after __END__
            - three argument open
            - use constant DEFAULT_DELAY for the default delay between fetches (3600)
            - no shifting of @_, unpack all args at once (except for accessors)
            - return statments on each sub
            - changed any double quoted string that didn't need to be interpolated to
              a single quoted string.
        - migrated code from CVS to git.  added .gitignore file to repository

2.212    11/06/2006
	- fix META.yml generation by upgrading to ExtUtils::MakeMaker 6.31
        - add examples directory with an example (part deux)

2.211    11/05/2006
	- fix META.yml generation by upgrading to ExtUtils::MakeMaker 6.31
        - add examples directory with an example

2.21    11/01/2006
	- make cpants compatible with updated META.yml
        - fix broken tests pointing to old jbisbee.com/rsstest
2.2
        - ran code through perltidy
        - switched to perl best practices pod template

2.1
        - Added $self->{process_count} so that the first time we
          process a feed, we won't mark all headlines as read if
          this is the first time we processed the feed OR if we're 
          pulling up cached headlines.  (This fixes RT bug #12682)
          Thanks to James Armstrong for reporting it.
        - Also updated a bunch of tests so they passed because of this
          bug fix.

2.04
        - Just added a use Perl; journals sub class example
          XML::RSS::Headline::UsePerlJournals

2.03
        - Needed to use URI::Escape qw(uri_unescape) on 
          XML::RSS::Headline::Fark URLs.
        - fixed the t/019_fark.t test to match correctly decoded URL
        - simple change of use vars qw($VERSION); to our $VERSION in 
          XML::RSS::Headline::PerlJobs and XML::RSS::Headline::Fark

2.02
        - Fixed decode_entities to actually work (added tests to verify)
        - added XML::RSS::Headline::Fark subclass
        - added tests for XML::RSS::Headline::Fark subclass
        - fixed typos in the pod for XML::RSS::Headline::PerlJobs 
        - fixed pod formating of methods and attributes (C<> looked like crap 
          on search.cpan.org)
        - caught and tested warnings issued by 008_store_retrieve

2.01
        - Fixed the 011_test_pod and 012_test_pod_coverage tests to correctly 
          detect if the relative Test::Pod and Test::Pod::Coverage modules 
          are installed (Thanks to Randal Schwartz for taking the time to 
          shoot me an e-mail and pointing it out) :)

2.0
        - The biggest change in in the tests.  This distrobution is now at 
          100% coverage!  I found serveral major issues just by painstakingly 
          making sure that each bit was tested.  While I don't think that 
          100% is always nessesary, it just feels really good to see all o
          green 100%'s on that coverage report.
        - Added encode_utf8 before md5_base64 so watching uniqueness via 
          headline_as_id works with uft8 headlines (thanks hachi!)
        - You can now create XML::RSS::Headline objects with just a url 
          and description.
          It seems that you can have an RSS item without a title and the 
          title is build from a substr of the description.
        - added XML::RSS::Headline::PerlJobs example of subclassing 
          XML::RSS::Headline
        - Now if caching is turned on, it caches after every parse rather 
          than on DESTROY
        - now traps a bad 'store' attempt and issues a warn.  I had an if 
          statement and for got I needed to try/catch with eval when using 
          Storable.
        - now decodes HTML entities in XML::RSS::Headline
        - Lots of documentation updates and clarifications, and formatting 
          changes.

1.1
        - Change the description in the modules name
        - Added HTML::Entities decode on headlines (wonder why XML::RSS 
          doesn't do it)
        - cleaned up pod
        - Beefed up the tests using Devel::Coverage
        - Added sample subclass of XML::RSS::Headline 
          (XML::RSS::Headline::PerlJobs) was in documentation and just added 
          it to the distrobution.

1.05
        - Fixed caching issue.  Now cache in post process after every fetch
          instead of on object destroy (which was broken) :(
        - Did "pod2text XML/RSS/Feed.pm > README"

1.04
        - updated my e-mail address to jbisbee@cpan.org
        - stupid regression, the order of the headline array was reversed
          from version 0.25 to 1.00 and has been fixed in 1.04.  This is
          a seriously regression so make sure you don't use releases
          1.00-1.03.  (I wrote tests for the module AFTER I had the order
          reversed, had I written the tests first, the whole bug would 
          have been avoided.  I'm now a test driven development 


1.03
        - added failed_to_fetch and failed_to_parse back as deprecated 
          methods that return false and issue a warn statement if they're 
          used
        - added a test to make sure that the methods stay and they return false

1.02
        - changed C<> to B<> because pod looks crap on search.cpan.org

1.01
        - fixed pod error for $feed->parse()

1.00
        - Broke down and learned how to write tests then wrote a bunch
          to make future development and bug fixes fun instead of painful.
          (and kicked myself for not doing it sooner)
        - Holy crap that is pod documention for every public method for
          both XML::RSS::Feed and XML::RSS::Headline
        - XML::RSS::Headlines have a new attribute 'description'
        - Caching is now done using storables rather than using the XML.
          With headlines the title, url, description, and first_seen timestamp
          are cached, and with feeds, the channel title, url, and last_updated
          are cached.
        - New timestamps on feeds and headlines.  The ones on feeds are set
          everytime the feed is updated and the ones on headlines are only
          set when the headline is first seen.
        - Previously the headline limit was set by the RSS feed now you can 
          as many headlines as you have memory.  You can set a limit by
          setting the new attribute max_headlines
        - added new methods to support not using XML::RSS to parse feeds
          you can use the module 4 ways now

              1.  $feed->parse($xml_string);

              2.  $feed->process($items_array_ref,$feed_title,$feed_link);

              3.  $feed->pre_process;
                  $feed->process_items($items_array_ref);
                  $feed->post_process;

              4.  $feed->pre_process;
                  $feed->create_headline(
                      headline => "headline",
                      url      => "http://..."
                  );
                  $feed->post_process;

          This was implemented to support using POE::Filter::XML as a non- 
          blocking way to parse feeds rather than using the block XML::RSS 
          via PoCo::RSSAggregator
 
        - removed failed_to_parse and failed_to_fetch
        - changed default delay from 600 to 3600
        - added description set/get method to XML::RSS::Headline
        - changed XML::RSS::Feed->headlines to check 'wantarray' so you get
          either an array or an array ref based on context.
        - you can now create a XML::RSS::Headline object by either passing in
          an XML::RSS item datastructure 

            my $headline = XML::RSS::Headline->new(
                item => {
                    title => "blah",
                    link  => "http://blah.blash",
                    more  => "..."
                },
                headline_as_id => 1,    # bool value
            );

          or you can just pass in a headline and url which makes a lot more 
          sense.  (LotR asked me why I did initated the object with the 
          XML::RSS item structure...  I did it because I'm LAZY ok) :P

            my $headline = XML::RSS::Headline->new(
                headline       => "blah",
                url            => "http://blah.blash",
                headline_as_id => 1,                     # bool value
            );

        - Moved XML::RSS::Headline to its own package and wrote actual
          pod to describes its accessors.  XML::RSS::Headline objects are
          returned by XML::RSS::Feed->late_breaking_news and merlyn suggested
          it would be nice to see what methods could be called upon the
          the returned headline object.

0.25
        - added Clone 0.13 dependency
        - upped version to 0.25

0.20
        - added new param 'tmpdir'.  The module will now attempt to load 
          cached XML when this param is given.  The XML is held in memory
          until the DESTROY method is called and the XML is written to the
          tmpdir if it is defined.
        - better debugging if 'debug' is defined.

0.11
        - issue with Module::Release

0.10
        - moved XML::RSS::Feed::Headline into XML::RSS::Feed as 
          XML::RSS::Headline
        - fixed a return code error on parse - was returning 0 on parse and 
          should returning 1 (this didn't really affect anything though)
        - added a 'hlobj' attribute so that you can subclass XML::RSS::Headline
          to customize a headline.  An example of this is subclassing 
          XML::RSS::Headline to create a new headline method that takes 
          advantage of the extra info found with in the <item> xml block

            package XML::RSS::Headline::PerlJobs;
            use strict;
            use XML::RSS::Feed;
            use base qw(XML::RSS::Headline);

            sub headline {
                my ($self) = @_;

                # no idea why they use 'http://jobs.perl.org/rss/' as a hash key
                my $sub_hash = $self->{item}{'http://jobs.perl.org/rss/'};
                return "$self->{item}{title}\n$sub_hash->{company_name} - "
                    . "$sub_hash->{location}\n"
                    . "$sub_hash->{hours}, "
                    . "$sub_hash->{employment_terms}";
            }

            1;

          Which produced a more detailed headline than you would normally get.
          This example is from rssbot on irc.perl.org in channel #news.

              <rssbot>  + Part Time Perl
              <rssbot>    Brian Koontz - United States, TX, Dallas
              <rssbot>    Part time, Independent contractor (project-based)
              <rssbot>    http://jobs.perl.org/job/950

        - removed _build_headline because this was fixed by sublcassing 
          XML::RSS::Headline instead of XML::RSS::Feed;
        - changed late breaking news to use scalar instead of quote

            scalar @{$self->{late_breaking_news}}; 

          instead of

            "@{$self->{late_breaking_news}}";

0.01
        - original version