add importing support to idiotbox
[catagits/App-IdiotBox.git] / lib / App / IdiotBox / DataSet.pm
CommitLineData
265c2b91 1package App::IdiotBox::DataSet;
2
3use strict;
4use warnings FATAL => 'all';
5use Scalar::Util qw(blessed);
6
7use base qw(DBIx::Data::Collection::Set);
8
9sub _inflate {
10 my ($self, $raw) = @_;
11 my %new;
12 foreach my $k (keys %$raw) {
13 my @parts = split /\./, $k;
14 my $final = pop @parts;
15 @parts or ($new{$k} = $raw->{$k}, next);
16 my $targ = \%new;
17 $targ = $targ->{$_}||={} for @parts;
18 $targ->{$final} = $raw->{$k};
19 }
20 $self->_class->{inflate}->($self, \%new);
21}
22
23sub _deflate {
24 my ($self, $obj) = @_;
ebba317f 25 my $fat_raw = $self->_class->{deflate}->($self, $obj);
26 $self->_splat($fat_raw)
265c2b91 27}
28
ebba317f 29sub _splat {
30 my ($self, $fat) = @_;
31 my %raw;
32 foreach my $key (keys %$fat) {
33 my $v = $fat->{$key};
34 $v = { %$v } if blessed($v);
35 if (ref($v) eq 'HASH') {
36 #my $splat = $self->_splat($v);
37 my $splat = $v;
38 @raw{map "${key}.$_", keys %$splat} = values %$splat;
39 } else {
40 $raw{$key} = $v;
41 }
42 }
43 \%raw
44}
45
46sub _merge {
47 my ($self, $new, $to_merge) = @_;
48#require Carp; warn Carp::longmess; warn $new; warn $to_merge;
49 @{$new}{keys %$to_merge} = values %$to_merge;
50 return
51}
265c2b91 52
531;