cleaner inflation interface
[dbsrgits/DBIx-Data-Store-old.git] / lib / DBIx / Data / Store / SimpleInflator.pm
CommitLineData
67769de0 1package DBIx::Data::Store::SimpleInflator;
2
3## thunking between the store representation and the set representation
4#
5# _inflate is raw data -> final repr
6# _deflate is final repr -> raw data
7# _merge takes final repr + raw data and updates the repr
8# (this is used for pk-generated values and later lazy loading)
9#
10# _deflate_spec is attributes of final repr -> raw data
11# _merge_spec is final repr + extra attributes and update repr
12
13use Moose;
14use Method::Signatures::Simple;
15
16has class => (is => 'ro', predicate => '_has_class' );
17
18method inflate($raw) {
19 bless($raw, $self->class) if $self->_has_class;
20 $raw
21}
22
23method deflate($obj) {
24 +{ %$obj }
25}
26
27method merge ($obj, $raw) {
28 @{$obj}{keys %$raw} = values %$raw;
29 $obj
30}
31
32method refresh ($obj, $raw) {
33 # if $obj has been changed but not flushed we'd destroy data doing
34 # a blind merge - but if $obj has change tracking of some sort then
35 # we -could- do something safely, so this method exists to be mangled
36 # by subclasses
37 $obj
38}
39
40method deflate_spec ($spec) {
41 $spec
42}
43
44method merge_spec ($obj, $spec) {
45 @{$obj}{keys %$spec} = values %$spec;
46 $obj
47}
48
49__PACKAGE__->meta->make_immutable;
50
511;