public Migrator Parse(string[] args, Migrator migrator)
        {
            Options = new Dictionary<string, string>();
            var cli = new CommandParser();

            cli = CreateDefaultOpts(cli);
            cli = CreateCustomOpts(cli);

            cli.Parse(args);

            if (cli.UnknownCommands.Count > 0)
            {
                foreach (string unknown in cli.UnknownCommands)
                {
                    Console.WriteLine("Invalid command: " + unknown);
                }

                Console.WriteLine(cli.GetHelp());
                Environment.Exit(0);
            }
            else if (cli.MissingRequiredCommands.Count > 0)
            {
                foreach (string missing in cli.MissingRequiredCommands)
                {
                    Console.WriteLine("ERROR: Missing argument: " + missing);
                }

                Console.WriteLine(cli.GetHelp());
                Environment.Exit(0);
            }
            else if (_showHelp)
            {
                Console.WriteLine(cli.GetHelp());
                Environment.Exit(0);
            }

            migrator = InitMigrator(migrator);

            SetDefaultOptionsForMigrator(migrator);
            SetCustomOptionsForMigrator(migrator);

            string strategy = string.Empty;
            if (Options.ContainsKey("strategy"))
            {
                strategy = Options["strategy"];
            }

            migrator.Strategy = Factory.Create(strategy);

            return migrator;
        }
 public void SetUp()
 {
     _migrator = new Migrator();
     _migrator.Guard = new Guard();
 }
        public Migrator SetDefaultOptionsForMigrator(Migrator migrator)
        {
            // if (options.ini)
            // ini_parser.file = new File(options.ini)
            // if (options.section)
            // ini_parser.use_section = options.section

            if (Options.ContainsKey("suffix"))
            {
                migrator.Guard.Suffix = Options["suffix"];
            }

            if (Options.ContainsKey("host"))
            {
                migrator.DbInterface.Executor.Host = Options["host"];
            }

            if (Options.ContainsKey("password"))
            {
                migrator.DbInterface.Executor.Password = Options["password"];
            }

            if (Options.ContainsKey("database"))
            {
                migrator.DbInterface.Executor.Database = Options["database"];
            }

            if (Options.ContainsKey("command"))
            {
                migrator.DbInterface.Executor.Command = Options["command"];
            }

            if (Options.ContainsKey("args"))
            {
                migrator.DbInterface.Executor.Args = Options["args"];
            }

            if (Options.ContainsKey("username"))
            {
                migrator.DbInterface.Executor.Username = Options["username"];
            }

            return migrator;
        }
 public virtual Migrator SetCustomOptionsForMigrator(Migrator migrator)
 {
     return migrator;
 }
 public virtual Migrator InitMigrator(Migrator migrator)
 {
     throw new Exception("InitMigrator() must be overwritten!");
 }