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 )