eprothro/cassie

View on GitHub
lib/cassie/tasks/migration/create.rake

Summary

Maintainability
Test Coverage
require 'optparse'

namespace :cassie do
  namespace :migration do
    desc "Generates an empty migration file prefixed with the next semantic version number"
     task :create do
      include Cassie::Tasks::IO

      opts = {}
      OptionParser.new do |args|
        args.on("-b", "--build", "Bump build version number") do
          opts[:bump_type] = :build
        end
        args.on("-p", "--patch", "Bump patch version number") do
          opts[:bump_type] = :patch
        end
        args.on("-m", "--minor", "Bump minor version number") do
          opts[:bump_type] = :minor
        end
        args.on("-M", "--major", "Bump major version number") do
          opts[:bump_type] = :major
        end
        args.on("-v", "--version VERSION", "Explicitly set version") do |v|
          opts[:version] = v
        end
      end.parse!(argv)

      begin
        raise("A migration description is required.\n\nUsage:\n  cassie migration:create simple description") if argv.empty?
        name = argv.join(" ")

        version = Cassie::Schema::Version.new(opts[:version]) if opts[:version]
        version ||= Cassie::Schema.next_version(opts[:bump_type])
        version.description = name
        puts("-- Creating migration file for version #{version.number}")

        writer = Cassie::Schema::VersionWriter.new(version)
        writer.write
        rel_path = writer.filename.sub(Dir.pwd, "")
        puts "   > #{green('created')} #{rel_path}"
        puts "-- done"
      rescue => e
        output_error(e)
        abort
      end
    end
  end
end