Project-Easy

 view release on metacpan or  search on metacpan

lib/Project/Easy/Helper.pm  view on Meta::CPAN

package Project::Easy::Helper;

use Data::Dumper;
use Class::Easy;
use IO::Easy;

use Time::Piece;

require Project::Easy;

use Project::Easy::Config;

use Project::Easy::Helper::DB;
use Project::Easy::Helper::Status;
use Project::Easy::Helper::Config;
use Project::Easy::Helper::Console;

our @scriptable = (qw(status config updatedb console));

my $is_colored = 0;

$is_colored = 1
	if try_to_use ('Term::ANSIColor');

sub ::initialize {
	my $params = \@_;
	$params = \@ARGV
		unless scalar @$params;
	
	my $namespace = shift @$params;

	my @path = ('lib', split '::', $namespace);
	my $last = pop @path;

	my $project_id = shift @ARGV || lc ($last);
	
	debug "initialization of $namespace, project id is: $project_id";
	
	unless ($namespace) {
		die "please specify package namespace";
	}
	
	my $data_files = file->__data__files;
	
	my $data = {
		namespace => $namespace,
		project_id => $project_id,
	};
	
	my $project_pm = Project::Easy::Config::string_from_template (
		$data_files->{'Project.pm'},
		$data
	);

	my $login = eval {scalar getpwuid ($<)};

	my $instance = 'local' . (defined $login ? ".$login" : '');
	
	my $root = dir->current;
	
	my $lib_dir = $root->append (@path)->as_dir;
	$lib_dir->create; # recursive directory creation	
	
	$last .= '.pm';
	my $class_file = $lib_dir->append ($last)->as_file;
	$class_file->store_if_empty ($project_pm);
	
	# ok, project skeleton created. now we need to create 'bin' dir
	$root->dir_io ('bin')->create;
	
	# now we create several perl scripts to complete installation 
	create_scripts ($root, $data_files);
	
	# ok, project skeleton created. now we need to create config
	my $etc = $root->append ('etc')->as_dir;
	$etc->append ($instance)->as_dir->create;
	
	# TODO: store database config
	$etc->append ("$project_id.json")->as_file->store_if_empty ('{}');
	$etc->append ($instance, "$project_id.json")->as_file->store_if_empty ('{}');
	
	$etc->append ('project-easy')->as_file->store_if_empty ("#!/usr/bin/perl
package LocalConf;
our \$pack = '$namespace';

our \@paths = qw(
);

1;
");
	
	my $var = create_var ($root);
	
	my $instance_file = $var->append ('instance')->as_file;
	$instance_file->store_if_empty ($instance);

	my $t = $root->append ('t')->as_dir;
	$t->create;
	
	create_entity ($namespace, $root, 'default');
	
	# adding sqlite database (sqlite is dependency for dbi::easy)
	
	debug "file contents saving done";
	
	$0 = dir->current->append (qw(etc project-easy))->path;
	
	my $date = localtime->ymd;
	
	my $schema_file = file ('share/sql/default.sql');
	$schema_file->parent->create;
	$schema_file->store (
		"--- $date\ncreate table var (var_name text, var_value text);\n"
	);



( run in 2.711 seconds using v1.01-cache-2.11-cpan-13bb782fe5a )