[Catalyst] YA CRUD module
David Schmidt
davewood at gmx.at
Sat Dec 10 11:34:30 GMT 2011
prove -l t
t/01_basic.t ...................... ok
t/02_crud.t ....................... ok
t/03_redirect_mode_list.t ......... ok
t/04_redirect_mode_show.t ......... ok
t/05_redirect_mode_show_parent.t .. ok
t/06_sortable.t ................... ok
All tests successful.
Files=6, Tests=232, 18 wallclock secs ( 0.02 usr 0.21 sys + 10.34
cusr 6.65 csys = 17.22 CPU)
Result: PASS
time for a devel release :)
https://github.com/davewood/CatalystX-TraitFor-Controller-Resource
documentation needs some cleaning up though
On 6 December 2011 22:41, David Schmidt <davewood at gmx.at> wrote:
> 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