package JIB::Alternative; use strict; use warnings; use JIB::Config; use JIB::Utils; use Params::Check qw[check]; use Log::Message::Simple qw[:STD]; use Data::Dumper; use base 'Object::Accessor'; =head1 ACCESSORS =head1 METHODS =head2 $alt = JIB::Alternative->new_from_struct( struct => $struct ); =cut sub new_from_struct { my $class = shift; my %hash = @_; my $struct; my $tmpl = { struct => { required => 1, store => \$struct }, }; check( $tmpl, \%hash ) or ( error( Params::Check->last_error), return ); ### XXX check validity of the struct my $obj = $class->SUPER::new; ### XXX add a fields accessors for all the fields in the file ### so we can have other accessors for other meta data? $obj->mk_accessors( keys %$struct ); $obj->$_( $struct->{$_} ) for keys %$struct; return $obj; } ### XXX c/p'd from meta.pm -- subclass/inherit =head2 $struct = $alt->to_struct; =cut sub to_struct { my $self = shift; my %struct = map { $_ => $self->$_ } $self->ls_accessors; return \%struct; } ### XXX c/p'd this from JIB::Package -- subclass/inherit! my $Package_re = qr/^(\w+) - # prefix ([\w-]+?) - # package name ([\d.]+) - # version (\w+\+\S+) $ # authority /smx; =head2 prefix =head2 name =head2 version =head2 authority =cut ### XXX could autogenerate { sub prefix { return $1 if shift->package() =~ $Package_re; } sub name { return $2 if shift->package() =~ $Package_re; } sub version { return $3 if shift->package() =~ $Package_re; } sub authority { return $4 if shift->package() =~ $Package_re; } } # Local variables: # c-indentation-style: bsd # c-basic-offset: 4 # indent-tabs-mode: nil # End: # vim: expandtab shiftwidth=4: 1;