chauncey-garrett
3/13/2011 - 12:32 AM

Hypothetical Test-Reporter-Transport-Metabase-CPANTesters distribution

Hypothetical Test-Reporter-Transport-Metabase-CPANTesters distribution

-----BEGIN CERTIFICATE-----
MIIDRjCCAq+gAwIBAgIJAJ6JIAAh+7ZVMA0GCSqGSIb3DQEBBQUAMHYxCzAJBgNV
BAYTAlVTMREwDwYDVQQIEwhOZXcgWW9yazERMA8GA1UEBxMITmV3IFlvcmsxHjAc
BgNVBAoTFUNQQU4gVGVzdGVycyBNZXRhYmFzZTEhMB8GA1UEAxMYbWV0YWJhc2Uu
Y3BhbnRlc3RlcnMub3JnMB4XDTEwMDIxODE5MjkyNVoXDTEyMTExNDE5MjkyNVow
djELMAkGA1UEBhMCVVMxETAPBgNVBAgTCE5ldyBZb3JrMREwDwYDVQQHEwhOZXcg
WW9yazEeMBwGA1UEChMVQ1BBTiBUZXN0ZXJzIE1ldGFiYXNlMSEwHwYDVQQDExht
ZXRhYmFzZS5jcGFudGVzdGVycy5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
AoGBANrCjEpVS4lsgDcrYrSm0U6b64LwGlGEPkG80yvBmFvP+yue4KU0Z8MVNoZj
BF+cY73xP28Tg3xuGb4pbPmBo7XrQv6H4nzxLgcp0fljeI++Z70KYHPWZ34+zIao
67JJw0R656T8xpBaKZdstWnEhvRsjX7Bf8+ysK3xfCWKCZeLAgMBAAGjgdswgdgw
HQYDVR0OBBYEFM/97yImTvtUUhzWd6lfCd+7MiSHMIGoBgNVHSMEgaAwgZ2AFM/9
7yImTvtUUhzWd6lfCd+7MiSHoXqkeDB2MQswCQYDVQQGEwJVUzERMA8GA1UECBMI
TmV3IFlvcmsxETAPBgNVBAcTCE5ldyBZb3JrMR4wHAYDVQQKExVDUEFOIFRlc3Rl
cnMgTWV0YWJhc2UxITAfBgNVBAMTGG1ldGFiYXNlLmNwYW50ZXN0ZXJzLm9yZ4IJ
AJ6JIAAh+7ZVMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAShlhs/P3
YtOVisV6QNs56fKvTsHNxwg2+iP2EI5UmhYOwJdgsIic/QEKDEY73ve58MN3yehc
i3Kgjlkh8nw65TAxHnY47Bz4rAcMh/mxTXVXI/RQYZvWOWMdcHG5VPVZXm5krbZB
45FHcmV/Qb+Zig4ry/TAp7wrad4pH60ls/c=
-----END CERTIFICATE-----
#!/usr/bin/env perl

use 5.006;
use CPAN::Reporter::Config;

my $config_file = CPAN::Reporter::Config::_get_config_file();
my $config = CPAN::Reporter::Config::_open_config_file();

my ($class, %args) = split m{\s+}mosx, $config->{_}->{transport};

if ($class eq 'Metabase::CPANTesters') {
	print "Modifying configuration file transport line from\n", $config->{_}->{transport}, "\n";
	# Correct the transport information
	$class = 'Metabase';
	$args{uri} = 'https://metabase.cpantesters.org/api/v1/';
	$config->{_}->{transport} = "$class " . join q{ }, %args;
	print "to\n", $config->{_}->{transport}, "\n";
	# Write the configuration
	$config->write($config_file);
	print "Done\n";
}
elsif ($config->{_}->{transport}) {
	# Modification does not look necessary
	print "Leaving transport configuration set to\n", $config->{_}->{transport}, "\n";
}
else {
	# Modification does not look like it should occur
	print "Not modifying configuration without transport directive\n";
}

exit 0;
package Test::Reporter::Transport::Metabase::CPANTesters 0.000;

use Moose 1.24;

use Test::Reporter::Transport::Metabase 1.999008;

has id_file => (
	is => 'ro',
	isa => 'Str',
	required => 1,
);
has metabase_transport => (
	is => 'ro',
	isa => 'Test::Reporter::Transport::Metabase',
	init_arg => undef,
	lazy_build => 1,
	handles => qr{.+}mosx,
);
has uri => (
	is => 'ro',
	isa => 'Str',
	default => 'https://metabase.cpantesters.org/api/v1/',
);

sub _build_metabase_transport {
	my $self = shift;

	return Test::Reporter::Transport::Metabase->new(
		client  => 'Metabase::Client::CPANTesters',
		id_file => $self->id_file,
		uri     => $self->uri,
	);
}

no Moose;
__PACKAGE__->meta->make_immutable;

1;

__END__

=head1 NAME

Test::Reporter::Transport::Metabase::CPANTesters - HYPOTHETICAL Metabase transport for CPAN Testers
This is a HYPOTHETICAL distribution to give easy secure access to
the CPAN Testers metabase over SSL with libwww-perl 6+.

Now that this distribution is no longer needed, here are the
uninstall instructions:

    perl Build.PL
    perl script/set_official_config.pl
    perl Build uninstall
    perl Build realclean
This is a HYPOTHETICAL distribution to give easy secure access to
the CPAN Testers metabase over SSL with libwww-perl 6+.

# UPDATE

This distribution, even hypothetical as it was, is no longer needed
as a solution to the problem this module was written for has been
resolved. Please see
[CPAN Testers Metabase has a certificate](http://somethingdoug.com/thoughts/2011/03/15/cpan-testers-metabase-has-a-certificate/).
for information. The short script mentioned in the article to set
your `CPAN::Reporter` configuration back is included with this
distribution as `scripts/set_official_config.pl`. See `UNINSTALL`
for full instructions on how to uninstall the distribution.

To use this module for your CPAN::Reporter transport, edit your
`~/.cpanreporter/config.ini` file's transport directive to be

    transport = Metabase::CPANTesters id_file ~/your/id_file.json

Note: I used Moose in these modules since they are hypothetical
and it made it much faster to create.
---
abstract: 'HYPOTHETICAL Metabase transport for CPAN Testers'
author:
  - unknown
build_requires: {}
configure_requires:
  Module::Build: 0.38
dynamic_config: 1
generated_by: 'Module::Build version 0.38, CPAN::Meta::Converter version 2.110580'
license: unknown
meta-spec:
  url: http://module-build.sourceforge.net/META-spec-v1.4.html
  version: 1.4
name: Test-Reporter-Transport-Metabase-CPANTesters
provides:
  Metabase::Client::CPANTesters:
    file: lib/Metabase/Client/CPANTesters.pm
    version: 0
  Test::Reporter::Transport::Metabase::CPANTesters:
    file: lib/Test/Reporter/Transport/Metabase/CPANTesters.pm
    version: 0
requires:
  File::ShareDir: 1.03
  IO::Socket::SSL: 0
  LWP::UserAgent: 6.00
  Metabase::Client::Simple: 0.008
  Moose: 1.24
  MooseX::NonMoose: 0.19
  Test::Reporter::Transport::Metabase: 1.999008
version: 0.000
{
   "abstract" : "HYPOTHETICAL Metabase transport for CPAN Testers",
   "author" : [
      "unknown"
   ],
   "dynamic_config" : 1,
   "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.110580",
   "license" : [
      "unknown"
   ],
   "meta-spec" : {
      "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
      "version" : "2"
   },
   "name" : "Test-Reporter-Transport-Metabase-CPANTesters",
   "prereqs" : {
      "configure" : {
         "requires" : {
            "Module::Build" : "0.38"
         }
      },
      "runtime" : {
         "requires" : {
            "File::ShareDir" : "1.03",
            "IO::Socket::SSL" : 0,
            "LWP::UserAgent" : "6.00",
            "Metabase::Client::Simple" : "0.008",
            "Moose" : "1.24",
            "MooseX::NonMoose" : "0.19",
            "Test::Reporter::Transport::Metabase" : "1.999008"
         }
      }
   },
   "provides" : {
      "Metabase::Client::CPANTesters" : {
         "file" : "lib/Metabase/Client/CPANTesters.pm",
         "version" : 0
      },
      "Test::Reporter::Transport::Metabase::CPANTesters" : {
         "file" : "lib/Test/Reporter/Transport/Metabase/CPANTesters.pm",
         "version" : 0
      }
   },
   "release_status" : "stable",
   "version" : "0.000"
}
Build.PL
INSTALL
lib/Metabase/Client/CPANTesters.pm
lib/Test/Reporter/Transport/Metabase/CPANTesters.pm
MANIFEST
META.json
META.yml
README
scripts/set_official_config.pl
share/metabase.cpantesters.org.crt
UNINSTALL
This is a HYPOTHETICAL distribution to give easy secure access to
the CPAN Testers metabase over SSL with libwww-perl 6+.

    perl Build.PL
    perl Build
    perl Build installdeps
    perl Build install
    perl Build realclean
use Module::Build 0.36;

eval { check_cpan_reporter_config(); };

my $class = Module::Build->subclass(
	class => 'My::Module::Build::WithUninstall',
	code  => <<'	...',
		sub ACTION_uninstall {
			my $self = shift;

			if (exists $self->install_map->{write} && -e $self->install_map->{write}) {
				require ExtUtils::Install;

				# Get the destination packlist
				my $packlist = $self->install_map->{write};

				# Uninstall the files listed in the packlist
				ExtUtils::Install::uninstall($packlist, $self->verbose);
			}
		}
	...
);

my $build = $class->new(
	module_name => 'Test::Reporter::Transport::Metabase::CPANTesters',

	# Module that are required
	requires => {
		'File::ShareDir'                      => '1.03',
		'IO::Socket::SSL'                     => 0,
		'LWP::UserAgent'                      => '6.00',
		'Metabase::Client::Simple'            => '0.008',
		'Moose'                               => '1.24',
		'MooseX::NonMoose'                    => '0.19',
		'Test::Reporter::Transport::Metabase' => '1.999008',
	},

	share_dir => 'share',
);

$build->create_build_script;

sub check_cpan_reporter_config {
	# Load CPAN::Reporter configuration module
	require CPAN::Reporter::Config;

	# Open the configuration
	my $config = CPAN::Reporter::Config::_open_config_file();

	if (!$config) {
		# Unable to read configuration
		print <<"		NOTE";

*************************** NOTE ***************************
After installation, please setup your CPAN::Reporter config
and set the transport line according to the README.
************************************************************

		NOTE
		return;
	}

	# Get the file name of the configuration
	my $file_name = CPAN::Reporter::Config::_get_config_file();

	# Read the transport configuration
	my $transport = $config->{_}->{transport};

	if (defined $transport) {
		# Change the transport option into readable variables
		my ($class, %args) = split m{\s+}mosx, $transport;

		if ($class eq 'Metabase' &&
			defined $args{uri} &&
			$args{uri} eq 'https://metabase.cpantesters.org/api/v1/') {
			# Looks like the user should change to this distribution
			delete $args{uri};
			my $transport_args = join q{ }, %args;
			print <<"			NOTE";

*************************** NOTE ***************************
After installation, please change your CPAN::Reporter config
file to use this transport. You can do this by modifying

$file_name

and replacing the line

transport = $transport

with

transport = Metabase::CPANTesters $transport_args

************************************************************

			NOTE
		}
	}

	return;
}