Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Moving the util methods to the model (refs #11)

  • Loading branch information...
commit 307181ccc49b5d6362fffe2ab0d02e80c1c87b89 1 parent 48df2fe
Lorenzo Pisani Zeelot authored
22 classes/minion/migration/manager.php
View
@@ -1,8 +1,8 @@
<?php defined('SYSPATH') or die('No direct script access.');
/**
- * The migration manager is responsible for locating migration files, syncing
- * them with the migrations table in the database and selecting any migrations
+ * The migration manager is responsible for locating migration files, syncing
+ * them with the migrations table in the database and selecting any migrations
* that need to be executed in order to reach a target version
*
* @author Matt Button <matthew@sigswitch.com>
@@ -58,7 +58,7 @@ public function __construct(Kohana_Database $db, Model_Minion_Migration $model =
/**
* Set the database connection to be used
- *
+ *
* @param Kohana_Database Database connection
* @return Minion_Migration_Manager
*/
@@ -96,7 +96,7 @@ public function set_dry_run($dry_run)
}
/**
- * Returns a set of queries that would've been executed had dry run not been
+ * Returns a set of queries that would've been executed had dry run not been
* enabled. If dry run was not enabled, this returns an empty array
*
* @return array SQL Queries
@@ -141,20 +141,20 @@ public function run_migration($group = array(), $target = TRUE)
return;
}
- $filename = Minion_Migration_Util::get_filename_from_migration($migration);
+ $filename = $this->_model->get_filename_from_migration($migration);
if ( ! ($file = Kohana::find_file('migrations', $filename, FALSE)))
{
throw new Kohana_Exception(
- 'Cannot load migration :migration (:file)',
+ 'Cannot load migration :migration (:file)',
array(
- ':migration' => $migration['id'],
+ ':migration' => $migration['id'],
':file' => $filename
)
);
}
- $class = Minion_Migration_Util::get_class_from_migration($migration);
+ $class = $this->_model->get_class_from_migration($migration);
include_once $file;
@@ -162,7 +162,7 @@ public function run_migration($group = array(), $target = TRUE)
$db = $this->_get_db_instance($instance->get_database_connection());
- try
+ try
{
$instance->$method($db);
}
@@ -204,7 +204,7 @@ public function sync_migration_files()
// If this migration has since been deleted
if (isset($installed[$migration]) AND ! isset($available[$migration]))
{
- // We should only delete a record of this migration if it does
+ // We should only delete a record of this migration if it does
// not exist in the "real world"
if ($installed[$migration]['applied'] === '0')
{
@@ -216,7 +216,7 @@ public function sync_migration_files()
{
$this->_model->add_migration($available[$migration]);
}
- // Somebody changed the description of the migration, make sure we
+ // Somebody changed the description of the migration, make sure we
// update it in the db as we use this to build the filename!
elseif ($installed[$migration]['description'] !== $available[$migration]['description'])
{
124 classes/minion/migration/util.php
View
@@ -1,124 +0,0 @@
-<?php defined('SYSPATH') or die('No direct script access.');
-
-
-/**
- * Provides a set of utility functions for managing migrations
- *
- * @author Matt Button <matthew@sigswitch.com>
- */
-class Minion_Migration_Util {
-
- /**
- * Parses a set of files generated by Kohana::find_files and compiles it
- * down into an array of migrations
- *
- * @param array Available files
- * @return array Available Migrations
- */
- public static function compile_migrations_from_files(array $files)
- {
- $migrations = array();
-
- foreach ($files as $file => $path)
- {
- // If this is a directory we're dealing with
- if (is_array($path))
- {
- $migrations += Minion_Migration_Util::compile_migrations_from_files($path);
- }
- else
- {
- $migration = Minion_Migration_Util::get_migration_from_filename($file);
-
- $migrations[$migration['group'].':'.$migration['timestamp']] = $migration;
- }
- }
-
- return $migrations;
- }
-
- /**
- * Extracts information about a migration from its filename.
- *
- * Returns an array like:
- *
- * array(
- * 'group' => 'mygroup',
- * 'timestamp' => '1293214439',
- * 'description' => 'initial-setup',
- * 'id' => 'mygroup:1293214439'
- * );
- *
- * @param string The migration's filename
- * @return array Array of components about the migration
- */
- public static function get_migration_from_filename($file)
- {
- $migration = array();
-
- // Get rid of the file's "migrations/" prefix, the file extension and then
- // the filename itself. The "group" is essentially a slash delimited
- // path from the migrations folder to the migration file
- $migration['group'] = dirname(substr($file, 11, -strlen(EXT)));
-
- if(strpos(basename($file), "_"))
- {
- list($migration['timestamp'], $migration['description'])
- = explode('_', basename($file, EXT), 2);
- }
- else
- {
- $migration['timestamp'] = basename($file, EXT);
- $migration['description'] = "";
- }
- $migration['id'] = $migration['group'].':'.$migration['timestamp'];
-
- return $migration;
- }
-
- /**
- * Gets a migration file from its timestamp, description and group
- *
- * @param integer|array The migration's ID or an array of timestamp, description
- * @param string The migration group
- * @return string Path to the migration file
- */
- public static function get_filename_from_migration(array $migration)
- {
- $group = $migration['group'];
-
- if(!empty($migration['description']))
- {
- $migration = $migration['timestamp'].'_'.$migration['description'];
- }
- else
- {
- $migration = $migration['timestamp'];
- }
-
- $group = ( ! empty($group)) ? (rtrim($group, '/').'/') : '';
-
- return $group.$migration.EXT;
- }
-
- /**
- * Allows you to work out the class name from either an array of migration
- * info, or from a migration id
- *
- * @param string|array The migration's ID or array of migration data
- * @return string The migration class name
- */
- public static function get_class_from_migration($migration)
- {
- if (is_string($migration))
- {
- $migration = str_replace(array(':', '/'), ' ', $migration);
- }
- else
- {
- $migration = str_replace('/', ' ', $migration['group']).'_'.$migration['timestamp'];
- }
-
- return 'Migration_'.str_replace(array(' ', '-'), '_', ucwords($migration));
- }
-}
140 classes/model/minion/migration.php
View
@@ -18,7 +18,7 @@ class Model_Minion_Migration extends Model
protected $_table = 'minion_migrations';
/**
- * Constructs the model, taking a Database connection as the first and only
+ * Constructs the model, taking a Database connection as the first and only
* parameter
*
* @param Kohana_Database Database connection to use
@@ -37,11 +37,125 @@ public function available_migrations()
{
$files = Kohana::list_files('migrations');
- return Minion_Migration_Util::compile_migrations_from_files($files);
+ return $this->compile_migrations_from_files($files);
}
/**
- * Checks to see if the minion migrations table exists and attempts to
+ * Parses a set of files generated by Kohana::find_files and compiles it
+ * down into an array of migrations
+ *
+ * @param array Available files
+ * @return array Available Migrations
+ */
+ public function compile_migrations_from_files(array $files)
+ {
+ $migrations = array();
+
+ foreach ($files as $file => $path)
+ {
+ // If this is a directory we're dealing with
+ if (is_array($path))
+ {
+ $migrations += $this->compile_migrations_from_files($path);
+ }
+ else
+ {
+ $migration = $this->get_migration_from_filename($file);
+
+ $migrations[$migration['group'].':'.$migration['timestamp']] = $migration;
+ }
+ }
+
+ return $migrations;
+ }
+
+ /**
+ * Extracts information about a migration from its filename.
+ *
+ * Returns an array like:
+ *
+ * array(
+ * 'group' => 'mygroup',
+ * 'timestamp' => '1293214439',
+ * 'description' => 'initial-setup',
+ * 'id' => 'mygroup:1293214439'
+ * );
+ *
+ * @param string The migration's filename
+ * @return array Array of components about the migration
+ */
+ public function get_migration_from_filename($file)
+ {
+ $migration = array();
+
+ // Get rid of the file's "migrations/" prefix, the file extension and then
+ // the filename itself. The "group" is essentially a slash delimited
+ // path from the migrations folder to the migration file
+ $migration['group'] = dirname(substr($file, 11, -strlen(EXT)));
+
+ if(strpos(basename($file), "_"))
+ {
+ list($migration['timestamp'], $migration['description'])
+ = explode('_', basename($file, EXT), 2);
+ }
+ else
+ {
+ $migration['timestamp'] = basename($file, EXT);
+ $migration['description'] = "";
+ }
+ $migration['id'] = $migration['group'].':'.$migration['timestamp'];
+
+ return $migration;
+ }
+
+ /**
+ * Gets a migration file from its timestamp, description and group
+ *
+ * @param integer|array The migration's ID or an array of timestamp, description
+ * @param string The migration group
+ * @return string Path to the migration file
+ */
+ public function get_filename_from_migration(array $migration)
+ {
+ $group = $migration['group'];
+
+ if(!empty($migration['description']))
+ {
+ $migration = $migration['timestamp'].'_'.$migration['description'];
+ }
+ else
+ {
+ $migration = $migration['timestamp'];
+ }
+
+ $group = ( ! empty($group)) ? (rtrim($group, '/').'/') : '';
+
+ return $group.$migration.EXT;
+ }
+
+ /**
+ * Allows you to work out the class name from either an array of migration
+ * info, or from a migration id
+ *
+ * @param string|array The migration's ID or array of migration data
+ * @return string The migration class name
+ */
+ public function get_class_from_migration($migration)
+ {
+ if (is_string($migration))
+ {
+ $migration = str_replace(array(':', '/'), ' ', $migration);
+ }
+ else
+ {
+ $migration = str_replace('/', ' ', $migration['group']).'_'.$migration['timestamp'];
+ }
+
+ return 'Migration_'.str_replace(array(' ', '-'), '_', ucwords($migration));
+ }
+
+ /**
+ * Checks to see if the minion migrations table exists and attempts to
* create it if it doesn't
*
* @return boolean
@@ -101,8 +215,8 @@ public function table($table = NULL)
}
/**
- * Creates a new select query which includes all fields in the migrations
- * table plus a `id` field which is a combination of the timestamp and the
+ * Creates a new select query which includes all fields in the migrations
+ * table plus a `id` field which is a combination of the timestamp and the
* description
*
* @return Database_Query_Builder_Select
@@ -188,7 +302,7 @@ public function delete_migration($migration)
public function update_migration(array $current, array $new)
{
$set = array();
-
+
foreach ($new as $key => $value)
{
if ($key !== 'id' AND $current[$key] !== $value)
@@ -242,7 +356,7 @@ public function fetch_all($key = NULL, $value = NULL)
/**
* Fetches the latest version for all installed groups
*
- * If a group does not have any applied migrations then no result will be
+ * If a group does not have any applied migrations then no result will be
* returned for it
*
* @return Kohana_Database_Result
@@ -265,7 +379,7 @@ public function fetch_current_versions($key = 'group', $value = NULL)
/**
* Fetches a list of groups
*
- * @return array
+ * @return array
*/
public function fetch_groups($group_as_key = FALSE)
{
@@ -277,7 +391,7 @@ public function fetch_groups($group_as_key = FALSE)
}
/**
- * Fetch a list of migrations that need to be applied in order to reach the
+ * Fetch a list of migrations that need to be applied in order to reach the
* required version
*
* @param string The groups to get migrations for
@@ -334,7 +448,7 @@ public function fetch_required_migrations(array $group, $target = TRUE)
$query->where('timestamp', '>=', $target);
}
}
-
+
}
// Absolute timestamp
else
@@ -353,7 +467,7 @@ public function fetch_required_migrations(array $group, $target = TRUE)
$query->where('timestamp', '>', $target);
}
}
-
+
// If we're migrating up
if ($up)
{
@@ -408,7 +522,7 @@ public function resolve_target($group, $target)
$timestamp = $group_applied ? $statuses[$group]['timestamp'] : NULL;
$amount = substr($target, 1);
$up = $target[0] === '+';
-
+
if ($up)
{
if ($group_applied)
@@ -421,7 +535,7 @@ public function resolve_target($group, $target)
if ( ! $group_applied)
{
throw new Kohana_Exception(
- "Cannot migrate group :group down as none of its migrations have been applied",
+ "Cannot migrate group :group down as none of its migrations have been applied",
array(':group' => $group)
);
}
Please sign in to comment.
Something went wrong with that request. Please try again.