Commit | Line | Data |
67769de0 |
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; |