cleaner inflation interface
[dbsrgits/DBIx-Data-Store-old.git] / lib / DBIx / Data / Store / SimpleInflator.pm
1 package 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
13 use Moose;
14 use Method::Signatures::Simple;
15
16 has class => (is => 'ro', predicate => '_has_class' );
17
18 method inflate($raw) {
19   bless($raw, $self->class) if $self->_has_class;
20   $raw
21 }
22
23 method deflate($obj) {
24   +{ %$obj }
25 }
26
27 method merge ($obj, $raw) {
28   @{$obj}{keys %$raw} = values %$raw;
29   $obj
30 }
31
32 method 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
40 method deflate_spec ($spec) {
41   $spec
42 }
43
44 method merge_spec ($obj, $spec) {
45   @{$obj}{keys %$spec} = values %$spec;
46   $obj
47 }
48
49 __PACKAGE__->meta->make_immutable;
50
51 1;