This is an automated email from the git hooks/post-receive script.

js pushed a commit to branch master
in repository libcatmandu-perl.

commit 6e95b2ca67241f0f3b0d650f2560941f1ed3e239
Author: Nicolas Steenlant <nicolas.steenl...@ugent.be>
Date:   Thu Dec 10 14:55:11 2015 +0100

    make data command redundant
---
 lib/Catmandu/CLI.pm                            |  1 +
 lib/Catmandu/Cmd.pm                            | 33 ++++++++++
 lib/Catmandu/Cmd/convert.pm                    | 37 +++++------
 lib/Catmandu/Cmd/copy.pm                       | 86 ++++++++++++++++++++++++++
 lib/Catmandu/Cmd/count.pm                      | 25 +++-----
 lib/Catmandu/Cmd/data.pm                       | 20 ++++++
 lib/Catmandu/Cmd/delete.pm                     | 28 +++------
 lib/Catmandu/Cmd/export.pm                     | 52 +++++++---------
 lib/Catmandu/Cmd/help.pm                       |  6 +-
 lib/Catmandu/Cmd/import.pm                     | 43 ++++++-------
 lib/Catmandu/Cmd/move.pm                       | 84 -------------------------
 lib/Catmandu/Env.pm                            |  7 ++-
 lib/Catmandu/Exporter/CSV.pm                   |  4 +-
 lib/Catmandu/Fixable.pm                        |  4 +-
 t/{Catmandu-Cmd-move.t => Catmandu-Cmd-copy.t} |  8 +--
 15 files changed, 232 insertions(+), 206 deletions(-)

diff --git a/lib/Catmandu/CLI.pm b/lib/Catmandu/CLI.pm
index e8f3378..1c76b48 100644
--- a/lib/Catmandu/CLI.pm
+++ b/lib/Catmandu/CLI.pm
@@ -17,6 +17,7 @@ sub deleted_commands {
         Catmandu::Cmd::fix_info
         Catmandu::Cmd::importer_info
         Catmandu::Cmd::module_info
+        Catmandu::Cmd::move
         Catmandu::Cmd::store_info
     )];
 }
diff --git a/lib/Catmandu/Cmd.pm b/lib/Catmandu/Cmd.pm
index e29f149..243a1a7 100644
--- a/lib/Catmandu/Cmd.pm
+++ b/lib/Catmandu/Cmd.pm
@@ -54,6 +54,39 @@ sub description {
 sub command_opt_spec {}
 sub command {}
 
+# helpers
+sub _parse_options {
+    my ($self, $args) = @_;
+
+    my $a = my $from_args = [];
+    my $o = my $from_opts = {};
+    my $into_args = [];
+    my $into_opts = {};
+
+    for (my $i = 0; $i < @$args; $i++) {
+        my $arg = $args->[$i];
+        if ($arg eq 'to') {
+            $a = $into_args;
+            $o = $into_opts;
+        } elsif ($arg =~ s/^-+//) {
+            $arg =~ s/-/_/g;
+            if (exists $o->{$arg}) {
+                if (is_array_ref($o->{$arg})) {
+                    push @{$o->{$arg}}, $args->[++$i];
+                } else {
+                    $o->{$arg} = [$o->{$arg}, $args->[++$i]];
+                }
+            } else {
+                $o->{$arg} = $args->[++$i];
+            }
+        } else {
+            push @$a, $arg;
+        }
+    }
+
+    return $from_args, $from_opts, $into_args, $into_opts;
+}
+
 1;
 
 __END__
diff --git a/lib/Catmandu/Cmd/convert.pm b/lib/Catmandu/Cmd/convert.pm
index 09abada..71a982a 100644
--- a/lib/Catmandu/Cmd/convert.pm
+++ b/lib/Catmandu/Cmd/convert.pm
@@ -6,44 +6,35 @@ our $VERSION = '0.9505';
 
 use parent 'Catmandu::Cmd';
 use Catmandu;
-use Catmandu::Fix;
 use namespace::clean;
 
 sub command_opt_spec {
     (
         [ "verbose|v", "" ],
+        [ "fix=s@", "" ],
+        [ "start=i", "" ],
+        [ "total=i", "" ],
     );
 }
 
 sub command {
     my ($self, $opts, $args) = @_;
 
-    my $a = my $from_args = [];
-    my $o = my $from_opts = {};
-    my $into_args = [];
-    my $into_opts = {};
-
-    for (my $i = 0; $i < @$args; $i++) {
-        my $arg = $args->[$i];
-        if ($arg eq 'to') {
-            $a = $into_args;
-            $o = $into_opts;
-        } elsif ($arg =~ s/^-+//) {
-            $arg =~ s/-/_/g;
-            if ($arg eq 'fix') {
-                push @{$o->{$arg} ||= []}, $args->[++$i];
-            } else {
-                $o->{$arg} = $args->[++$i];
-            }
-        } else {
-            push @$a, $arg;
-        }
-    }
+    my ($from_args, $from_opts, $into_args, $into_opts) = 
$self->_parse_options($args);
 
     my $from = Catmandu->importer($from_args->[0], $from_opts);
     my $into = Catmandu->exporter($into_args->[0], $into_opts);
 
-    $from = $from->benchmark if $opts->verbose;
+    if ($opts->start // $opts->total) {
+        $from = $from->slice($opts->start, $opts->total);
+    }
+    if ($opts->fix) {
+        $from = Catmandu->fixer($opts->fix)->fix($from);
+    }
+    if ($opts->verbose) {
+        $from = $from->benchmark;
+    }
+
     my $n = $into->add_many($from);
     $into->commit;
     if ($opts->verbose) {
diff --git a/lib/Catmandu/Cmd/copy.pm b/lib/Catmandu/Cmd/copy.pm
new file mode 100644
index 0000000..27a56c0
--- /dev/null
+++ b/lib/Catmandu/Cmd/copy.pm
@@ -0,0 +1,86 @@
+package Catmandu::Cmd::move;
+
+use Catmandu::Sane;
+
+our $VERSION = '0.9505';
+
+use parent 'Catmandu::Cmd';
+use Catmandu;
+use namespace::clean;
+
+sub command_opt_spec {
+    (
+        [ "verbose|v", "" ],
+        [ "fix=s@", "" ],
+        [ "start=i", "" ],
+        [ "limit=i", "" ],
+        [ "total=i", "" ],
+        [ "cql-query|q=s", "" ],
+        [ "query=s", "" ],
+        [ "delete", "delete existing objects first" ],
+    );
+}
+
+sub command {
+    my ($self, $opts, $args) = @_;
+
+    my ($from_args, $from_opts, $into_args, $into_opts) = 
$self->_parse_options($args);
+
+    my $from_bag = delete $from_opts->{bag};
+    my $from = Catmandu->store($from_args->[0], $from_opts)->bag($from_bag);
+    my $into_bag = delete $into_opts->{bag};
+    my $into = Catmandu->store($into_args->[0], $into_opts)->bag($into_bag);
+
+    if ($opts->query // $opts->cql_query) {
+        $self->usage_error("Bag isn't searchable") unless 
$from->can('searcher');
+        $from = $from->searcher(
+            cql_query => $opts->cql_query,
+            query     => $opts->query,
+            start     => $opts->start,
+            total     => $opts->total,
+            limit     => $opts->limit,
+        );
+    } elsif ($opts->start // $opts->total) {
+        $from = $from->slice($opts->start, $opts->total);
+    }
+    if ($opts->fix) {
+        $from = Catmandu->fixer($opts->fix)->fix($from);
+    }
+    if ($opts->verbose) {
+        $from = $from->benchmark;
+    }
+
+    if ($opts->delete) {
+        $into->delete_all;
+        $into->commit;
+    }
+
+    my $n = $into->add_many($from);
+    $into->commit;
+    if ($opts->verbose) {
+        say STDERR $n ==1 ? "copied 1 object" : "copied $n objects";
+        say STDERR "done";
+    }
+}
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+Catmandu::Cmd::copy - copy objects to another store
+
+=head1 EXAMPLES
+
+  catmandu copy <STORE> <OPTIONS> to <STORE> <OPTIONS>
+
+  catmandu copy MongoDB --database_name items --bag book to \
+                ElasticSearch --index_name items --bag book
+
+  catmandu help store MongoDB
+  catmandu help store ElasticSearch
+
+=cut
diff --git a/lib/Catmandu/Cmd/count.pm b/lib/Catmandu/Cmd/count.pm
index e41d181..5b2eb3f 100644
--- a/lib/Catmandu/Cmd/count.pm
+++ b/lib/Catmandu/Cmd/count.pm
@@ -11,30 +11,25 @@ use namespace::clean;
 
 sub command_opt_spec {
     (
-        [ "query|q=s", "" ],
+        [ "cql-query|q=s", "" ],
+        [ "query=s", "" ],
     );
 }
 
 sub command {
     my ($self, $opts, $args) = @_;
 
-    my $from_args = [];
-    my $from_opts = {};
-
-    for (my $i = 0; $i < @$args; $i++) {
-        my $arg = $args->[$i];
-        if ($arg =~ s/^-+//) {
-            $arg =~ s/-/_/g;
-            $from_opts->{$arg} = $args->[++$i];
-        } else {
-            push @$from_args, $arg;
-        }
-    }
+    my ($from_args, $from_opts) = $self->_parse_options($args);
 
     my $from_bag = delete $from_opts->{bag};
     my $from = Catmandu->store($from_args->[0], $from_opts)->bag($from_bag);
-    if (defined $opts->query) {
-        $from = $from->searcher(query => $opts->query);
+
+    if ($opts->query // $opts->cql_query) {
+        $self->usage_error("Bag isn't searchable") unless 
$from->can('searcher');
+        $from = $from->searcher(
+            cql_query => $opts->cql_query,
+            query     => $opts->query,
+        );
     }
 
     say $from->count;
diff --git a/lib/Catmandu/Cmd/data.pm b/lib/Catmandu/Cmd/data.pm
index 67b0b02..8e1caff 100644
--- a/lib/Catmandu/Cmd/data.pm
+++ b/lib/Catmandu/Cmd/data.pm
@@ -112,4 +112,24 @@ __END__
 
 Catmandu::Cmd::data - store, index, search, import, export or convert objects
 
+=head1 DEPRECIATION NOTICE
+
+This fix is deprecated, Please use these commands instead:
+
+=over 4
+
+=item L<Catmandu::Cmd::convert>
+
+=item L<Catmandu::Cmd::copy>
+
+=item L<Catmandu::Cmd::import>
+
+=item L<Catmandu::Cmd::export>
+
+=item L<Catmandu::Cmd::count>
+
+=item L<Catmandu::Cmd::delete>
+
+=back
+
 =cut
diff --git a/lib/Catmandu/Cmd/delete.pm b/lib/Catmandu/Cmd/delete.pm
index e25805c..536788a 100644
--- a/lib/Catmandu/Cmd/delete.pm
+++ b/lib/Catmandu/Cmd/delete.pm
@@ -6,44 +6,32 @@ our $VERSION = '0.9505';
 
 use parent 'Catmandu::Cmd';
 use Catmandu;
-use Catmandu::Fix;
 use namespace::clean;
 
 sub command_opt_spec {
     (
-        [ "query|q=s", "" ],
+        [ "cql-query|q=s", "" ],
+        [ "query=s", "" ],
     );
 }
 
 sub command {
     my ($self, $opts, $args) = @_;
 
-    my $from_args = [];
-    my $from_opts = {};
-
-    for (my $i = 0; $i < @$args; $i++) {
-        my $arg = $args->[$i];
-        if ($arg =~ s/^-+//) {
-            $arg =~ s/-/_/g;
-            $from_opts->{$arg} = $args->[++$i];
-        } else {
-            push @$from_args, $arg;
-        }
-    }
+    my ($from_args, $from_opts) = $self->_parse_options($args);
 
     my $from_bag = delete $from_opts->{bag};
     my $from = Catmandu->store($from_args->[0], $from_opts)->bag($from_bag);
-    if (defined $opts->query) {
-        $from->delete_by_query(query => $opts->query);
+    if ($opts->query // $opts->cql_query) {
+        $from->delete_by_query(
+            cql_query => $opts->cql_query,
+            query     => $opts->query,
+        );
     } else {
         $from->delete_all;
     }
 
     $from->commit;
-
-    unless ($from->count == 0) {
-        say STDERR "error: $from is not empty";
-    }
 }
 
 1;
diff --git a/lib/Catmandu/Cmd/export.pm b/lib/Catmandu/Cmd/export.pm
index ecd11e9..975f96b 100644
--- a/lib/Catmandu/Cmd/export.pm
+++ b/lib/Catmandu/Cmd/export.pm
@@ -6,52 +6,48 @@ our $VERSION = '0.9505';
 
 use parent 'Catmandu::Cmd';
 use Catmandu;
-use Catmandu::Fix;
 use namespace::clean;
 
 sub command_opt_spec {
     (
         [ "verbose|v", "" ],
-        [ "query|q=s", "" ],
+        [ "fix=s@", "" ],
+        [ "start=i", "" ],
         [ "limit=i", "" ],
+        [ "total=i", "" ],
+        [ "cql-query|q=s", "" ],
+        [ "query=s", "" ],
     );
 }
 
 sub command {
     my ($self, $opts, $args) = @_;
 
-    my $a = my $from_args = [];
-    my $o = my $from_opts = {};
-    my $into_args = [];
-    my $into_opts = {};
-
-    for (my $i = 0; $i < @$args; $i++) {
-        my $arg = $args->[$i];
-        if ($arg eq 'to') {
-            $a = $into_args;
-            $o = $into_opts;
-        } elsif ($arg =~ s/^-+//) {
-            $arg =~ s/-/_/g;
-            if ($arg eq 'fix') {
-                push @{$o->{$arg} ||= []}, $args->[++$i];
-            } else {
-                $o->{$arg} = $args->[++$i];
-            }
-        } else {
-            push @$a, $arg;
-        }
-    }
+    my ($from_args, $from_opts, $into_args, $into_opts) = 
$self->_parse_options($args);
 
     my $from_bag = delete $from_opts->{bag};
     my $from = Catmandu->store($from_args->[0], $from_opts)->bag($from_bag);
     my $into = Catmandu->exporter($into_args->[0], $into_opts);
-    if (defined $opts->query) {
-        $from = $from->searcher(query => $opts->query, total => $opts->limit);
-    } elsif (defined $opts->limit) {
-        $from = $from->take($opts->limit);
+
+    if ($opts->query // $opts->cql_query) {
+        $self->usage_error("Bag isn't searchable") unless 
$from->can('searcher');
+        $from = $from->searcher(
+            cql_query => $opts->cql_query,
+            query     => $opts->query,
+            start     => $opts->start,
+            total     => $opts->total,
+            limit     => $opts->limit,
+        );
+    } elsif ($opts->start // $opts->total) {
+        $from = $from->slice($opts->start, $opts->total);
+    }
+    if ($opts->fix) {
+        $from = Catmandu->fixer($opts->fix)->fix($from);
+    }
+    if ($opts->verbose) {
+        $from = $from->benchmark;
     }
 
-    $from = $from->benchmark if $opts->verbose;
     my $n = $into->add_many($from);
     $into->commit;
     if ($opts->verbose) {
diff --git a/lib/Catmandu/Cmd/help.pm b/lib/Catmandu/Cmd/help.pm
index 49949c8..59c4265 100644
--- a/lib/Catmandu/Cmd/help.pm
+++ b/lib/Catmandu/Cmd/help.pm
@@ -29,12 +29,12 @@ my %MODULES = (
         ],
     },
     Store => {
-        re => qr/^(store|move)$/i,
+        re => qr/^(store|copy)$/i,
         usage => [
             "catmandu import ... to %n [options]",
-            "catmandu move   ... to %n [options]",
+            "catmandu copy   ... to %n [options]",
             "catmandu export %n [options] ...",
-            "catmandu move   %n [options] ...",
+            "catmandu copy   %n [options] ...",
         ]
     },
     Fix => {
diff --git a/lib/Catmandu/Cmd/import.pm b/lib/Catmandu/Cmd/import.pm
index 09d9d5d..8bdb799 100644
--- a/lib/Catmandu/Cmd/import.pm
+++ b/lib/Catmandu/Cmd/import.pm
@@ -6,45 +6,42 @@ our $VERSION = '0.9505';
 
 use parent 'Catmandu::Cmd';
 use Catmandu;
-use Catmandu::Fix;
 use namespace::clean;
 
 sub command_opt_spec {
     (
         [ "verbose|v", "" ],
+        [ "fix=s@", "" ],
+        [ "start=i", "" ],
+        [ "total=i", "" ],
+        [ "delete", "delete existing objects first" ],
     );
 }
 
 sub command {
     my ($self, $opts, $args) = @_;
 
-    my $a = my $from_args = [];
-    my $o = my $from_opts = {};
-    my $into_args = [];
-    my $into_opts = {};
-
-    for (my $i = 0; $i < @$args; $i++) {
-        my $arg = $args->[$i];
-        if ($arg eq 'to') {
-            $a = $into_args;
-            $o = $into_opts;
-        } elsif ($arg =~ s/^-+//) {
-            $arg =~ s/-/_/g;
-            if ($arg eq 'fix') {
-                push @{$o->{$arg} ||= []}, $args->[++$i];
-            } else {
-                $o->{$arg} = $args->[++$i];
-            }
-        } else {
-            push @$a, $arg;
-        }
-    }
+    my ($from_args, $from_opts, $into_args, $into_opts) = 
$self->_parse_options($args);
 
     my $from = Catmandu->importer($from_args->[0], $from_opts);
     my $into_bag = delete $into_opts->{bag};
     my $into = Catmandu->store($into_args->[0], $into_opts)->bag($into_bag);
 
-    $from = $from->benchmark if $opts->verbose;
+    if ($opts->start // $opts->total) {
+        $from = $from->slice($opts->start, $opts->total);
+    }
+    if ($opts->fix) {
+        $from = Catmandu->fixer($opts->fix)->fix($from);
+    }
+    if ($opts->verbose) {
+        $from = $from->benchmark;
+    }
+
+    if ($opts->delete) {
+        $into->delete_all;
+        $into->commit;
+    }
+
     my $n = $into->add_many($from);
     $into->commit;
     if ($opts->verbose) {
diff --git a/lib/Catmandu/Cmd/move.pm b/lib/Catmandu/Cmd/move.pm
deleted file mode 100644
index 2f85249..0000000
--- a/lib/Catmandu/Cmd/move.pm
+++ /dev/null
@@ -1,84 +0,0 @@
-package Catmandu::Cmd::move;
-
-use Catmandu::Sane;
-
-our $VERSION = '0.9505';
-
-use parent 'Catmandu::Cmd';
-use Catmandu;
-use Catmandu::Fix;
-use namespace::clean;
-
-sub command_opt_spec {
-    (
-        [ "verbose|v", "" ],
-        [ "query|q=s", "" ],
-        [ "limit=i", "" ],
-    );
-}
-
-sub command {
-    my ($self, $opts, $args) = @_;
-
-    my $a = my $from_args = [];
-    my $o = my $from_opts = {};
-    my $into_args = [];
-    my $into_opts = {};
-
-    for (my $i = 0; $i < @$args; $i++) {
-        my $arg = $args->[$i];
-        if ($arg eq 'to') {
-            $a = $into_args;
-            $o = $into_opts;
-        } elsif ($arg =~ s/^-+//) {
-            $arg =~ s/-/_/g;
-            if ($arg eq 'fix') {
-                push @{$o->{$arg} ||= []}, $args->[++$i];
-            } else {
-                $o->{$arg} = $args->[++$i];
-            }
-        } else {
-            push @$a, $arg;
-        }
-    }
-
-    my $from_bag = delete $from_opts->{bag};
-    my $into_bag = delete $into_opts->{bag};
-    my $from = Catmandu->store($from_args->[0], $from_opts)->bag($from_bag);
-    my $into = Catmandu->store($into_args->[0], $into_opts)->bag($into_bag);
-    if (defined $opts->query) {
-        $from = $from->searcher(query => $opts->query, total => $opts->limit);
-    } elsif (defined $opts->limit) {
-        $from = $from->take($opts->limit);
-    }
-
-    $from = $from->benchmark if $opts->verbose;
-    my $n = $into->add_many($from);
-    $into->commit;
-    if ($opts->verbose) {
-        say STDERR $n ==1 ? "moved 1 object" : "moved $n objects";
-        say STDERR "done";
-    }
-}
-
-1;
-
-__END__
-
-=pod
-
-=head1 NAME
-
-Catmandu::Cmd::move - move objects to another store
-
-=head1 EXAMPLES
-
-  catmandu move <STORE> <OPTIONS> to <STORE> <OPTIONS>
-
-  catmandu move MongoDB --database_name items --bag book to \
-                ElasticSearch --index_name items --bag book
-
-  catmandu help store MongoDB
-  catmandu help store ElasticSearch
-  
-=cut
diff --git a/lib/Catmandu/Env.pm b/lib/Catmandu/Env.pm
index ec26078..35f5b75 100644
--- a/lib/Catmandu/Env.pm
+++ b/lib/Catmandu/Env.pm
@@ -141,10 +141,15 @@ sub store {
 
 sub fixer {
     my $self = shift;
-    if (ref $_[0]) {
+
+    if (is_array_ref($_[0])) {
         return Catmandu::Fix->new(fixes => $_[0]);
     }
 
+    if (ref($_[0])) {
+        return Catmandu::Fix->new(fixes => [$_[0]]);
+    }
+
     my $key = $_[0] || $self->default_fixer;
 
     my $fixers = $self->fixers;
diff --git a/lib/Catmandu/Exporter/CSV.pm b/lib/Catmandu/Exporter/CSV.pm
index c0b2f57..f732ee2 100644
--- a/lib/Catmandu/Exporter/CSV.pm
+++ b/lib/Catmandu/Exporter/CSV.pm
@@ -24,7 +24,7 @@ has fields => (
         $self->{fields} = _coerce_list($fields);
         if (ref $fields and ref $fields eq 'HASH') {
             $self->{header} = [
-                map { $fields->{$_} // $_ } @{$self->{fields}} 
+                map { $fields->{$_} // $_ } @{$self->{fields}}
             ];
         }
     },
@@ -43,7 +43,7 @@ sub _build_csv {
         binary => 1,
         eol => "\n",
         sep_char => $self->sep_char,
-        always_quote => $self->always_quote,        
+        always_quote => $self->always_quote,
         quote_char => $self->quote_char ? $self->quote_char : undef,
         escape_char => $self->escape_char ? $self->escape_char : undef,
     });
diff --git a/lib/Catmandu/Fixable.pm b/lib/Catmandu/Fixable.pm
index 6d4577c..0527240 100644
--- a/lib/Catmandu/Fixable.pm
+++ b/lib/Catmandu/Fixable.pm
@@ -12,9 +12,7 @@ use namespace::clean;
 has _fixer => (
     is => 'ro',
     init_arg => 'fix',
-    coerce => sub {
-        is_instance($_[0]) ? $_[0] : Catmandu->fixer($_[0]);
-    },
+    coerce => sub { Catmandu->fixer($_[0]) },
 );
 
 1;
diff --git a/t/Catmandu-Cmd-move.t b/t/Catmandu-Cmd-copy.t
similarity index 57%
rename from t/Catmandu-Cmd-move.t
rename to t/Catmandu-Cmd-copy.t
index 572bffd..fec9026 100644
--- a/t/Catmandu-Cmd-move.t
+++ b/t/Catmandu-Cmd-copy.t
@@ -8,16 +8,16 @@ use App::Cmd::Tester;
 
 my $pkg;
 BEGIN {
-    $pkg = 'Catmandu::Cmd::move';
+    $pkg = 'Catmandu::Cmd::copy';
     use_ok $pkg;
 }
 require_ok $pkg;
 
 use Catmandu::CLI;
 
-my $result = test_app(qq|Catmandu::CLI| => [ qw(move -v test to Hash) ]);
+my $result = test_app(qq|Catmandu::CLI| => [ qw(copy -v test to Hash) ]);
 
-like $result->stderr, qr/moved 4 objects/, 'moved 4 objects' ;
+like $result->stderr, qr/copied 4 objects/, 'copied 4 objects' ;
 is $result->error, undef, 'threw no exceptions' ;
 
-done_testing 4;
\ No newline at end of file
+done_testing;

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-perl/packages/libcatmandu-perl.git

_______________________________________________
Pkg-perl-cvs-commits mailing list
Pkg-perl-cvs-commits@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits

Reply via email to