#line 1 "inc/Module/Install/Metadata.pm - /usr/lang/perl/5.8.0/lib/site_perl/5.8.0/Module/Install/Metadata.pm" # $File: //depot/cpan/Module-Install/lib/Module/Install/Metadata.pm $ $Author: iain $ # $Revision: #18 $ $Change: 1537 $ $DateTime: 2003/05/20 22:50:53 $ vim: expandtab shiftwidth=4 package Module::Install::Metadata; use Module::Install::Base; @ISA = qw(Module::Install::Base); $VERSION = '0.01'; use strict 'vars'; use vars qw($VERSION); sub Meta { shift } my @scalar_keys = qw(name version abstract author license distribution_type); my @tuple_keys = qw(build_requires requires recommends bundles); foreach my $key (@scalar_keys) { *$key = sub { my $self = shift; return $self->{values}{$key} unless @_; $self->{values}{$key} = shift; return $self; }; } foreach my $key (@tuple_keys) { *$key = sub { my ($self, $module, $version) = (@_, 0, 0); return $self->{values}{$key} unless $module; my $rv = [$module, $version]; push @{$self->{values}{$key}}, $rv; return $rv; }; } sub features { my $self = shift; while (my ($name, $mods) = splice(@_, 0, 2)) { push @{$self->{values}{features}}, ($name => [map { ref($_) ? @$_ : $_ } @$mods] ); } return @{$self->{values}{features}}; } sub _dump { my $self = shift; my $package = ref($self->_top); my $version = $self->_top->VERSION; my %values = %{$self->{values}}; $values{distribution_type} ||= 'module'; my $dump = ''; foreach my $key (@scalar_keys) { $dump .= "$key: $values{$key}\n" if exists $values{$key}; } foreach my $key (@tuple_keys) { next unless exists $values{$key}; $dump .= "$key:\n"; $dump .= " $_->[0]: $_->[1]\n" for @{$values{$key}}; } return($dump . "private:\n directory:\n - inc\ngenerated_by: $package version $version\n"); } sub read { my $self = shift; $self->include( 'YAML' ); require YAML; my $data = YAML::LoadFile( 'META.yml' ); # Call methods explicitly in case user has already set some values. while ( my ($key, $value) = each %$data ) { next unless $self->can( $key ); if (ref $value eq 'HASH') { while (my ($module, $version) = each %$value) { $self->$key( $module => $version ); } } else { $self->$key( $value ); } } return $self; } sub write { my $self = shift; return $self unless $self->admin; return if -f "META.yml"; warn "Creating META.yml\n"; open META, "> META.yml" or die $!; print META $self->_dump; close META; return $self; } sub version_from { my ($self, $version_from) = @_; require ExtUtils::MM_Unix; $self->version(ExtUtils::MM_Unix->parse_version($version_from)); } 1;