2009-03-07 15 views
6

ho messo insieme un po 'di banco di prova per dimostrare il mio problema:Come mai MooseX :: Storage sembra non seguire i tratti degli attributi di alcuni oggetti?

package P1; 
use Moose; 
use MooseX::Storage; 
with Storage; 

has 'blah' => (
    is => 'rw', 
); 

package P2; 
use Moose; 
use MooseX::Storage; 
with Storage; 

has 'lol' => (
    is => 'rw', 
    traits => ['DoNotSerialize'] 
); 

package P3; 
use Moose; 
extends 'P2'; 

has 'magic' => (
    is => 'rw', 
); 

package Test; 
my $obj = P3->new(
    magic => 'This ok!', 
    lol => sub { 'weee' } 
); 

my $stored = P1->new(blah => $obj); 

use Data::Dumper; print Dumper ($stored->pack); 

mi si aspetterebbe questo per stampare l'oggetto, ma non il 'lol' attributo nel pacchetto P2 - Tuttavia, posso ancora vedere questo nel risultato di $stored->pack

$VAR1 = { 
      '__CLASS__' => 'P1', 
      'blah' => bless({ 
          'magic' => 'This ok!', 
          'lol' => sub { "DUMMY" } 
          }, 'P3') 
     }; 

Sto usando MooseX :: bagagli sbagliato, o Ti sembra comportamento buggy?

+2

So che questo è vecchio, ma in realtà non sembra essere un bug. Come sottolinea "draegtun", mancano le informazioni sul tipo in modo che l'attributo 'blah' non venga effettivamente serializzato da MooseX :: Storage. Se fosse serializzato, non vedresti il ​​'benedire', ma vedrai invece la chiave '__CLASS__'. MooseX :: Storage fa la maggior parte del suo collasso in base al vincolo di tipo fornito nell'attributo, senza che sia lasciato a indovinare. –

risposta

1

Si può fare 'blah' un ISA di P3 ....

has 'blah' => (
    is => 'rw', 
    isa => 'P3', 
); 

e ora Dumper ($ ad accumulo> pack) mostra questo ....

$VAR1 = { 
     '__CLASS__' => 'P1', 
     'blah' => { 
        '__CLASS__' => 'P3', 
        'magic' => 'This ok!' 
       } 
}; 

che sembra la serializzazione corretta per questo oggetto Moose?

8

Sì, sembra un bug. Puoi trasformare questo in un test che utilizza Test :: Altro e inviarlo alla coda RT e qualcuno (probabilmente me) lo aggiusterà.

Si noti che se si esegue il dump $ obj-> store si vede che il tratto è applicato correttamente all'attributo diretto ma sembra che si stia perdendo durante il processo di ereditarietà.

È possibile segnalare i bug contro MooseX :: bagagli in RT

+0

Si prega di fornire un link al luogo per inviare questo? Grazie! – Ether

Problemi correlati