From: Eric Wong <e@80x24.org>
Date: Mon, 7 Apr 2014 20:26:42 +0000 (+0000)
Subject: feed: generate takes a hashref for args
X-Git-Tag: v1.0.0~1302
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=7c69497a0126cd613053d881d63586bead07dd0e;p=public-inbox.git

feed: generate takes a hashref for args

Passing a giant argument list is to error prone and
hard-to-document.
---

diff --git a/lib/PublicInbox/Feed.pm b/lib/PublicInbox/Feed.pm
index e282dc74..3ac77174 100644
--- a/lib/PublicInbox/Feed.pm
+++ b/lib/PublicInbox/Feed.pm
@@ -16,13 +16,13 @@ use constant DATEFMT => '%Y-%m-%dT%H:%M:%SZ';
 use PublicInbox::View;
 
 # main function
-# FIXME: takes too many args, cleanup
 sub generate {
-	my ($class, $git_dir, $max, $pi_config, $listname, $cgi, $top) = @_;
-	$max ||= 25;
+	my ($class, $args) = @_;
+	my $max = $args->{max} || 25;
+	my $top = $args->{top}; # bool
 
-	local $ENV{GIT_DIR} = $git_dir;
-	my $feed_opts = get_feedopts($pi_config, $listname, $cgi);
+	local $ENV{GIT_DIR} = $args->{git_dir};
+	my $feed_opts = get_feedopts($args);
 
 	my $feed = XML::Atom::SimpleFeed->new(
 		title => $feed_opts->{description} || "unnamed feed",
@@ -63,8 +63,12 @@ sub generate {
 
 # private functions below
 sub get_feedopts {
-	my ($pi_config, $listname, $cgi) = @_;
+	my ($args) = @_;
+	my $pi_config = $args->{pi_config};
+	my $listname = $args->{listname};
+	my $cgi = $args->{cgi};
 	my %rv;
+
 	if ($pi_config && defined $listname && length $listname) {
 		foreach my $key (qw(description address)) {
 			$rv{$key} = $pi_config->get($listname, $key);
diff --git a/public-inbox-cgi b/public-inbox-cgi
index cfcf3feb..ccfaae37 100755
--- a/public-inbox-cgi
+++ b/public-inbox-cgi
@@ -73,8 +73,12 @@ sub get_atom_all {
 	print $cgi->header(-type => "application/xml", -charset => 'us-ascii',
 				-status => '200 OK');
 
-	print PublicInbox::Feed->generate($git_dir, undef,
-					$pi_config, $listname, $cgi);
+	print PublicInbox::Feed->generate({
+		git_dir => $git_dir,
+		pi_config => $pi_config,
+		listname => $listname,
+		cgi => $cgi
+	});
 }
 
 # /$LISTNAME/index.atom.xml	-> Atom feed
@@ -86,7 +90,11 @@ sub get_atom_index {
 	require PublicInbox::Feed;
 	print $cgi->header(-type => "application/xml", -charset => 'us-ascii',
 				-status => '200 OK');
-
-	print PublicInbox::Feed->generate($git_dir, undef,
-					$pi_config, $listname, $cgi, 1);
+	print PublicInbox::Feed->generate({
+		git_dir => $git_dir,
+		pi_config => $pi_config,
+		listname => $listname,
+		cgi => $cgi,
+		top => 1
+	});
 }
diff --git a/t/feed.t b/t/feed.t
index baa99fee..63fcc443 100644
--- a/t/feed.t
+++ b/t/feed.t
@@ -44,7 +44,10 @@ EOF
 
 	# check initial feed
 	{
-		my $feed = PublicInbox::Feed->generate($git_dir, 3);
+		my $feed = PublicInbox::Feed->generate({
+			git_dir => $git_dir,
+			max => 3
+		});
 		if ($have_xml_feed) {
 			my $p = XML::Feed->parse(\$feed);
 			is($p->format, "Atom", "parsed atom feed");
@@ -78,7 +81,10 @@ EOF
 
 	# check spam shows up
 	{
-		my $spammy_feed = PublicInbox::Feed->generate($git_dir, 3);
+		my $spammy_feed = PublicInbox::Feed->generate({
+			git_dir => $git_dir,
+			max => 3
+		});
 		if ($have_xml_feed) {
 			my $p = XML::Feed->parse(\$spammy_feed);
 			is($p->format, "Atom", "parsed atom feed");
@@ -100,7 +106,10 @@ EOF
 
 	# spam no longer shows up
 	{
-		my $feed = PublicInbox::Feed->generate($git_dir, 3);
+		my $feed = PublicInbox::Feed->generate({
+			git_dir => $git_dir,
+			max => 3
+		});
 		if ($have_xml_feed) {
 			my $p = XML::Feed->parse(\$feed);
 			is($p->format, "Atom", "parsed atom feed");