Commit | Line | Data |
265c2b91 |
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) = @_; |
ebba317f |
25 | my $fat_raw = $self->_class->{deflate}->($self, $obj); |
26 | $self->_splat($fat_raw) |
265c2b91 |
27 | } |
28 | |
ebba317f |
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 | } |
265c2b91 |
52 | |
53 | 1; |