flatten_migrations 0.0.1
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.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.markdown +31 -0
- data/Rakefile +1 -0
- data/flatten_migrations.gemspec +23 -0
- data/lib/flatten_migrations.rb +9 -0
- data/lib/flatten_migrations/version.rb +3 -0
- data/lib/tasks/flatten_migrations.rake +76 -0
- metadata +82 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.markdown
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
Flatten migrations
|
2
|
+
===================
|
3
|
+
|
4
|
+
A gem that adds db:flatten_migrattions to rake tasks in your rails project.
|
5
|
+
|
6
|
+
Requirements
|
7
|
+
------------
|
8
|
+
|
9
|
+
You have to ensure that your **schema format is set to :ruby** in configuration of
|
10
|
+
your project.
|
11
|
+
So in your *project*/config/environments/*.rb you should have a line:
|
12
|
+
|
13
|
+
```
|
14
|
+
config.active_record.schema_format = :ruby
|
15
|
+
```
|
16
|
+
|
17
|
+
How does it work
|
18
|
+
----------------
|
19
|
+
|
20
|
+
The task steps are as follows:
|
21
|
+
|
22
|
+
1. run pending migrations (rake db:migrate)
|
23
|
+
2. wipe out *project*/db/migrate direcotry
|
24
|
+
3. generate initial migration from existing database schema file
|
25
|
+
initial migration is assumed to be the one which was last executed
|
26
|
+
4. create auxiliary migration which adjusts the schema_migrations table
|
27
|
+
5. run the new migration
|
28
|
+
|
29
|
+
**Both new migrations (*initial* and *auxiliary*) are also irreversible.**
|
30
|
+
|
31
|
+
Your database is safe and it should not erase any data except the schema_migrations table.
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "flatten_migrations/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "flatten_migrations"
|
7
|
+
s.version = FlattenMigrations::VERSION
|
8
|
+
s.authors = ["Krzysztof Sakwerda"]
|
9
|
+
s.email = ["ksakwerda@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/simplificator/flatten_migrations"
|
11
|
+
s.summary = "Migration flattener for rails applications"
|
12
|
+
s.description = "Adds rake db:flatten_migrations task which deletes existing migrations and generates initial one directly from schema.rb file."
|
13
|
+
|
14
|
+
s.rubyforge_project = "flatten_migrations"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_dependency "rake"
|
22
|
+
s.add_dependency "rails", ">= 3.0"
|
23
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
namespace :db do
|
2
|
+
desc "Delete all migrations from db/migrate directory and create initial migration from schema"
|
3
|
+
task :flatten_migrations do
|
4
|
+
migrate_db
|
5
|
+
check_schema
|
6
|
+
delete_migrations
|
7
|
+
create_initial
|
8
|
+
create_auxiliary
|
9
|
+
migrate_db true
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
def check_schema
|
14
|
+
schema_path = File.join "db", "schema.rb"
|
15
|
+
begin
|
16
|
+
File.open( File.join( Rails.root.to_s, schema_path ), 'r')
|
17
|
+
rescue
|
18
|
+
puts "\033[0;91mIt seems that database schema file #{schema_path} is not present.\033[0m"
|
19
|
+
puts "Check if you have set schema format to :ruby in your configuration file."
|
20
|
+
puts "If yes try to run \033[0;93mrake db:schema:dump.\033[0m"
|
21
|
+
exit
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def migrate_db( force = false )
|
26
|
+
puts "\033[0;95mRunning #{force ? "initial" : "pending "}migration#{force ? "" : "s"}.\033[0m"
|
27
|
+
if force then Rake::Task[ "db:migrate" ].reenable end
|
28
|
+
Rake::Task[ "db:migrate" ].invoke
|
29
|
+
puts "\033[0;92mDone.\033[0m"
|
30
|
+
end
|
31
|
+
|
32
|
+
def delete_migrations
|
33
|
+
puts "\033[0;95mDeleting existing migrations.\033[0m"
|
34
|
+
Dir[ File.join Rails.root.to_s, "db", "migrate", "*" ].each{ |f| File.delete f }
|
35
|
+
puts "\033[0;92mDone.\033[0m"
|
36
|
+
end
|
37
|
+
|
38
|
+
def create_initial
|
39
|
+
puts "\033[0;95mCreating initial migration from schema.\033[0m"
|
40
|
+
|
41
|
+
initial_file = File.open( File.join( Rails.root.to_s, "db", "migrate", "#{ActiveRecord::Migrator.current_version.to_s}_initial.rb" ), 'w' )
|
42
|
+
initial_file.write(
|
43
|
+
"class Initial < ActiveRecord::Migration\n" + \
|
44
|
+
"\tdef self.up\n" )
|
45
|
+
|
46
|
+
no_write_flag = true
|
47
|
+
File.open( File.join( Rails.root.to_s, "db", "schema.rb" ), 'r').each_line do |line|
|
48
|
+
initial_file.write "\t#{line.gsub( /,(\s*):force(\s*)=>(\s*)true/, "" )}" unless no_write_flag
|
49
|
+
no_write_flag = !( line.starts_with? "ActiveRecord::Schema.define" ) unless !no_write_flag
|
50
|
+
end
|
51
|
+
|
52
|
+
initial_file.write(
|
53
|
+
"\n" + \
|
54
|
+
"\tdef self.down\n" + \
|
55
|
+
"\t\traise ActiveRecord::IrreversibleMigration\n" + \
|
56
|
+
"\tend\n" + \
|
57
|
+
"end\n" )
|
58
|
+
initial_file.close
|
59
|
+
puts "\033[0;92mDone.\033[0m"
|
60
|
+
end
|
61
|
+
|
62
|
+
def create_auxiliary
|
63
|
+
puts "\033[0;95mCreating auxiliary migration that will fix schema_migrations table.\033[0m"
|
64
|
+
File.open( File.join( Rails.root.to_s, "db", "migrate", "#{Time.now.strftime "%Y%m%d%H%M%S"}_auxiliary.rb" ), 'w' ) do |f|
|
65
|
+
f.puts "class Auxiliary < ActiveRecord::Migration"
|
66
|
+
f.puts "\tdef self.up\n"
|
67
|
+
f.puts "\t\texecute \"TRUNCATE schema_migrations;\""
|
68
|
+
f.puts "\t\texecute \"INSERT INTO schema_migrations VALUES ('#{ActiveRecord::Migrator.current_version.to_s}');\""
|
69
|
+
f.puts "\tend\n"
|
70
|
+
f.puts "\tdef self.down\n"
|
71
|
+
f.puts "\t\traise ActiveRecord::IrreversibleMigration"
|
72
|
+
f.puts "\tend"
|
73
|
+
f.puts "end\n"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
metadata
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: flatten_migrations
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Krzysztof Sakwerda
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2011-07-28 00:00:00 +02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rake
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rails
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "3.0"
|
34
|
+
version:
|
35
|
+
description: Adds rake db:flatten_migrations task which deletes existing migrations and generates initial one directly from schema.rb file.
|
36
|
+
email:
|
37
|
+
- ksakwerda@gmail.com
|
38
|
+
executables: []
|
39
|
+
|
40
|
+
extensions: []
|
41
|
+
|
42
|
+
extra_rdoc_files: []
|
43
|
+
|
44
|
+
files:
|
45
|
+
- .gitignore
|
46
|
+
- Gemfile
|
47
|
+
- README.markdown
|
48
|
+
- Rakefile
|
49
|
+
- flatten_migrations.gemspec
|
50
|
+
- lib/flatten_migrations.rb
|
51
|
+
- lib/flatten_migrations/version.rb
|
52
|
+
- lib/tasks/flatten_migrations.rake
|
53
|
+
has_rdoc: true
|
54
|
+
homepage: https://github.com/simplificator/flatten_migrations
|
55
|
+
licenses: []
|
56
|
+
|
57
|
+
post_install_message:
|
58
|
+
rdoc_options: []
|
59
|
+
|
60
|
+
require_paths:
|
61
|
+
- lib
|
62
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: "0"
|
67
|
+
version:
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: "0"
|
73
|
+
version:
|
74
|
+
requirements: []
|
75
|
+
|
76
|
+
rubyforge_project: flatten_migrations
|
77
|
+
rubygems_version: 1.3.5
|
78
|
+
signing_key:
|
79
|
+
specification_version: 3
|
80
|
+
summary: Migration flattener for rails applications
|
81
|
+
test_files: []
|
82
|
+
|