X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FData%2FStore%2FSimpleInflator.pm;fp=lib%2FDBIx%2FData%2FStore%2FSimpleInflator.pm;h=645769d8229f40508dec262898f9551fcea88fdc;hb=67769de04c5865b6ff74bfc7aeb73c6517bec76f;hp=0000000000000000000000000000000000000000;hpb=94de1f7bf034864f5ae6b763b29a6b12cbd093d7;p=dbsrgits%2FDBIx-Data-Store-old.git diff --git a/lib/DBIx/Data/Store/SimpleInflator.pm b/lib/DBIx/Data/Store/SimpleInflator.pm new file mode 100644 index 0000000..645769d --- /dev/null +++ b/lib/DBIx/Data/Store/SimpleInflator.pm @@ -0,0 +1,51 @@ +package DBIx::Data::Store::SimpleInflator; + +## 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 + +use Moose; +use Method::Signatures::Simple; + +has class => (is => 'ro', predicate => '_has_class' ); + +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 +} + +__PACKAGE__->meta->make_immutable; + +1;