Fry-Shell
view release on metacpan or search on metacpan
lib/Fry/Shell.pm view on Meta::CPAN
order: config of Fry::Shell library, core config, config of all other libraries, global
config,load_obj option of &new and options setting variable values.
=head2 Useful Options
Fry::Shell comes with a few handy options (defined in &_default_data):
parsecmd: sets the current parsing subroutine, handy when needing to pass a command a
complex data structure and want to use your own parsing syntax
cmdlist: sets the current subroutine for autocompleting commands
menu: sets parsecmd to parseMenu thus putting the user in a menu mode
where each output line is aliased to a number for the following
command, explained in SYNOPSIS Explained section
fh_file: sends command's output to specified file name
page: sends command's output to preferred pager
autoview: flag which turns on/off autoview and a command's subroutine outputs for itself
skiparg: flag which turns on/off skipping command argument checking
multiline: begins multiline mode
method_caller: Controls class or object that calls a method when calling a command. Value of
1, calls method with CmdClass. See &Fry::Cmd::runCmd for details.
lib/Fry/Sub.pm view on Meta::CPAN
package Fry::Sub::_Methods;
package Fry::Sub;
push(@ISA,'Fry::Sub::_Methods');
my $list = {};
sub list { return $list }
sub _default_data {
{
subs=>{
normal=>{qw/a n sub parseNormal/},
menu=>{qw/a m sub parseMenu/},
eval=>{qw/a e sub parseEval/},defaultTest=>{},
empty=>{},
cmd_normal=>{qw/a cn/},
cmd_alias=>{qw/a ca/},
cmd_extra=>{qw/a ce/},
#cmdList=>{qw/a cl/},
}
}
}
lib/Fry/Sub.pm view on Meta::CPAN
else {
($cmd,@eval) = split(/\s+/,$input,2);
@noneval = $cmd;
}
my $text = '@eval';
eval "$text = (@eval)";
#eval { @eval = ("@eval") };
die("invalid evaled statement: $@") if ($@);
return (@noneval,@eval);
}
sub parseMenu ($$) {
#d: creates @cmd_beg,@entry and @save from @args
#my ($o,@args) = @_;
my $o = shift;
my @args = split(/ /,shift());
my @cmd_beg = shift (@args);
my $i = 0;
#td: fix uninitialized warning
no warnings;
if ($args[0] ne "") {
lib/Fry/Sub.pm view on Meta::CPAN
parseMultiline(\$input): Parses multiline input.
parseOptions(\$input): Parses options from input.
parseNormal($input): Default parser for command section of input, splitting commands
and arguments by whitespace.
parseEval($input): Parser that parses part of the line with &parseNormal and evals the
rest. The variable eval_splitter determines the splitting point. This
parser is used often with the &objectAct command:
-p=e objectAct selectall_arrayref,,'select * from pmodule'
parseMenu($input): Parser used by menu option. Substitutes a number format with values.
The number format is a comma separated list of values. A range of values
can be specified with a '-' between numbers. Valid number formats are
1-5,8,12 and 1,8,4 .
parseNum($entry,@args): Used by parseMenu to substitute numbers. Same format as
parseMenu but only accepting one entry.
CmdList Subroutines
cmd_normal(): lists all object ids from command class
cmd_alias(): lists all object ids and aliases from command class
Other
empty(): empty subroutine, usually serves as a default subroutine for subroutine hooks
=head1 AUTHOR
Me. Gabriel that is. I welcome feedback and bug reports to cldwalker AT chwhat DOT com . If you
like using perl,linux,vim and databases to make your life easier (not lazier ;) check out my website
t/fry_shell.t view on Meta::CPAN
#general checks
is_deeply([sort $o->List('var')],[sort (qw/shell_class/, keys %{Fry::Lib::Default->_default_data->{vars} },
keys %{main->_default_data->{vars}})],'core vars loaded');
is_deeply([sort $o->List('opt')],[sort (keys %{main->_default_data->{opts}})],'core options loaded');
is_deeply($o->Var('loaded_libs'),[qw/Fry::Shell Fry::Sub Fry::Lib::Default/],'libs loaded in right order in &loadLib');
is_deeply([@CmdClass::ISA],[qw/Fry::ShellI Fry::Lib::Default/],'cmdclass ISA set in &loadLib');
#parse*
$o->saveArray(qw/one cow fart equals thirty human farts/);
my $menuinput = "scp -ra 2-5,7";
my @results = $o->sub->parseMenu($menuinput);
my $input = "-m=yeah yo man";
is_deeply([$o->parseLine("-m $menuinput")],\@results,'&parseLine strips options and menu flag works');
#options
my $menuinput = "scp -ra 2-5,7";
#&parseCmd + parsecmd opt
$o->setVar(parsecmd=>'m');
is_deeply([$o->_parseCmd($menuinput)],\@results,'aliased parsecmd opt switched parse modes correctly');
t/fry_sub.t view on Meta::CPAN
ok($@,'&_require dies');
$cls->useThere('Fry::Lib::SampleLib','main');
is($Fry::Lib::SampleLib::use[-1],'Fry::Lib::SampleLib','&useThere calls useclass import');
require Fry::Lib::SampleLib;
#Parse subs
Fry::Base->_core(var=>'Fry::Var');
require Fry::Var;
Fry::Var->defaultNew(lines=>[],pipe_char=>'\s*\|\s*',eval_splitter=>',,');
#parseMenu(parsenum)
Fry::Var->set('lines','value',[qw/one cow fart equals thirty human farts/]);
my $menuinput = "scp -ra 2-5,7";
my @results = $cls->parseMenu($menuinput);
is_deeply(\@results,[qw/scp -ra cow fart equals thirty farts/],"&parseMenu + &parsenum");
is_deeply([sort $cls->parseNormal("just testing away")],[qw/away just testing/],'&parseNormal');
is_deeply([sort $cls->parseChunks("well |man| woah")],[qw/man well woah/],'&parseChunks');
my $input = "-m=yeah yo man";
is_deeply({$cls->parseOptions(\$input)},{qw/m yeah/},'&parseOptions: returns parsed options');
$input = "testing\n this\n piece";
$cls->parseMultiline(\$input);
t/testlib/Specs.pm view on Meta::CPAN
indexObj defaultSet/
}
#core-all have isa:list,base
sub lib { return (qw/defaultNew runLibInits fullName getLibData readLibObj setAllObj
unloadLib
loadLib loadDependencies loadLibs initLibs/)
}
sub var { return qw/setOrMakeVar defaultNew defaultSet Var setVar/ }
sub opt { return qw/defaultNew setOptions Opt findSetOptions resetOptions preParseCmd/ }
sub cmd { return qw/defaultNew argAlias checkArgs runTest runCmd defaultTestName/ }
sub sub { return qw/parseEval parseChunks parseMultiline parseOptions parseNormal parseMenu
parseNum cmdList empty
call defaultNew subHook
chooseItems _require useThere spliceArray defaultTest/
}
sub obj {qw/defaultNew/}
#plugins-all have isa:base
sub readline { return qw/setup prompt stdin/} #shelli
sub error { return qw/setup sigHandler new setLevel flush stringify_stack/ }
sub dump { return qw/setup dump/}
sub view { return qw/setup view list hash/ }
( run in 0.517 second using v1.01-cache-2.11-cpan-49f99fa48dc )