interactive_migrations 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,11 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "interactive_migrations"
3
+ s.version = '0.0.2'
4
+ s.authors = ["James Tippett"]
5
+ s.email = ["hi@jamestippett.com"]
6
+
7
+ s.summary = "A rake task giving you interactive migrations in your rails 3 project"
8
+ s.description = "If your rails project has migrations, you are prompted to run each one, with a printout of the code which will be run. You have the option of running or skipping the migration. Useful for production deploys where migrations are a delicate task. Extracted from a large production web app."
9
+ s.homepage = "http://github.com/jtippett/interactive_migrations"
10
+ s.files = `git ls-files`.split("\n")
11
+ end
@@ -0,0 +1,11 @@
1
+ require 'interactive_migrations'
2
+ require 'rails'
3
+ module MyPlugin
4
+ class Railtie < Rails::Railtie
5
+ railtie_name :interactive_migrations
6
+
7
+ rake_tasks do
8
+ load "tasks/interactive_migrations.rake"
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ module InteractiveMigrations
2
+ require 'interactive_migrations/railtie' if defined?(Rails)
3
+ end
@@ -0,0 +1,48 @@
1
+ namespace :db do
2
+ namespace :migrate do
3
+
4
+ desc "Migrate Interactively"
5
+ task :interactive => :environment do
6
+ pending_migrations = ActiveRecord::Migrator.new(:up, 'db/migrate').pending_migrations
7
+
8
+ logger = Logger.new(Rails.root.join('log', 'migrations.log'))
9
+
10
+ if pending_migrations.any?
11
+ changed = false
12
+ puts "You have #{pending_migrations.size} pending migrations:"
13
+ pending_migrations.each do |pending_migration|
14
+ puts '--------------------------------'
15
+ puts '%4d %s' % [pending_migration.version, pending_migration.name]
16
+ puts '--------------------------------'
17
+ file = Rails.root.join pending_migration.filename
18
+ puts File.read(file)
19
+ puts '--------------------------------'
20
+ if agree("run this migration? y/n")
21
+ begin
22
+ time = Benchmark.measure { ActiveRecord::Migrator.run(:up, "db/migrate/", pending_migration.version) }
23
+ logger.info ('== %4d %s ' % [pending_migration.version, pending_migration.name]).ljust(100, '=') + "\n"
24
+ logger.info File.read(file)
25
+ logger.info ('== Migrated in %.4fs ' % time.real).ljust(100, '=') + "\n"
26
+ changed = true
27
+ rescue Exception => e
28
+ puts "Migration #{pending_migration.version} failed or was cancelled and returned this message:"
29
+ puts e
30
+ puts "Continuing.."
31
+ end
32
+ else
33
+ puts "skipping #{pending_migration.name}.\n"
34
+ end
35
+ end
36
+ if changed
37
+ if agree("You have performed one or more migrations. Rewrite schema.rb? y/n")
38
+ Rake::Task["db:schema:dump"].invoke
39
+ end
40
+ end
41
+ puts "done, with #{ActiveRecord::Migrator.new(:up, 'db/migrate').pending_migrations.size} further migrations pending"
42
+ else
43
+ puts "no migrations pending."
44
+ end
45
+ end
46
+
47
+ end # :migration
48
+ end # :db
metadata ADDED
@@ -0,0 +1,52 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: interactive_migrations
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - James Tippett
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-09-20 00:00:00.000000000Z
13
+ dependencies: []
14
+ description: If your rails project has migrations, you are prompted to run each one,
15
+ with a printout of the code which will be run. You have the option of running or
16
+ skipping the migration. Useful for production deploys where migrations are a delicate
17
+ task. Extracted from a large production web app.
18
+ email:
19
+ - hi@jamestippett.com
20
+ executables: []
21
+ extensions: []
22
+ extra_rdoc_files: []
23
+ files:
24
+ - interactive_migrations.gemspec
25
+ - lib/interactive_migrations.rb
26
+ - lib/interactive_migrations/railtie.rb
27
+ - lib/tasks/interactive_migrations.rake
28
+ homepage: http://github.com/jtippett/interactive_migrations
29
+ licenses: []
30
+ post_install_message:
31
+ rdoc_options: []
32
+ require_paths:
33
+ - lib
34
+ required_ruby_version: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ requirements: []
47
+ rubyforge_project:
48
+ rubygems_version: 1.8.10
49
+ signing_key:
50
+ specification_version: 3
51
+ summary: A rake task giving you interactive migrations in your rails 3 project
52
+ test_files: []