Elive

 view release on metacpan or  search on metacpan

script/elive_query  view on Meta::CPAN

sub _fetch_row_href {
    my $props = shift;
    my $derivable = shift;
    my $row = shift;


    my %vals = (map {
	my $meth = $derivable->{$_} || $_;
	my $val = $row->$meth;
	$_ => $val
	} @$props);

    return \%vals;
}

########################################################################

sub _getopt {

    my %options;

    Getopt::Long::GetOptions(\%options,
			     'username|user=s',
			     'password|pass=s',
			     'command|c=s@',
                             'dump=s',
			     'debug=i',
			     'adapter=s',
			     'help|?',
			     'version|v',
			     'help|?'
	) or pod2usage(2);

    pod2usage(0) if ($options{help});

    if ($options{version}) {
	print "Elive v${Elive::VERSION} (c) 2009 - 2012\n";
	exit 0;
    }

    if ($options{dump} && $options{dump} !~ /^(yaml)$/i) {
	pod2usage("unknown dump format: $options{dump}");
    }

    my $url = shift(@ARGV);

    return ($url, %options);
}

########################################################################

sub _connect {
    my ($adapter_class, $url, %options) = @_;

    my $username = $options{username};
    my $password = $options{password};

    my $uri_obj = URI->new($url);
    if (my $userinfo = $uri_obj->userinfo) {
	#
	# credentials supplied in URI

	my ($uri_user, $uri_pass) = split(':', $userinfo, 2);
	$username ||= URI::Escape::uri_unescape($uri_user);
	$password ||= URI::Escape::uri_unescape($uri_pass)
	    if $uri_pass;

	$url =~ s{\Q${userinfo}\E\@}{};
    }

    $username ||= Elive::Util::prompt('Username: ');
    $password ||= Elive::Util::prompt('Password: ', password => 1);

    print STDERR "connecting to $url...";
    my $connection = eval {
	$adapter_class->connect($url, $username, $password);
    };

    if ($@) {
	print STDERR "\nconnection failed: $@";
	return;
    }

    print STDERR "ok\n";
    return $connection;
}

########################################################################

1;



( run in 0.581 second using v1.01-cache-2.11-cpan-39bf76dae61 )