0057d13cb8a0324dd1656d5d2855ecba1acf920f
[catagits/App-IdiotBox.git] / lib / App / IdiotBox / DataSet.pm
1 package App::IdiotBox::DataSet;
2
3 use strict;
4 use warnings FATAL => 'all';
5 use Scalar::Util qw(blessed);
6
7 use base qw(DBIx::Data::Collection::Set);
8
9 sub _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
23 sub _deflate {
24   my ($self, $obj) = @_;
25   my $fat_raw = $self->_class->{deflate}->($self, $obj);
26   $self->_splat($fat_raw)
27 }
28
29 sub _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
46 sub _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 }
52
53 1;