package Jifty::Script::Env;
use warnings;
use strict;
use base qw/Jifty::Script/;
use Scalar::Util ();
use Jifty::Config;
use Jifty::YAML;
=head1 NAME
Jifty::Script::Env - access the Jifty environment
=head1 SYNOPSIS
jifty env <Class> <method> [arguments]
jifty env Util share_root
jifty env 'Util->share_root'
jifty env Util.share_root
=head1 DESCRIPTION
Loads Jifty and your configuration, allowing you to verify and examine
your setup.
Loads Jifty::Class and calls method on it, providing shortcuts for
things like:
perl -MJifty::Util -e 'print Jifty::Util->share_root, "\n";'
The class and method can be combined with a '->' But, unquoted '>' is a
redirect so simply use the '-' or '.' characters.
jifty env Util share_root
jifty env 'Util->share_root'
jifty env Util.share_root
You may chain accessors. A leading dot also means the class is Jifty.
jifty env Jifty.config.framework ApplicationName
jifty env .config.framework ApplicationName
With no arguments, acts as 'C<jifty env Jifty.config.stash>'.
=head2 options
This script has no specific options now. Maybe it will have
some command lines options in the future.
=over 8
=item B<--help>
Print a brief help message and exits.
=item B<--man>
Prints the manual page and exits.
=back
=head1 METHODS
=head2 run
Prints whatever the user asked for.
=cut
sub run {
my $self = shift;
my (@args) = @_;
$self->print_help;
Jifty->new();
unless(@args) {
$self->run('Jifty.config.stash');
print "\nSee also `jifty env --help`\n";
return;
}
my ($class, $method, @and) = split(/(?:->?|\.)/, shift(@args));
$class ||= 'Jifty';
$method ||= shift(@args);
my @ans;
# enable Jifty.config.stash usage
unless($class eq 'Jifty') {
$class = 'Jifty::' . $class;
eval("require $class") or die $@;
}
# walk down the chain of methods
unshift(@and, $method);
$method = pop(@and);
while(my $attrib = shift(@and)) {
$class = $class->$attrib;
}
@ans = $class->$method(@args);
# if something in the answer is a reference, just dump
if(grep({Scalar::Util::reftype($_)} @ans)) {
print Jifty::YAML::Dump(\@ans);
}
else {
print join("\n", @ans, '');
}
} # end run
# original author: Eric Wilhelm
1;
# vim:ts=4:sw=4:et:sta