also_migrate 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -15,14 +15,25 @@ Define the model
15
15
 
16
16
  <pre>
17
17
  class Article &lt; ActiveRecord::Base
18
- also_migrate :article_archives, :ignore => 'moved_at', :indexes => 'id'
18
+ also_migrate(
19
+ :article_archives,
20
+ :add => [
21
+ # Parameters to ActiveRecord::ConnectionAdapters::SchemaStatements#add_column
22
+ [ 'deleted_at', :datetime, {} ]
23
+ ],
24
+ :subtract => 'restored_at',
25
+ :ignore => 'deleted_at',
26
+ :indexes => 'id'
27
+ )
19
28
  end
20
29
  </pre>
21
30
 
22
31
  Options:
23
32
 
33
+ * <code>add</code> Create columns that the original table doesn't have (defaults to none)
34
+ * <code>subtract</code> Exclude columns from the original table (defaults to none)
24
35
  * <code>ignore</code> Ignore migrations that apply to certain columns (defaults to none)
25
- * <code>indexes</code> Only index certain columns (defaults to all)
36
+ * <code>indexes</code> Only index certain columns (duplicates all indexes by default)
26
37
 
27
38
  That's it!
28
39
  ----------
@@ -15,6 +15,8 @@ module AlsoMigrate
15
15
  @also_migrate_config << {
16
16
  :tables => args.collect(&:to_s),
17
17
  :options => {
18
+ :add => options[:add] ? options[:add] : [],
19
+ :subtract => [ options[:subtract] ].flatten.compact,
18
20
  :ignore => [ options[:ignore] ].flatten.compact,
19
21
  :indexes => options[:indexes] ? [ options[:indexes] ].flatten : nil
20
22
  }
@@ -44,17 +44,17 @@ module AlsoMigrate
44
44
  config[:tables].each do |new_table|
45
45
  if !connection.table_exists?(new_table) && connection.table_exists?(old_table)
46
46
  columns = connection.columns(old_table).collect(&:name)
47
- columns -= options[:ignore].collect(&:to_s)
47
+ columns -= options[:subtract].collect(&:to_s)
48
48
  columns.collect! { |col| connection.quote_column_name(col) }
49
- engine =
50
- if connection.class.to_s.include?('Mysql')
51
- 'ENGINE=' + connection.select_one(<<-SQL)['Engine']
52
- SHOW TABLE STATUS
53
- WHERE Name = '#{old_table}'
54
- SQL
55
- end
56
49
  indexes = options[:indexes]
57
50
  if indexes
51
+ engine =
52
+ if connection.class.to_s.include?('Mysql')
53
+ 'ENGINE=' + connection.select_one(<<-SQL)['Engine']
54
+ SHOW TABLE STATUS
55
+ WHERE Name = '#{old_table}'
56
+ SQL
57
+ end
58
58
  connection.execute(<<-SQL)
59
59
  CREATE TABLE #{new_table} #{engine}
60
60
  AS SELECT #{columns.join(',')}
@@ -71,6 +71,25 @@ module AlsoMigrate
71
71
  SQL
72
72
  end
73
73
  end
74
+ if connection.table_exists?(new_table)
75
+ if options[:add] || options[:subtract]
76
+ columns = connection.columns(new_table).collect(&:name)
77
+ end
78
+ if options[:add]
79
+ options[:add].each do |column|
80
+ unless columns.include?(column[0])
81
+ connection.add_column(*([ new_table ] + column))
82
+ end
83
+ end
84
+ end
85
+ if options[:subtract]
86
+ options[:subtract].each do |column|
87
+ if columns.include?(column)
88
+ connection.remove_column(new_table, column)
89
+ end
90
+ end
91
+ end
92
+ end
74
93
  end
75
94
  end
76
95
  end
@@ -1,3 +1,3 @@
1
1
  module AlsoMigrate
2
- VERSION = "0.2.0" unless defined?(::AlsoMigrate::VERSION)
2
+ VERSION = "0.2.1" unless defined?(::AlsoMigrate::VERSION)
3
3
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 0
9
- version: 0.2.0
8
+ - 1
9
+ version: 0.2.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Winton Welsh
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-04 00:00:00 -08:00
17
+ date: 2010-12-12 00:00:00 -08:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency