[Jifty-commit] r393 - jifty/trunk/lib/Jifty

jifty-commit at lists.jifty.org jifty-commit at lists.jifty.org
Mon Dec 26 02:15:54 EST 2005


Author: jesse
Date: Mon Dec 26 02:15:54 2005
New Revision: 393

Modified:
   /   (props changed)
   jifty/trunk/lib/Jifty/Config.pm
   jifty/trunk/lib/Jifty/Script/App.pm

Log:
 r21760 at truegrounds:  jesse | 2005-12-26 02:14:34 -0500
 * Refactored Jifty::Config to allow the application class to be specified when calling Config->guess 
 * Refactored Jifty::Script::App into bite-sized morsels
 * Made Jifty::Script::App generate a config file
 * Made Jifty::Script::App and Jifty::Config::Guess happy with multi-level package names


Modified: jifty/trunk/lib/Jifty/Config.pm
==============================================================================
--- jifty/trunk/lib/Jifty/Config.pm	(original)
+++ jifty/trunk/lib/Jifty/Config.pm	Mon Dec 26 02:15:54 2005
@@ -180,29 +180,41 @@
     my $self = shift;
 
     # Walk around a potential loop by calling guess to get the app name
-    my $name = ( $self->stash->{framework}->{ApplicationName}
-        ? $self->stash->{framework}->{ApplicationName}
-        : Jifty::Util->app_name );
+    my $app_name;
+    if (@_) {
+        $app_name = shift;
+    } elsif ($self->stash->{framework}->{ApplicationName}) {
+
+        $app_name =  $self->stash->{framework}->{ApplicationName};
+    } else {
+        $app_name =  Jifty::Util->app_name;
+    }
+
+    my $app_class = $app_name;
+    $app_class =~ s/-/::/g;
+    my $db_name = lc $app_name;
+    $db_name =~ s/-/_/g;
     return {
         framework => {
-            AdminMode       => 1,
-            ActionBasePath   => $name . "::Action",
-            ApplicationClass => $name,
-            CurrentUserClass => $name ."::CurrentUser",
-            ApplicationName  => $name,
+            AdminMode        => 1,
+            ActionBasePath   => $app_class . "::Action",
+            ApplicationClass => $app_class,
+            CurrentUserClass => $app_class . "::CurrentUser",
+            ApplicationName  => $app_name,
             Database         => {
-                Database => lc $name,
+                Database =>  $db_name,
                 Driver   => "SQLite",
                 Host     => "localhost",
                 Password => "",
                 User     => "",
                 Version  => "0.0.1",
             },
-            Mailer => 'Sendmail',
+            Mailer     => 'Sendmail',
             MailerArgs => [],
-            Web => {
-                DefaultStaticRoot => Jifty::Util->share_root .'/web/static',
-                DefaultTemplateRoot => Jifty::Util->share_root . '/web/templates',
+            Web        => {
+                DefaultStaticRoot => Jifty::Util->share_root . '/web/static',
+                DefaultTemplateRoot => Jifty::Util->share_root
+                    . '/web/templates',
                 StaticRoot   => "web/static",
                 TemplateRoot => "web/templates",
             }
@@ -232,6 +244,7 @@
     return $hashref;
 }
 
+
 # Does a DFS, turning all leaves that look like C<%paths%> into absolute paths.
 sub _expand_relative_paths {
     my $self  = shift;

Modified: jifty/trunk/lib/Jifty/Script/App.pm
==============================================================================
--- jifty/trunk/lib/Jifty/Script/App.pm	(original)
+++ jifty/trunk/lib/Jifty/Script/App.pm	Mon Dec 26 02:15:54 2005
@@ -2,11 +2,14 @@
 use strict;
 
 package Jifty::Script::App;
-use base 'App::CLI::Command';
+use base qw'App::CLI::Command Class::Accessor';
 
 use YAML;
 use File::Copy;
 
+__PACKAGE__->mk_accessors(qw/prefix dist_name mod_name/);
+
+
 =head1 NAME
 
 Jifty::Script::App - Create the skeleton of a Jifty application
@@ -41,40 +44,74 @@
 sub run {
     my $self = shift;
 
-    my $prefix = $self->{name} ||''; 
+    $self->prefix( $self->{name} ||''); 
 
-    unless ($prefix =~ /\w+/ ) { die "You need to give your new Jifty app a --name"."\n";}
+    unless ($self->prefix =~ /\w+/ ) { die "You need to give your new Jifty app a --name"."\n";}
 
-    my $modname = $self->{modname} || ucfirst($prefix);
+    # Turn my-app-name into My::App::Name.
 
-    print("Creating new application ".$self->{name}."\n");
-    mkdir($prefix);
+    $self->mod_name (join ("::", map { ucfirst } split (/\-/, $self->prefix)));
+    my $dist = $self->mod_name;
+    $self->dist_name($self->prefix);
 
-    foreach my $dir ($self->_directories) {
-        $dir =~ s/__APP__/$modname/;
-        print("Creating directory $dir\n");
-        mkdir( "$prefix/$dir") or die "Can't create $prefix/$dir: $!";
+    print("Creating new application ".$self->mod_name."\n");
+    $self->_make_directories();
+    $self->_install_jifty_binary();
+    $self->_write_makefile();
+    $self->_write_config();
 
-    }
 
+}
+
+sub _install_jifty_binary {
+    my $self = shift;
+    my $prefix = $self->prefix;
     # Copy our running copy of 'jifty' to bin/jifty
     copy($0, "$prefix/bin/jifty");
     # Mark it executable
     chmod(0555, "$prefix/bin/jifty");
+}
+
+
 
+sub _write_makefile {
+    my $self = shift;
+    my $mod_name = $self->mod_name;
+    my $prefix = $self->prefix;
     # Write a makefile
     open(MAKEFILE, ">$prefix/Makefile.PL") or die "Can't write Makefile.PL: $!";
     print MAKEFILE <<"EOT";
 use inc::Module::Install;
-name('$modname');
+name('$mod_name');
 version('0.01');
-requires('Jifty');
+requires('Jifty' => '@{[$Jifty::VERSION]}');
 
 WriteAll;
 EOT
     close MAKEFILE;
-}
+} 
+
+sub _make_directories {
+    my $self = shift;
+
+    mkdir($self->prefix);
+    my @dirs = qw( lib/ );
+    my @dir_parts = split('::',$self->mod_name);
+    my $lib_dir = "";
+    foreach my $part (@dir_parts) {
+        $lib_dir .=  $part ."/";
+        push @dirs, "lib/". $lib_dir;
+    }
+
+    @dirs = (@dirs, $self->_directories); 
 
+    foreach my $dir (@dirs) {
+        $dir =~ s/__APP__/$lib_dir/;
+        print("Creating directory $dir\n");
+        mkdir( $self->prefix."/$dir") or die "Can't create ". $self->prefix."/$dir: $!";
+
+    }
+}
 sub _directories {
     return qw(
         bin
@@ -84,8 +121,6 @@
         web
         web/templates
         web/static
-        lib
-        lib/__APP__
         lib/__APP__/Model
         lib/__APP__/Action
         t
@@ -93,5 +128,16 @@
 }
 
 
+sub _write_config {
+    my $self = shift;
+    my $cfg = Jifty::Config->new();
+    my $default_config = $cfg->guess($self->dist_name);
+    my $file = join("/",$self->prefix, 'etc','config.yml');
+    print("Creating configuration file $file\n");
+    YAML::DumpFile($file => $default_config);
+
+}
+
+
 1;
 


More information about the Jifty-commit mailing list