#!/usr/bin/env perl
							 | 
						|
								
							 | 
						|
								=pod
							 | 
						|
								
							 | 
						|
								=head1 NAME
							 | 
						|
								
							 | 
						|
								wrt-repl - simple read-eval-print loop for wrt's inner workings
							 | 
						|
								
							 | 
						|
								=head1 USAGE
							 | 
						|
								
							 | 
						|
								    wrt repl
							 | 
						|
								
							 | 
						|
								=head1 DESCRIPTION
							 | 
						|
								
							 | 
						|
								Uses Term::ReadLine to provide a live interface to a loaded wrt environment for
							 | 
						|
								the current working wrt directory.
							 | 
						|
								
							 | 
						|
								This is primarily a debugging tool for the current wrt implementation itself.
							 | 
						|
								
							 | 
						|
								Detailed documentation can be found in the L<App::WRT> man page or at
							 | 
						|
								L<https://code.p1k3.com/gitea/brennen/wrt>.
							 | 
						|
								
							 | 
						|
								=head1 LICENSE
							 | 
						|
								
							 | 
						|
								    wrt is free software; you can redistribute it and/or modify
							 | 
						|
								    it under the terms of the GNU General Public License as published by
							 | 
						|
								    the Free Software Foundation; either version 2 of the License, or
							 | 
						|
								    (at your option) any later version.
							 | 
						|
								
							 | 
						|
								=head1 AUTHOR
							 | 
						|
								
							 | 
						|
								Brennen Bearnes <code@p1k3.com>
							 | 
						|
								
							 | 
						|
								=cut
							 | 
						|
								
							 | 
						|
								use 5.10.0;
							 | 
						|
								
							 | 
						|
								use strict;
							 | 
						|
								use warnings;
							 | 
						|
								use utf8;
							 | 
						|
								use open qw(:std :utf8);
							 | 
						|
								
							 | 
						|
								use Getopt::Long qw(GetOptionsFromArray);
							 | 
						|
								use Pod::Usage;
							 | 
						|
								use App::WRT;
							 | 
						|
								use Carp;
							 | 
						|
								use Term::ReadLine;
							 | 
						|
								use Data::Dumper;
							 | 
						|
								
							 | 
						|
								$Carp::Verbose = 1;
							 | 
						|
								
							 | 
						|
								if (not caller()) {
							 | 
						|
								  main(@ARGV);
							 | 
						|
								  exit(0);
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								sub main {
							 | 
						|
								  my (@local_argv) = @_;
							 | 
						|
								
							 | 
						|
								  # Handle options, including help generated from the POD above.  See:
							 | 
						|
								  # - http://perldoc.perl.org/Getopt/Long.html#User-defined-subroutines-to-handle-options
							 | 
						|
								  # - https://metacpan.org/pod/Pod::Usage
							 | 
						|
								  # - http://michael.thegrebs.com/2014/06/08/Pod-Usage/
							 | 
						|
								  my $config_file = 'wrt.json';
							 | 
						|
								  GetOptionsFromArray(
							 | 
						|
								    \@local_argv,
							 | 
						|
								    'config=s'    => \$config_file,
							 | 
						|
								    help          => sub { pod2usage(0) },
							 | 
						|
								  ) or pod2usage(2);
							 | 
						|
								
							 | 
						|
								  my $term = Term::ReadLine->new('wrt repl');
							 | 
						|
								  my $OUT = $term->OUT || \*STDOUT;
							 | 
						|
								
							 | 
						|
								  print $OUT "loading configuration from $config_file\n";
							 | 
						|
								
							 | 
						|
								  my $w = App::WRT::new_from_file($config_file);
							 | 
						|
								
							 | 
						|
								  print $OUT $w->{entry_dir} . ":\n";
							 | 
						|
								  print $OUT "\t" . scalar($w->{entries}->all()) . " items\n";
							 | 
						|
								  print $OUT "\t" . scalar($w->{entries}->all_renderable())
							 | 
						|
								             . " renderable entries\n\n";
							 | 
						|
								  print $OUT "Available:\n\t\$w\n";
							 | 
						|
								  print $OUT "\t\$w->{entries}\n";
							 | 
						|
								  print $OUT "\tDumper(\$foo)\n";
							 | 
						|
								  print $OUT "\n";
							 | 
						|
								
							 | 
						|
								  my $prompt = "wrt :: $w->{title_prefix} :: ";
							 | 
						|
								
							 | 
						|
								  while ( defined ($_ = $term->readline($prompt)) ) {
							 | 
						|
								    my $result = eval($_);
							 | 
						|
								    carp $@ if $@;
							 | 
						|
								    print $OUT $result, "\n" unless $@;
							 | 
						|
								    $term->addhistory($_) if /\S/;
							 | 
						|
								    $prompt = "wrt :: $w->{title_prefix} :: ";
							 | 
						|
								  }
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								1;
							 |