use MojoFacets::Import::File;
use MojoFacets::Import::HTMLTable;
use MojoFacets::Import::CSV;
+use MojoFacets::Import::CouchDB;
our $loaded;
our $filters;
} elsif ( -d $file && $file =~ m/\.html$/ ) {
$file =~ s/$data_dir\/*//;
push @files, $file;
- } elsif ( -f $file && $file =~ m/\.csv$/i ) {
- $file =~ s/$data_dir\/*//;
- push @files, $file;
- } elsif ( -f $file && $file =~ m/\.storable/i ) {
+ } elsif ( -f $file && $file =~ m/\.(csv|storabe|couchdb)$/i ) {
$file =~ s/$data_dir\/*//;
push @files, $file;
} else {
if ( -f $full_path ) {
if ( $full_path =~ m/.csv/i ) {
$data = MojoFacets::Import::CSV->new( full_path => $full_path )->data;
+ } elsif ( $full_path =~ m/.couchdb/i ) {
+ $data = MojoFacets::Import::CouchDB->new( full_path => $full_path )->data;
} elsif ( $full_path =~ m/.storable/ ) {
warn "open $full_path ", -s $full_path, " bytes";
open(my $pipe, "<", $full_path) || die $!;
--- /dev/null
+package MojoFacets::Import::CouchDB;
+
+use warnings;
+use strict;
+
+use base 'Mojo::Base';
+
+use File::Slurp;
+use Data::Dump qw(dump);
+use JSON;
+use Mojo::Client;
+
+__PACKAGE__->attr('path');
+__PACKAGE__->attr('full_path');
+
+sub data {
+ my $self = shift;
+
+ my $path = $self->path;
+
+ # we could use Mojo::JSON here, but it's too slow
+# $data = from_json read_file $path;
+ my $url = read_file $self->full_path;
+ $url =~ s{/\s*$}{}s;
+
+ warn "# CouchDB URL: $url";
+
+ my $json = Mojo::Client->new->get( "$url/_all_docs?include_docs=true" )->res->json;
+
+ my $data;
+
+ if ( ref $json->{rows} eq 'ARRAY' ) {
+ foreach my $doc ( @{$json->{rows}} ) {
+ push @{ $data->{items} }, $doc->{doc};
+ }
+ }
+
+ return $data;
+
+}
+
+1