1 package MojoFacets::Import::CouchDB;
9 use Data::Dump qw(dump);
13 __PACKAGE__->attr('path');
14 __PACKAGE__->attr('full_path');
17 my ($flat,$data,$prefix) = @_;
18 if ( ref $data eq '' ) {
19 push @{ $$flat->{$prefix} }, $data;
20 } elsif ( ref $data eq 'HASH' ) {
21 foreach my $key ( keys %$data ) {
22 my $full_prefix = $prefix ? $prefix . '.' : '';
24 flatten( $flat, $data->{$key}, $full_prefix );
26 } elsif ( ref $data eq 'ARRAY' ) {
27 foreach my $el ( @$data ) {
28 flatten( $flat, $el, $prefix );
30 } elsif ( ref $data eq 'Mojo::JSON::_Bool' ) {
31 push @{ $$flat->{$prefix} }, $data;
33 die "unsupported ",ref($data)," from ",dump($data);
40 my $path = $self->path;
42 my $url = read_file $self->full_path;
45 warn "# CouchDB URL: $url";
47 my $json = Mojo::Client->new->get( "$url/_all_docs?include_docs=true" )->res->json;
51 if ( ref $json->{rows} eq 'ARRAY' ) {
52 foreach my $doc ( @{$json->{rows}} ) {
53 next if $doc->{_id} =~ m{^_design/};
55 flatten( \$flat, $doc->{doc}, '' );
56 push @{ $data->{items} }, $flat;