in reply to Re^4: Class::MOP won't load a class!!
in thread Class::MOP won't load a class!!

AARGH.... There see does is sitting there fine and dandy under Moose::Object and my class does a  use Moose;....?? Cut me some slack here Moosy!!

$prove -lv t/Parser.t t/Parser.t .. 1..3 ok 1 - use Admin_server::Parser; ok 2 - Admin_server::Parser can be instantiated. ok 3 - Instantiated object is of type Admin_server::Parser Found plugins: Admin_server::Parser::Plugin::FeedHandler Loading plugin Admin_server::Parser::Plugin::FeedHandler finished loading Admin_server::Parser::Plugin::FeedHandler ---------------------------------------------------------------------- +---------- Printing out the symbol table for %Admin_server::Parser:: .... ---------------------------------------------------------------------- +---------- BEGIN BUILD BUILDARGS DEMOLISH DEMOLISHALL DESTROY ISA ParserInterface Plugin:: _build_plugins a b blessed can clear_plugins confess get_plugins has_plugins import isa meta new tell_app_name tell_app_status ---------------------------------------------------------------------- +---------- Printing out the symbol table for %Class::MOP .... ---------------------------------------------------------------------- +---------- AUTHORITY Attribute:: BEGIN Class:: HAVE_ISAREV IS_RUNNING_ON_5_10 Instance:: Method:: Module:: Object:: Package:: VERSION XS_VERSION __ANON__ _class_to_pmfile _is_valid_class_name _try_load_one_class blessed bootstrap check_package_cache_flag class_of confess does_metaclass_exist get_all_metaclass_instances get_all_metaclass_names get_all_metaclasses get_code_info get_metaclass_by_name import in_global_destruction is_class_loaded load_class load_first_existing_class reftype remove_metaclass_by_name store_metaclass_by_name subname weaken weaken_metaclass ---------------------------------------------------------------------- +---------- Printing out the symbol table for %Admin_server::Parser::Plugin::Feedh +andler:: .... ---------------------------------------------------------------------- +---------- BEGIN BUILD BUILDARGS DEMOLISH DEMOLISHALL DESTROY ISA blessed can confess is_yours isa meta new tell_instance_info tell_script_names tell_status ---------------------------------------------------------------------- +---------- Printing out the symbol table for %Moose::Object:: .... ---------------------------------------------------------------------- +---------- AUTHORITY BEGIN BUILD BUILDALL BUILDARGS DEMOLISH DEMOLISHALL DESTROY DOES ISA VERSION __mx_is_compiled can does dump import in_global_destruction meta new ---------------------------------------------------------------------- +---------- Done... ---------------------------------------------------------------------- +---------- Can't locate object method "does" via package "Admin_server::Parser::P +lugin::FeedHandler" (perhaps you forgot to load "Admin_server::Parser +::Plugin::FeedHandler"?) at /Volumes/UserData/Users/dattanik/Programs +/Perl/Work_area/Admin_server/lib/Admin_server/Parser.pm line 114. # Looks like your test exited with 255 just after 3. Dubious, test returned 255 (wstat 65280, 0xff00) All 3 subtests passed Test Summary Report ------------------- t/Parser.t (Wstat: 65280 Tests: 3 Failed: 0) Non-zero exit status: 255 Files=1, Tests=3, 0 wallclock secs ( 0.04 usr 0.01 sys + 0.23 cusr + 0.02 csys = 0.30 CPU) Result: FAIL

Sorry just venting out.....

Replies are listed 'Best First'.
Re^6: Class::MOP won't load a class!!
by stvn (Monsignor) on Oct 09, 2009 at 13:27 UTC

    Try printing out the @ISA of Admin_server::Parser::Plugin::FeedHandler, it should have Moose::Object in it. Simplest way to do that is

    print join ", " => @{ Admin_server::Parser::Plugin::FeedHandler->meta- +>superclasses }
    I am also a little puzzled as to why Admin_server::Parser:: and Admin_server::Parser::Plugin::Feedhandler:: have BUILD, BUILDARGS, DEMOLISH and DEMOLISHALL defined in their symbol tables, those are methods in Moose::Object.

    -stvn
Re^6: Class::MOP won't load a class!!
by MarkovChain (Sexton) on Oct 09, 2009 at 16:16 UTC

    Hi Steven,

    Yeah Moose::Object shows up.

    I modified the test file for Admin_server::Parser::Plugin::Feedhandler as follows:

    =========================================

    #---------------------------------------------------------- # These are to test the ISA array. #---------------------------------------------------------- print "="x79 . "\n"; print STDOUT join ", ", $fh->meta()->superclasses(); print "\n"; print "="x79 . "\n"; print STDOUT join ", ", sort $fh->meta()->get_all_method_names(); print "\n"; print "="x79 . "\n";

    =========================================

    Upon proving it, I got the following results:

    =========================================

    $prove -lv t/Plugin/FeedHandler.t t/Plugin/FeedHandler.t .. 1..34 ok 1 - use Admin_server::Parser::Plugin::FeedHandler; ok 2 - Admin_server::Parser::Plugin::Feedhandler can be instantiated. ok 3 - Instantiated object is of type Admin_server::Parser::Plugin::Fe +edhandler. ok 4 - Conforms to canonized plugin interface - does Admin_server::Int +erface::ParserInterface. ok 5 - Feed handler application correctly identified. ok 6 - tell_instance_info succesfully called. ok 7 - tell_instance_info returns a hash reference. ok 8 - tell_instance_info return hash has a key of 'instance_name'. ok 9 - Instance name correctly extracted from first line of log4x data +. ok 10 - Instance name negative test successful. ok 11 - Instance name negative test successful. ok 12 - tell_script_names successfully called. ok 13 - tell_script_names returns a hash. ok 14 - The tell_script_names return hash has a key of start_script. ok 15 - The tell_script_names return hash has a key of stop_script. ok 16 - Start script name correctly extracted from first line of log4x + data. ok 17 - Stop script name correctly extracted from first line of log4x +data. ok 18 - Start script name negative test successful - (with erroneous d +ata). ok 19 - Stop script name negative test successful - (with erroneous da +ta). ok 20 - Start script name negative test successful - (with undef data) +. ok 21 - Stop script name negative test successful - (with undef data). ok 22 - tell_status successfully called with a log4x line not having a +n error. ok 23 - tell_status returns a hash. ok 24 - tell_status correctly diagnoses feed handler as up. ok 25 - tell_status return hash doesn't have the app_down key when app + is up. ok 26 - tell_status return hash doesn't have the app_unknown key when +app is up. ok 27 - tell_status successfully called with a log4x line having an er +ror. ok 28 - The tell_status correctly diagnoses feed handler as down. ok 29 - tell_status return hash doesn't have the app_up key when app i +s down. ok 30 - tell_status return hash doesn't have the app_unknown key when +app is down. ok 31 - tell_status successfully called with a undef value. ok 32 - The tell_status correctly diagnoses feed handler status as unk +nown. ok 33 - tell_status return hash doesn't have the app_up key when app i +s unknown. ok 34 - tell_status return hash doesn't have the app_unknown key when +app is unknown. =============================================================== Moose::Object =============================================================== BUILDALL, BUILDARGS, DEMOLISHALL, DESTROY, DOES, does, dump, is_yours, + meta, new, tell_instance_info, tell_script_names, tell_status =============================================================== ok All tests successful. Files=1, Tests=34, 0 wallclock secs ( 0.03 usr 0.01 sys + 0.22 cusr + 0.02 csys = 0.28 CPU) Result: PASS

    =========================================

    So the good news is that Moose::Object shows up there. does shows up too!!

      So to close the loop... I finally got the program to work but the solution is a bit uncouth.

      I am able to do a require on all the plugins that I need.

      It's a fix for now but I would really like Class::MOP to do the trick. Just makes the program more malleable and maintainable, Not sure why it would not load a module when require does it perfectly well.....

        Similar problem here. I'm missing 'new' in my new Moose class. Unfortunately in my case require 'Moose::Object.pm' does not work:

        Can't locate Moose::Object.pm in @INC (@INC contains: ... c:/xampp/perl/site/lib c:/xampp/perl/lib .)

        Any other ideas?

        Without the require I get:
        Wolfgang 14:07:08 /cygdrive/d/projekte/superclix/Bender/trunk $perl script/test.pl D:/projekte/superclix/dmklib/trunk/lib D:/projekte/superclix/Bender/trunk/lib c:/xampp/perl/site/lib c:/xampp/perl/lib . Can't locate object method "new" via package "Bender::Util::Check" (pe +rhaps you forgot to load "Bender::Util::Check"?) at script/t est.pl line 6.
        The offending code looks like this:
        BEGIN{ print join("\n",@INC,''); } use Bender::Util::Check; my $check=new Bender::Util::Check();
        Wolfgang