markdibley has asked for the wisdom of the Perl Monks concerning the following question:
Sample History (organite) first new 1292414994 me first stage one 1292414994 me second new 1292414994 me second stage one 1292414994 me second stage four 1292414994 me first stage two 1292414994 me test1 is currently at: stage two sample is currently at: stage four
#!/usr/bin/perl -w use strict; use Data::Dumper; use sam; use tes; # Create a sample my $sample = new sam(); $sample->sample_id("organite"); # Create a new test, name it, add it to the sample and increase it's s +tatus a couple of times my $test1 = new tes(); $test1->test_id("first"); $sample->add_test($test1); $test1->status("new", "me"); $test1->status("stage one", "me"); # Create ANOTHER new test, name it, add it to the sample and increase +it's status a couple of times my $test2 = new tes(); $test2->test_id("second"); $sample->add_test($test2); $test2->status("new", "me"); $test2->status("stage one", "me"); # change test2 status $test2->status("stage four", "me"); # change test1 status, but not as high as test2 $test1->status("stage two", "me"); printf("\nSample History (%s)\n%s\n", $sample->sample_id(), $sample->s +tatus_history()); printf("\ntest1 is currently at: %s\n",$test1->current_status()); printf("\ntest2 is currently at: %s\n",$test2->current_status()); printf("\nsample is currently at: %s\n\n",$sample->current_status());
package sam; use strict; use Data::Dumper; use status; sub new{ my($class) = @_; my $this = { 'sample_id'=>undef, 'test_list'=>[], 'status'=>[], } ; bless($this, $class); return $this; } sub sample_id{ if(defined $_[1]){$_[0]->{'sample_id'}=$_[1];} else{return $_[0]->{'sample_id'}} } sub add_test{ my($this, $test) = @_; # Add test to sample push @{$this->{'test_list'}}, $test; $test->add_to_sample($this); } sub add_status{ my($this, $test) = @_; my $h = {}; $h->{'ref'} = ${$test->{'status'}}[(scalar(@{$test->{'status'}}) - + 1)]; $h->{'src'} = $test; push @{$this->{'status'}}, $h; } sub status_history{ my($this) = @_; my $history = ""; foreach my $entry(@{$this->{'status'}}){ $history .= sprintf("%s\t%s\t%s\t%s\n", $entry->{src}->test_id +(), $entry->{'ref'}->status(), $entry->{'ref'}->time(), $entry->{'ref +'}->owner()); } return $history; } sub current_status{ my($this) = @_; my $top; foreach my $entry(@{$this->{'status'}}){ $top = $entry if(! defined $top || $entry->{'ref'}->status_cod +e() > $top->{'ref'}->status_code()); } return $top->{'ref'}->status; } 1;
package tes; use strict; use Data::Dumper; use status; sub new{ my($class, $data) = @_; my $this = { 'sample'=>undef, 'test_id'=>undef, 'status'=>[], } ; bless($this, $class); return $this; } sub add_to_sample{ my($this, $sample) = @_; $this->{'sample'} = $sample; } sub test_id{ my($this, $test_id) = @_; if(defined $test_id){ $this->{'test_id'}=$test_id; } else{ return $this->{'test_id'} } } sub status{ my($this, $status, $owner) = @_; if(! defined $status){ return pop @{$this->{'status'}}; } else{ my $stat = new status(); $stat->initiate($status, $owner); push @{$this->{'status'}}, $stat; $this->{'sample'}->add_status($this); } return 1; } sub current_status{ my($this) = @_; my $status = $this->status(); return $status->status(); } 1;
package status; use strict; use Data::Dumper; my $order = {"new"=>1,"stage one"=>2,"stage two"=>3,"stage four"=>4,"e +nd"=>5}; sub new{ my($class) = @_; my $this = { 'status'=>undef, 'time'=>undef, 'owner'=>undef}; bless($this, $class); return $this; } sub initiate{ my($this, $status, $owner) = @_; $this->status($status); $this->time(time()); $this->owner($owner); } sub status{ my($this, $status) = @_; if(defined $status){ $this->{'status'} = $status; } else{ return $this->{'status'}; } } sub status_code{ my($this, $status) = @_; if(defined $this->{'status'}){ return $order->{$this->{'status'}}; } else{ return undef; } } sub time{ my($this, $time) = @_; if(defined $time){ $this->{'time'} = $time; } else{ return $this->{'time'}; } } sub owner{ my($this, $owner) = @_; if(defined $owner){ $this->{'owner'} = $owner; } else{ return $this->{'owner'}; } } 1;
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Is there a better way to do this?
by roboticus (Chancellor) on Dec 15, 2010 at 14:23 UTC | |
by markdibley (Sexton) on Dec 15, 2010 at 16:20 UTC | |
by afoken (Chancellor) on Dec 15, 2010 at 17:30 UTC | |
by markdibley (Sexton) on Dec 15, 2010 at 18:24 UTC | |
by afoken (Chancellor) on Dec 16, 2010 at 14:26 UTC | |
|
Re: Is there a better way to do this?
by afoken (Chancellor) on Dec 15, 2010 at 14:02 UTC |