[Catalyst] YA CRUD module
David Schmidt
davewood at gmx.at
Tue Dec 6 21:41:35 GMT 2011
I added quite some tests and generally see good progress.
However ... I just tried the LoadableClass thingy.
the error message before i installed MooseX::Types::LoadableClass was
# Failed test 'use TestApp;'
# at t/01_basic.t line 9.
# Tried to use 'TestApp'.
# Error: Couldn't instantiate component
"TestApp::Controller::Resource::Artist", "Could not find a class for
trait: Form at /usr/local/share/perl/5.10.1/CatalystX/Component/Traits.pm
line 145"Compilation failed in require at (eval 8) line 2.
# BEGIN failed--compilation aborted at (eval 8) line 2.
didnt really make sense to me
after installing MooseX::Types::LoadableClass
the error changed to
# Failed test 'use TestApp;'
# at t/01_basic.t line 9.
# Tried to use 'TestApp'.
# Error: Couldn't instantiate component
"TestApp::Controller::Resource::Artist", "Attribute (form_class) does
not pass the type constraint because: Validation failed for
'MooseX::Types::LoadableClass::LoadableClass' with value undef at
/usr/local/lib/perl/5.10.1/Moose/Meta/Attribute.pm line 1131
# Moose::Meta::Attribute::_coerce_and_verify('Moose::Meta::Attribute=HASH(0xb5b9960)',
'Form::Resource::Artist',
'Moose::Meta::Class::__ANON__::SERIAL::11=HASH(0xb592450)') called at
/usr/local/lib/perl/5.10.1/Moose/Meta/Attribute.pm line 491
# Moose::Meta::Attribute::initialize_instance_slot('Moose::Meta::Attribute=HASH(0xb5b9960)',
'Moose::Meta::Instance=HASH(0xb57c9c0)',
'Moose::Meta::Class::__ANON__::SERIAL::11=HASH(0xb592450)',
'HASH(0xb54e818)') called at
/usr/local/lib/perl/5.10.1/Class/MOP/Class.pm line 524
# Class::MOP::Class::_construct_instance('Moose::Meta::Class::__ANON__::SERIAL::5=HASH(0xb59ba50)',
'HASH(0xb54e818)') called at
/usr/local/lib/perl/5.10.1/Class/MOP/Class.pm line 497
# Class::MOP::Class::new_object('Moose::Meta::Class::__ANON__::SERIAL::5=HASH(0xb59ba50)',
'HASH(0xb54e818)') called at
/usr/local/lib/perl/5.10.1/Moose/Meta/Class.pm line 269
# Moose::Meta::Class::new_object('Moose::Meta::Class::__ANON__::SERIAL::5=HASH(0xb59ba50)',
'HASH(0xb54e818)') called at
/usr/local/lib/perl/5.10.1/Moose/Object.pm line 28
# Moose::Object::new('Moose::Meta::Class::__ANON__::SERIAL::11',
'TestApp', 'HASH(0xb11d888)') called at constructor
CatalystX::Resource::Controller::Resource::new (defined at
/home/david/CatalystX-TraitFor-Controller-Resource/lib/CatalystX/Resource/Controller/Resource.pm
line 343) line 4
# CatalystX::Resource::Controller::Resource::new('Moose::Meta::Class::__ANON__::SERIAL::11',
'TestApp', 'HASH(0xb11d888)') called at
/usr/local/share/perl/5.10.1/MooseX/Traits/Pluggable.pm line 139
# MooseX::Traits::Pluggable::_build_instance_with_traits('TestApp::Controller::Resource::Artist',
'TestApp::Controller::Resource::Artist', 'TestApp') called at
/usr/local/share/perl/5.10.1/MooseX/Traits/Pluggable.pm line 97
# MooseX::Traits::Pluggable::new_with_traits('TestApp::Controller::Resource::Artist',
'TestApp', 'HASH(0xb53c890)') called at
/usr/local/share/perl/5.10.1/CatalystX/Component/Traits.pm line 145
# CatalystX::Component::Traits::COMPONENT('TestApp::Controller::Resource::Artist',
'TestApp', 'HASH(0xacb6948)') called at
/usr/local/share/perl/5.10.1/Catalyst.pm line 2525
# eval {...} called at /usr/local/share/perl/5.10.1/Catalyst.pm line 2525
# Catalyst::setup_component('TestApp',
'TestApp::Controller::Resource::Artist') called at
/usr/local/share/perl/5.10.1/CatalystX/InjectComponent.pm line 152
# CatalystX::InjectComponent::_setup_component('CatalystX::InjectComponent',
'TestApp', 'TestApp::Controller::Resource::Artist') called at
/usr/local/share/perl/5.10.1/CatalystX/InjectComponent.pm line 142
# CatalystX::InjectComponent::inject('CatalystX::InjectComponent',
'into', 'TestApp', 'component',
'CatalystX::Resource::Controller::Resource', 'as',
'Controller::Resource::Artist') called at
/home/david/CatalystX-TraitFor-Controller-Resource/lib/CatalystX/Resource.pm
line 12
# Class::MOP::Class:::after('TestApp') called at
/usr/local/lib/perl/5.10.1/Class/MOP/Method/Wrapped.pm line 63
# Class::MOP::Method::Wrapped::__ANON__('TestApp') called at
/usr/local/lib/perl/5.10.1/Class/MOP/Method/Wrapped.pm line 91
# TestApp::setup_components('TestApp') called at
/usr/local/share/perl/5.10.1/Catalyst.pm line 1179
# Catalyst::setup('TestApp') called at
/home/david/CatalystX-TraitFor-Controller-Resource/t/lib/TestApp.pm
line 65
# require TestApp.pm called at (eval 8) line 2
# main::BEGIN() called at
/home/david/CatalystX-TraitFor-Controller-Resource/t/lib/TestApp.pm
line 0
# eval {...} called at
/home/david/CatalystX-TraitFor-Controller-Resource/t/lib/TestApp.pm
line 0
# eval 'package main;
# use TestApp @{$args[0]};
# 1;
#
# ;' called at /usr/local/share/perl/5.10.1/Test/More.pm line 885
# Test::More::_eval('package main;\x{a}use TestApp
@{$args[0]};\x{a}1;\x{a}', 'ARRAY(0xa01a5a0)') called at
/usr/local/share/perl/5.10.1/Test/More.pm line 860
# Test::More::use_ok('TestApp') called at t/01_basic.t line 9
# main::BEGIN() called at
/home/david/CatalystX-TraitFor-Controller-Resource/t/lib/TestApp.pm
line 0
# eval {...} called at
/home/david/CatalystX-TraitFor-Controller-Resource/t/lib/TestApp.pm
line 0"Compilation failed in require at (eval 8) line 2.
# BEGIN failed--compilation aborted at (eval 8) line 2.
On 5 December 2011 16:04, David Schmidt <davewood at gmx.at> wrote:
> I updated my code so it does pretty much what CatalystX::SimpleLogin does.
> Namely to inject a Controller then applying or removing traits.
> Unlike SimpleLogin I want to be able to inject many Controllers.
>
> here is what I came up with:
>
> 1 use Catalyst qw/+CatalystX::Resource/;
> 2
> 3 __PACKAGE__->config(
> 4 CatalystX::Resource => {
> 5 controllers => {
> 6 Artist => {
> 7 resultset_key => 'artists_rs',
> 8 resources_key => 'artists',
> 9 resource_key => 'artist',
> 10 model => 'DB:Artists',
> 11 traits => ['-Delete'],
> 12 },
> 13 Song => {
> 14 parent_key => 'artist',
> 15 parents_accessor => 'songs',
> 16 resources_key => 'songs',
> 17 resource_key => 'song',
> 18 model => 'DB::Songs',
> 19 },
> 20 },
> 21 },
> 22 );
> 23
> 24 after 'setup_components' => sub {
> 25 my $class = shift;
> 26 my $controllers
> 27 = $class->config->{'CatalystX::Resource'}{'controllers'};
> 28 while (my ($controller, $config) = each(%$controllers)) {
> 29 CatalystX::InjectComponent->inject(
> 30 into => $class,
> 31 component => 'CatalystX::Resource::Controller::Resource',
> 32 as => 'Controller::Resource::' . $controller,
> 33 );
> 34 }
> 35 };
>
> I wonder if it works. will test it when i have the time.
>
> On 5 December 2011 12:51, David Schmidt <davewood at gmx.at> wrote:
>> Here is a simple testcase of what I did. Once i noticed that i
>> required a method defined in the same role it made sense.
>>
>> #!/usr/bin/env perl
>>
>> use strict;
>> use warnings;
>> use Test::More;
>>
>> {
>> package MyRole;
>> use Moose::Role;
>>
>> requires 'a';
>> has a => (is => 'rw');
>> }
>>
>> {
>> package MyClass;
>> use Moose;
>> with 'MyRole';
>> }
>>
>> my $foo = MyClass->new({ a => 'foo' });
>> can_ok ($foo, 'a');
>>
>> done_testing;
>>
>>
>> 'MyRole' requires the method 'a' to be implemented by 'MyClass' at
>> /usr/local/lib/perl/5.10.1/Moose/Meta/Role/Application.pm line 53
>> Moose::Meta::Role::Application::apply('Moose::Meta::Role::Application::ToClass=HASH(0x9dc5a78)',
>> 'Moose::Meta::Role=HASH(0x9dc55e8)',
>> 'Moose::Meta::Class=HASH(0x9ce8170)') called at
>> /usr/local/lib/perl/5.10.1/Moose/Meta/Role/Application/ToClass.pm line
>> 33
>> Moose::Meta::Role::Application::ToClass::apply('Moose::Meta::Role::Application::ToClass=HASH(0x9dc5a78)',
>> 'Moose::Meta::Role=HASH(0x9dc55e8)',
>> 'Moose::Meta::Class=HASH(0x9ce8170)', 'HASH(0x9c817c8)') called at
>> /usr/local/lib/perl/5.10.1/Moose/Meta/Role.pm line 482
>> Moose::Meta::Role::apply('Moose::Meta::Role=HASH(0x9dc55e8)',
>> 'Moose::Meta::Class=HASH(0x9ce8170)') called at
>> /usr/local/lib/perl/5.10.1/Moose/Util.pm line 154
>> Moose::Util::_apply_all_roles('Moose::Meta::Class=HASH(0x9ce8170)',
>> undef, 'MyRole') called at /usr/local/lib/perl/5.10.1/Moose/Util.pm
>> line 93
>> Moose::Util::apply_all_roles('Moose::Meta::Class=HASH(0x9ce8170)',
>> 'MyRole') called at /usr/local/lib/perl/5.10.1/Moose.pm line 65
>> Moose::with('Moose::Meta::Class=HASH(0x9ce8170)', 'MyRole')
>> called at /usr/local/lib/perl/5.10.1/Moose/Exporter.pm line 356
>> Moose::with('MyRole') called at ./test.pl line 18
>>
>>
>>
>> On 5 December 2011 11:58, Tomas Doran <bobtfish at bobtfish.net> wrote:
>>>
>>> On 4 Dec 2011, at 23:46, David Schmidt wrote:
>>>
>>>> just thought i'll keep you up to day so you dont waste time trying to
>>>> help with a problem i already solved.
>>>>
>>>> Turns out the error cause was in one of the roles. It required a
>>>> method declared in the same role.
>>>
>>>
>>> This has to be a Moose bug in some way.
>>>
>>> Moose should be able to complain that you are requiring a method you've
>>> already provided, and/or it shouldn't fail.
>>>
>>> Any chance of a small(ish) test case for this one?
>>>
>>>
>>> Cheers
>>> t0m
>>>
>>>
>>> _______________________________________________
>>> List: Catalyst at lists.scsys.co.uk
>>> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
>>> Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
>>> Dev site: http://dev.catalyst.perl.org/
More information about the Catalyst
mailing list