Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re^6: Problem with around BUILDARGS

by saintex (Scribe)
on Apr 21, 2011 at 08:38 UTC ( #900514=note: print w/ replies, xml ) Need Help??


in reply to Re^5: Problem with around BUILDARGS
in thread Problem with around BUILDARGS

Hello, I'm trying to use the accessor as string.

That is the method in my class:

sub startServer { my $self = shift; defined(my $pid=fork) or die "Cannot fork: $!"; unless ($pid) { eval { exec 'java -jar '.$self->serverLocation; }; die "Impossibile far partire il server selenium: $@\n;" if ($@ +); } }
Thank you for your help.

I'm interested to solve this problem for knowledge reason, not for production... so I'm not in any hurry.


Comment on Re^6: Problem with around BUILDARGS
Download Code
Re^7: Problem with around BUILDARGS
by stvn (Monsignor) on Apr 21, 2011 at 19:44 UTC

    Can I see the attribute definition for serverLocation? Or better yet, the entire class.

    -stvn
      Hello,
      This is the class.

      Thank you!

      package Selenium2; our $VERSION=0.01; use 5.010; use Moose; use MooseX::NonMoose; use FindBin qw($Bin); use lib ("$Bin/classes","$Bin/classes/browser"); use Test::WWW::Selenium; use WWW::Selenium::Util qw/server_is_running/; extends 'Test::WWW::Selenium'; has 'serverLocation' => (is=>'ro',isa=>'Str',builder =>'buildServerLoc +ation'); sub buildServerLocation { # not: my $self = shift; ?? return "$Bin/lib/selenium-server-standalone-2.0b2.jar" } sub FOREIGNBUILDARGS { my $self = shift; $self->checkServer; my %args = ( @_ == 1 ? %{ $_[0] } : @_ ); $args{serverLocation} //= $self->buildServerLocation; $args{host}//="localhost"; $args{port}//=4444; $args{browser}//='*firefox'; $args{browser_url}//='http://wwww.google.com'; return %args; } sub BUILD { my $self = shift; $self->Browser::BUILD(); $self->start; } sub DEMOLISH { my $self = shift; $self->stop; Browser->DEMOLISH; } sub checkServer { my $self = shift; if (server_is_running) { print "Selenium server running\n"; } else { $self->startServer; } } sub startServer { my $self = shift; defined(my $pid=fork) or die "Cannot fork: $!"; unless ($pid) { eval { exec 'java -jar '.$self->serverLocation; }; die "Impossibile far partire il server selenium: $@\n;" if ($@ +); } sleep(60); #attendi 1 minuto perché il server parta. no Moose; __PACKAGE__->meta->make_immutable; 1; }

        My best guess based on your code and the error, is that you are calling startServer as a class method, which then calls serverLocation as a class method instead of an instance attribute accessor, which means it wont be initialized.

        -stvn
        Another solution sould be to use MooseX::ClassAttribute.

        You could then define : class_has 'defaultServerLocation' => (is => 'ro', isa => 'Str', builder =>'buildDefaultServerLocation' );

        cpk

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://900514]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (8)
As of 2015-07-05 20:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (68 votes), past polls