[Rio-pm] Extendendo um resultset

Donato Azevedo donatoaz em gmail.com
Domingo Fevereiro 5 04:47:56 PST 2012


Olá pessoal,

Eu comecei a fazer um app catalyst+dbix usando o Class::Workflow para fazer
um sistema meio abstrato de controle de processos para a minha empresa.

Eu já fiz uma parte do esqueleto da aplicação mas estou sofrendo com duas
coisas ainda e que tem a ver com extensão de resultsets do DBIx::Class...

Eu não sei basicamente o que tem de ser feito então não sei se vou
conseguir descrever exatamente o meu problema, mas aí vai uma tentativa:

Eu tenho uma tabela de transições no banco e um resultset
MyApp::Schema::Result::Workflow::Transition representando-a.

Quando eu aplico uma transição a uma entidade stateful (ou seja, que tem o
class::workflow por trás representando seus estados, histórico, etc) eu
chamo uma sub pertencente à classe de transição dela:

$transition->$action( $instance, @args ); # onde action, pode ser, por
exemplo: REASSIGN

que chama um método em MyApp::Schema::Result::Workflow::Transition

mas como eu quero que o sistema seja abstrato, e permita que eu crie
classes de transição relativas à entidade em questão, eu queria que o
método fosse chamado em uma subclasse
de MyApp::Schema::Result::Workflow::Transition, por exemplo,
em MyApp::Schema::Result::Workflow::Transition::Ticket,
ou MyApp::Schema::Result::Workflow::Transition::Order, etc...

Eu imagino que o que eu tenho de fazer é: no construtor da minha
classe MyApp::Schema::Result::Workflow::Transition eu tenho sei se o
sujeito está criando um Ticket ou um Order, e daí eu seto o resultset_class
na classe certa...

daí eu fiz:

after 'new' => sub { my $self = shift; my $class = __PACKAGE__ . "::" .
$self->class; bless ( $self, $class ) };

mas estou tendo o erro:

Can't locate object method "REASSIGN" via package
"MyApp::Model::DB::Workflow::Transition::Ticket"

Eu defini o método em MyApp::Schema::Result::Workflow::Transition::Ticket,
e dei o rebless em MyApp::Schema::Result::Workflow::Transition::Ticket, não
entendo porque ele está dizendo que o package é MyApp::DB::Model....

Abraços!!
Donato Azevedo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20120205/951231ba/attachment.html>


Mais detalhes sobre a lista de discussão Rio-pm