From 0a772512de0d0023f9e298e662bd3924e32a0d72 Mon Sep 17 00:00:00 2001 From: Andreas Voegele Date: Fri, 18 Apr 2014 20:33:19 +0200 Subject: [PATCH] Add Perl 5 implementation --- perl/GildedRose.pm | 74 ++++++++++++++++++++++++++++++++++++++++++++++ perl/Item.pm | 16 ++++++++++ perl/test.pl | 18 +++++++++++ 3 files changed, 108 insertions(+) create mode 100644 perl/GildedRose.pm create mode 100644 perl/Item.pm create mode 100755 perl/test.pl diff --git a/perl/GildedRose.pm b/perl/GildedRose.pm new file mode 100644 index 0000000000..7cc74a1eaa --- /dev/null +++ b/perl/GildedRose.pm @@ -0,0 +1,74 @@ +package GildedRose; + +use strict; +use warnings; + +sub new { + my ( $class, %attrs ) = @_; + return bless \%attrs, $class; +} + +sub update_quality { + my $self = shift; + for my $item ( @{ $self->{items} } ) { + if ( $item->{name} ne 'Aged Brie' + && $item->{name} ne 'Backstage passes to a TAFKAL80ETC concert' ) + { + if ( $item->{quality} > 0 ) { + if ( $item->{name} ne 'Sulfuras, Hand of Ragnaros' ) { + $item->{quality} = $item->{quality} - 1; + } + } + } + else { + if ( $item->{quality} < 50 ) { + $item->{quality} = $item->{quality} + 1; + + if ( $item->{name} eq + 'Backstage passes to a TAFKAL80ETC concert' ) + { + if ( $item->{sell_in} < 11 ) { + if ( $item->{quality} < 50 ) { + $item->{quality} = $item->{quality} + 1; + } + } + + if ( $item->{sell_in} < 6 ) { + if ( $item->{quality} < 50 ) { + $item->{quality} = $item->{quality} + 1; + } + } + } + } + } + + if ( $item->{name} ne 'Sulfuras, Hand of Ragnaros' ) { + $item->{sell_in} = $item->{sell_in} - 1; + } + + if ( $item->{sell_in} < 0 ) { + if ( $item->{name} ne 'Aged Brie' ) { + if ( $item->{name} ne + 'Backstage passes to a TAFKAL80ETC concert' ) + { + if ( $item->{quality} > 0 ) { + if ( $item->{name} ne 'Sulfuras, Hand of Ragnaros' ) { + $item->{quality} = $item->{quality} - 1; + } + } + } + else { + $item->{quality} = $item->{quality} - $item->{quality}; + } + } + else { + if ( $item->{quality} < 50 ) { + $item->{quality} = $item->{quality} + 1; + } + } + } + } + return; +} + +1; diff --git a/perl/Item.pm b/perl/Item.pm new file mode 100644 index 0000000000..04b0c2ae36 --- /dev/null +++ b/perl/Item.pm @@ -0,0 +1,16 @@ +package Item; + +use strict; +use warnings; + +sub new { + my ( $class, %attrs ) = @_; + return bless \%attrs, $class; +} + +sub _data_printer { ## no critic (ProhibitUnusedPrivateSubroutines) + my ( $self, $properties ) = @_; + return $self->{name} . ', ' . $self->{sell_in} . ', ' . $self->{quality}; +} + +1; diff --git a/perl/test.pl b/perl/test.pl new file mode 100755 index 0000000000..0ffecaf104 --- /dev/null +++ b/perl/test.pl @@ -0,0 +1,18 @@ +#!/usr/bin/env perl + +use strict; +use warnings; + +use Test::More 0.96; + +use_ok 'GildedRose'; +use_ok 'Item'; + +subtest 'foo' => sub { + my $items = [ Item->new( name => 'foo', sell_in => 0, quality => 0 ) ]; + my $app = GildedRose->new( items => $items ); + $app->update_quality(); + is( $app->{items}->[0]->{name}, 'fixme' ); +}; + +done_testing();