X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FData%2FCollection%2FSet.pm;fp=lib%2FDBIx%2FData%2FCollection%2FSet.pm;h=384dc7992777673c3452f2b1b9e5bf4d8c90a531;hb=67769de04c5865b6ff74bfc7aeb73c6517bec76f;hp=3e965bacc7423da83c21fbbdf975e1b304120d07;hpb=94de1f7bf034864f5ae6b763b29a6b12cbd093d7;p=dbsrgits%2FDBIx-Data-Store-old.git diff --git a/lib/DBIx/Data/Collection/Set.pm b/lib/DBIx/Data/Collection/Set.pm index 3e965ba..384dc79 100644 --- a/lib/DBIx/Data/Collection/Set.pm +++ b/lib/DBIx/Data/Collection/Set.pm @@ -6,6 +6,24 @@ use Data::Perl::Stream::Array; use Data::Perl::Collection::Set; use Scalar::Util qw(weaken refaddr); +has _inflator => ( + is => 'ro', + handles => { + _inflate => 'inflate', + _deflate => 'deflate', + _merge => 'merge', + _refresh => 'refresh', + _deflate_spec => 'deflate_spec', + _merge_spec => 'merge_spec', + }, + default => method { + require DBIx::Data::Store::SimpleInflator; + my $args = {}; + $args->{class} = $self->_class if $self->_has_class; + DBIx::Data::Store::SimpleInflator->new($args) + }, +); + has _store => (is => 'ro', required => 1, init_arg => 'store'); has _class => (is => 'ro', predicate => '_has_class', init_arg => 'class'); @@ -140,46 +158,6 @@ method _setup_observation_of ($other) { return } -## thunking between the store representation and the set representation -# -# _inflate is raw data -> final repr -# _deflate is final repr -> raw data -# _merge takes final repr + raw data and updates the repr -# (this is used for pk-generated values and later lazy loading) -# -# _deflate_spec is attributes of final repr -> raw data -# _merge_spec is final repr + extra attributes and update repr - -method _inflate ($raw) { - bless($raw, $self->_class) if $self->_has_class; - $raw -} - -method _deflate ($obj) { - +{ %$obj } -} - -method _merge ($obj, $raw) { - @{$obj}{keys %$raw} = values %$raw; - $obj -} - -method _refresh ($obj, $raw) { - # if $obj has been changed but not flushed we'd destroy data doing - # a blind merge - but if $obj has change tracking of some sort then - # we -could- do something safely, so this method exists to be mangled - # by subclasses - $obj -} - -method _deflate_spec ($spec) { - $spec -} - -method _merge_spec ($obj, $spec) { - @{$obj}{keys %$spec} = values %$spec; - $obj -} ## methods to get ids