intro-to-oop-perl

My introduction to Object-Oriented Programming using Perl
git clone git://git.samirparikh.com/intro-to-oop-perl
Log | Files | Refs | README

Passenger.pm (1292B) - raw


      1 package Passenger;
      2 
      3 use v5.22;
      4 use strict;
      5 use warnings;
      6 
      7 # class attributes
      8 my @required = ();
      9 
     10 # class methods
     11 sub define_required_items {
     12     my $class = shift;
     13     @required = @_;
     14 }
     15 
     16 sub new {
     17     my $class = shift;
     18     my $self  = { @_ };
     19     bless ($self, $class);
     20     $self->_init;
     21     return $self;
     22 }
     23 
     24 # public object methods
     25 sub get_name {
     26     my $self = shift;
     27     return $self->{name};
     28 }
     29 
     30 sub provision {
     31     my ( $self, @provisions ) = @_;
     32     push @{ $self->{provisions} } => @provisions;
     33 }
     34 
     35 sub check_required_provisions {
     36     my $self     = shift;
     37     my @items    = @{ $self->_get_provisions };
     38     my @missing  = ( );
     39 
     40     foreach my $item (@required) {
     41         unless (grep $item eq $_, @items) {
     42             print $self->get_name, " is missing $item\n";
     43             push @missing => $item;
     44         }
     45     }
     46 
     47     if (@missing) {
     48         print "Adding @missing to @items for ", $self->get_name, "\n";
     49         $self->provision( @missing );
     50     }
     51 }
     52 
     53 sub print_provisions {
     54     my $self = shift;
     55     foreach my $item (@{ $self->_get_provisions }) {
     56         print "\t$item\n";
     57     }
     58 }
     59 
     60 # private object methods
     61 sub _init {
     62     my $self = shift;
     63     $self->{provisions} = [];
     64 }
     65 
     66 sub _get_provisions {
     67     my $self = shift;
     68     return $self->{provisions};
     69 }
     70 
     71 
     72 1; # End of Passenger