JSAN - JavaScript Archive Network (JSAN) Shell


JSAN documentation Contained in the JSAN distribution.

Index


Code Index:

NAME

Top

JSAN -- JavaScript Archive Network (JSAN) Shell

AUTHOR

Top

Casey West <casey@geeknest.com>.

Adam Kennedy <adam@ali.as>, http://ali.as

COPYRIGHT

Top


JSAN documentation Contained in the JSAN distribution.

package JSAN;

use JSAN::Shell;
use Term::ReadLine;
use Getopt::Long;

our $PROMPT  = 'jsan> ';
our $VERSION = '0.07';

our %COMMAND;
our $OPTIONS = {
    prefix => $ENV{JSAN_PREFIX} || $ENV{PREFIX},
    mirror => $ENV{JSAN_MIRROR} || $ENV{MIRROR},
};
our @OPTIONS = (
    q[prefix|p=s],
    q[mirror|m=s],
);

$COMMAND{index} = sub {
    my ($shell, $opt) = @_;
    if ($opt =~ /create/ ) {
        print "Creating index... ";
        $shell->index_create;
        print "done.\n";
        return;
    }
    $shell->index_get;
};

$COMMAND{install} = sub {
    my ($shell, $opt) = @_;
    my ($library) = (split /\s/, $opt)[0];
    $shell->install($library, $OPTIONS->{prefix});
};

sub run {
    my ($class) = @_;
    print $class->motd();
    my $term = Term::ReadLine->new;
    while (defined(my $cmd_line = $term->readline($PROMPT))) {
        chomp($cmd_line);
        $cmd_line =~ s/^\s+//;
        $cmd_line =~ s/\s+$//;
        next unless $cmd_line;
        exit if grep { $cmd_line =~ /^\s*$_/ } qw[exit quit q logout];
        eval {
            print "\n";
            $class->execute($cmd_line);
        };
        if ( $@ ) {
            warn "$@\n";
        } else {
            $term->addhistory($cmd_line);
        }
    }
}

sub execute {
    my ($class, $cmd) = @_;
    my ($command, $options) = split /\s+/, $cmd, 2;
    $options ||= '';

    die "Command $command not implemented" unless $COMMAND{$command};
    $COMMAND{$command}->(JSAN::Shell->new(my_mirror => $OPTIONS->{mirror}), $options);
}

sub control {
    my ($class) = @_;
    GetOptions($OPTIONS, @OPTIONS);
    if ( @ARGV ) {
        $class->execute(join ' ', @ARGV);
        exit;
    } else {
        $class->run;
        exit;
    }
}

sub motd {
<<__END__

Welcome to the JavaScript Archive Network (JSAN) Shell. The very first
thing you probably want to do is setup your local index. Do do this, run
the following command.

  jsan> index

In order to install libraries you must configure a prefix. Use the
--prefix command line option, or -p for short. Or, if you prefer, set
your PREFIX environment variable. For example.

  jsan --prefix=/usr/local/js

If you install all your libraries to a central location, you could just
configure Apache (for example) to look for JavaScript in that one
location: Alias /js/ "/usr/local/js/". Next.

  jsan> install Test.Simple

That's it for tips. Welcome to JSAN! -- Casey West

__END__
}

1;

__END__