[Jifty-commit] jifty branch, setupwizard-refactor, updated. 885ca5a4fcd6f98997f1ab429bd92cb3fff4b114

Jifty commits jifty-commit at lists.jifty.org
Thu Jul 8 14:02:50 EDT 2010


The branch, setupwizard-refactor has been updated
       via  885ca5a4fcd6f98997f1ab429bd92cb3fff4b114 (commit)
      from  72d8d021afb6823df85fda52e4a9022a8d7a3b3c (commit)

Summary of changes:
 .../Plugin/SetupWizard/Action/SetupNewDatabase.pm  |   63 ++++++++++++++++++++
 lib/Jifty/Plugin/SetupWizard/Dispatcher.pm         |    9 ++-
 lib/Jifty/Plugin/SetupWizard/View/Helpers.pm       |   16 ++++-
 3 files changed, 83 insertions(+), 5 deletions(-)
 create mode 100644 lib/Jifty/Plugin/SetupWizard/Action/SetupNewDatabase.pm

- Log -----------------------------------------------------------------
commit 885ca5a4fcd6f98997f1ab429bd92cb3fff4b114
Author: Thomas Sibley <trs at bestpractical.com>
Date:   Thu Jul 8 14:04:09 2010 -0400

    Add a SetupNewDatabase action to manage the database

diff --git a/lib/Jifty/Plugin/SetupWizard/Action/SetupNewDatabase.pm b/lib/Jifty/Plugin/SetupWizard/Action/SetupNewDatabase.pm
new file mode 100644
index 0000000..4ce3cff
--- /dev/null
+++ b/lib/Jifty/Plugin/SetupWizard/Action/SetupNewDatabase.pm
@@ -0,0 +1,63 @@
+package Jifty::Plugin::SetupWizard::Action::SetupNewDatabase;
+use strict;
+use warnings;
+use base 'Jifty::Action';
+
+=head1 NAME
+
+Jifty::Plugin::SetupWizard::Action::SetupNewDatabase - Fully create the
+database specified by the current config
+
+=head1 PARAMETERS
+
+Takes no parameters.
+
+=head1 METHODS
+
+=head2 take_action
+
+Creates the database specified in the current config and populates it with
+tables and bootstrapped content.
+
+This is roughly equivalent to running C<jifty schema --create-database --setup>,
+although this happens while the app is running and as a result needs
+a little more finesse.  Running the action will call Jifty's L<Jifty/restart>
+method.
+
+=cut
+
+use Jifty::Param::Schema;
+use Jifty::Action schema {
+    # No parameters
+};
+
+use Jifty::Schema;
+
+sub take_action {
+    my $self = shift;
+
+    my $database = Jifty->handle->canonical_database_name();
+    my $schema = Jifty::Schema->new(
+        flags => {
+            create_database => 1,
+            setup_tables    => 1
+        }
+    );
+
+    eval {
+        $schema->setup_database();
+        Jifty->restart();
+    };
+
+    my $error = $@;
+
+    if ( $error ) {
+        return $self->result->error(_("Setting up the new database '%1' failed. %2",
+                                      $database, $error));
+    }
+    else {
+        return $self->result->message(_("Setup the new database '%1'.", $database));
+    }
+}
+
+1;
diff --git a/lib/Jifty/Plugin/SetupWizard/Dispatcher.pm b/lib/Jifty/Plugin/SetupWizard/Dispatcher.pm
index 9722311..26cf144 100644
--- a/lib/Jifty/Plugin/SetupWizard/Dispatcher.pm
+++ b/lib/Jifty/Plugin/SetupWizard/Dispatcher.pm
@@ -19,14 +19,17 @@ use Jifty::Dispatcher -base;
 
 =head2 before '*'
 
-Allows running L<Jifty::Plugin::SetupWizard::Action::TestDatabaseConnectivity>
-if C<SetupMode> is turned on.
+Allows running this plugin's
+L<TestDatabaseConnectivity|Jifty::Plugin::SetupWizard::Action::TestDatabaseConnectivity>
+and L<SetupNewDatabase|Jifty::Plugin::SetupWizard::Action::SetupNewDatabase>
+actions if C<SetupMode> is turned on.
 
 =cut
 
 before '*' => run {
     return if not Jifty->setup_mode;
-    Jifty->api->allow('Jifty::Plugin::SetupWizard::Action::TestDatabaseConnectivity');
+    Jifty->api->allow("Jifty::Plugin::SetupWizard::Action::$_")
+        for qw( TestDatabaseConnectivity SetupNewDatabase );
 };
 
 1;
diff --git a/lib/Jifty/Plugin/SetupWizard/View/Helpers.pm b/lib/Jifty/Plugin/SetupWizard/View/Helpers.pm
index 495fbce..686aaa6 100644
--- a/lib/Jifty/Plugin/SetupWizard/View/Helpers.pm
+++ b/lib/Jifty/Plugin/SetupWizard/View/Helpers.pm
@@ -11,7 +11,7 @@ Jifty::Plugin::SetupWizard::View::Helpers - Helper templates and functions for S
 
 =head2 database_widget
 
-Provides a simple database configuration widget
+Provides a database configuration and connectivity testing widget.
 
 =cut
 
@@ -89,6 +89,8 @@ private template 'database_widget' => sub {
         name => 'test_connectivity',
         path => $self->fragment_for("database_widget/test_connectivity"),
     );
+
+    show 'database_widget/setup_new_database';
 };
 
 private template 'database_widget/unavailable_drivers' => sub {
@@ -180,7 +182,7 @@ template 'database_widget/test_connectivity' => sub {
     my $action = new_action(
         class   => 'Jifty::Plugin::SetupWizard::Action::TestDatabaseConnectivity',
         moniker => 'test-db-connectivity',
-        order   => 60, # after everything else
+        order   => 60, # after everything else so far
     );
 
     if ( my $result = Jifty->web->response->result('test-db-connectivity') ) {
@@ -213,6 +215,16 @@ template 'database_widget/test_connectivity' => sub {
 
 };
 
+template 'database_widget/setup_new_database' => sub {
+    my $self = shift;
+
+    my $action = Jifty->web->form->add_action(
+        class   => 'Jifty::Plugin::SetupWizard::Action::SetupNewDatabase',
+        moniker => 'setup-new-database',
+        order   => 70, # After everything else in this widget,
+                       # but it should be before any Restart actions.
+    );
+};
 
 =head1 FUNCTIONS
 

-----------------------------------------------------------------------


More information about the Jifty-commit mailing list