data_migrator 1.7 → 1.8
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/lib/data_migrator.rb +111 -83
- data/lib/extensions/railties/engine.rb +23 -0
- data/lib/extensions/railties/engine/configuration.rb +30 -0
- data/lib/tasks/data_migrator.rake +30 -13
- metadata +9 -7
data/lib/data_migrator.rb
CHANGED
@@ -1,73 +1,101 @@
|
|
1
1
|
require "benchmark"
|
2
|
+
require 'extensions/railties/engine'
|
3
|
+
require 'extensions/railties/engine/configuration'
|
2
4
|
|
3
5
|
class DataMigrationTask < Rails::Railtie
|
4
6
|
rake_tasks do
|
5
|
-
Dir[File.join(File.dirname(__FILE__),'tasks/*.rake')].each { |f| load f }
|
7
|
+
Dir[File.join(File.dirname(__FILE__), 'tasks/*.rake')].each { |f| load f }
|
6
8
|
end
|
7
9
|
end
|
8
10
|
|
9
11
|
module RussellEdge
|
10
12
|
class DataMigrator
|
11
13
|
REMOVE_FILES_REGEX = /^\./
|
12
|
-
|
14
|
+
|
13
15
|
class << self
|
16
|
+
def migrations_path
|
17
|
+
"#{Rails.root}/db/data_migrations/"
|
18
|
+
end
|
19
|
+
|
20
|
+
def migrations(path)
|
21
|
+
files = Dir["#{path}/**/[0-9]*_*.rb" ]
|
22
|
+
|
23
|
+
seen = Hash.new false
|
24
|
+
|
25
|
+
migrations = files.map do |file|
|
26
|
+
version, name = file.scan(/([0-9]+)_([_a-z0-9]*)\.?([_a-z0-9]*)?.rb/).first
|
27
|
+
|
28
|
+
raise ActiveRecord::IllegalMigrationNameError.new(file) unless version
|
29
|
+
version = version.to_i
|
30
|
+
name = name.camelize
|
31
|
+
|
32
|
+
raise ActiveRecord::DuplicateMigrationVersionError.new(version) if seen[version]
|
33
|
+
raise ActiveRecord::DuplicateMigrationNameError.new(name) if seen[name]
|
34
|
+
|
35
|
+
seen[version] = seen[name] = true
|
36
|
+
|
37
|
+
{:name => File.basename(file), :filename => file, :version => version}
|
38
|
+
end
|
39
|
+
|
40
|
+
migrations.sort{|h| h[:version]}
|
41
|
+
end
|
42
|
+
|
14
43
|
def next_migration_number
|
15
|
-
|
44
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
16
45
|
end
|
17
|
-
|
46
|
+
|
18
47
|
def initialize_data_migrations_table
|
19
48
|
puts "** data_migrations table missing creating now...."
|
20
|
-
puts ActiveRecord::Migrator.run(:up, File.join(File.dirname(__FILE__),'../db/migrate/'), 20100819181805)
|
49
|
+
puts ActiveRecord::Migrator.run(:up, File.join(File.dirname(__FILE__), '../db/migrate/'), 20100819181805)
|
21
50
|
puts "** done"
|
22
51
|
end
|
23
|
-
|
24
|
-
def prepare_migrations
|
25
|
-
target = "#{Rails.root}/db/data_migrations/"
|
26
52
|
|
27
|
-
|
28
|
-
|
53
|
+
def copy(destination, sources, options = {})
|
54
|
+
copied = []
|
29
55
|
|
30
|
-
unless
|
31
|
-
FileUtils.mkdir_p "#{target}/ignore/app/"
|
32
|
-
FileUtils.cp files, "#{target}/ignore/app/"
|
33
|
-
puts "copied #{files.size} data_migrations to db/data_migrations/ignore/app"
|
34
|
-
end
|
56
|
+
FileUtils.mkdir_p(destination) unless File.exists?(destination)
|
35
57
|
|
36
|
-
|
37
|
-
|
58
|
+
destination_migrations = migrations(destination)
|
59
|
+
last = destination_migrations.last
|
60
|
+
sources.each do |scope, path|
|
61
|
+
source_migrations = migrations(path)
|
38
62
|
|
39
|
-
|
40
|
-
FileUtils.mkdir_p target
|
41
|
-
FileUtils.cp files, target
|
42
|
-
puts "copied #{files.size} migrations to db/data_migrations"
|
43
|
-
end
|
44
|
-
end
|
63
|
+
source_migrations.each do |migration|
|
45
64
|
|
46
|
-
|
47
|
-
|
65
|
+
source = File.read(migration[:filename])
|
66
|
+
source = "# This migration comes from #{scope} (originally #{migration[:version]})\n#{source}"
|
48
67
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
68
|
+
if duplicate = destination_migrations.detect { |m| m[:name] == migration[:name] }
|
69
|
+
if options[:on_skip] && duplicate.scope != scope.to_s
|
70
|
+
options[:on_skip].call(scope, migration)
|
71
|
+
end
|
72
|
+
next
|
73
|
+
end
|
74
|
+
|
75
|
+
migration[:version] = next_migration_number().to_i
|
76
|
+
new_path = File.join(destination, "#{File.basename(migration[:filename], '.*')}.#{scope}.rb")
|
77
|
+
old_path, migration[:filename] = migration[:filename], new_path
|
78
|
+
|
79
|
+
File.open(migration[:filename], "w") { |f| f.write source }
|
80
|
+
copied << migration
|
81
|
+
options[:on_copy].call(scope, migration, old_path) if options[:on_copy]
|
82
|
+
destination_migrations << migration
|
83
|
+
end
|
58
84
|
end
|
59
|
-
|
85
|
+
|
86
|
+
copied
|
60
87
|
end
|
88
|
+
|
61
89
|
end
|
62
|
-
|
90
|
+
|
63
91
|
def initialize(migrations_path=nil)
|
64
92
|
@default_migrations_path = migrations_path || "#{Rails.root}/db/data_migrations"
|
65
93
|
end
|
66
|
-
|
94
|
+
|
67
95
|
def migrate(passed_location=nil, passed_version=nil)
|
68
96
|
setup
|
69
|
-
|
70
|
-
location = passed_location.nil? ? @default_migrations_path
|
97
|
+
|
98
|
+
location = passed_location.nil? ? @default_migrations_path : passed_location
|
71
99
|
@@current_version = get_current_version
|
72
100
|
|
73
101
|
if passed_version.nil? || @@current_version.nil?
|
@@ -78,12 +106,12 @@ module RussellEdge
|
|
78
106
|
handle_higher_passed_version(passed_version)
|
79
107
|
end
|
80
108
|
end
|
81
|
-
|
109
|
+
|
82
110
|
def pending_migrations
|
83
111
|
versions = []
|
84
112
|
files = get_all_files
|
85
113
|
files.each do |file|
|
86
|
-
filename, version, klass_name =
|
114
|
+
filename, version, klass_name = separate_file_parts(file)
|
87
115
|
versions << filename unless version_has_been_migrated?(version)
|
88
116
|
end
|
89
117
|
|
@@ -99,64 +127,64 @@ module RussellEdge
|
|
99
127
|
|
100
128
|
current_version
|
101
129
|
end
|
102
|
-
|
130
|
+
|
103
131
|
def run_up(passed_version)
|
104
132
|
setup
|
105
|
-
|
133
|
+
|
106
134
|
raise "VERSION is required" unless passed_version
|
107
|
-
|
135
|
+
|
108
136
|
files = get_all_files
|
109
137
|
found = false
|
110
|
-
|
138
|
+
|
111
139
|
files.each do |file|
|
112
|
-
filename, version, klass_name =
|
140
|
+
filename, version, klass_name = separate_file_parts(file)
|
113
141
|
if passed_version == version
|
114
142
|
found = true
|
115
143
|
(version_has_been_migrated?(version)) ? (puts "** Version #{passed_version} has already been migrated") : handle_action(file, klass_name, version, :up)
|
116
144
|
end
|
117
145
|
end
|
118
|
-
|
146
|
+
|
119
147
|
puts "** Version #{passed_version} not found" unless found
|
120
|
-
|
148
|
+
|
121
149
|
end
|
122
|
-
|
150
|
+
|
123
151
|
def run_down(passed_version)
|
124
152
|
setup
|
125
|
-
|
153
|
+
|
126
154
|
raise "VERSION is required" unless passed_version
|
127
|
-
|
155
|
+
|
128
156
|
files = get_all_files
|
129
|
-
found = false
|
157
|
+
found = false
|
130
158
|
|
131
159
|
files.each do |file|
|
132
|
-
filename, version, klass_name =
|
160
|
+
filename, version, klass_name = separate_file_parts(file)
|
133
161
|
if passed_version == version
|
134
162
|
found = true
|
135
163
|
(version_has_been_migrated?(version)) ? handle_action(file, klass_name, version, :down) : (puts "** Version #{passed_version} has not been migrated")
|
136
164
|
end
|
137
165
|
end
|
138
|
-
|
166
|
+
|
139
167
|
puts "** Version #{passed_version} not found" unless found
|
140
|
-
|
168
|
+
|
141
169
|
end
|
142
|
-
|
170
|
+
|
143
171
|
private
|
144
|
-
|
172
|
+
|
145
173
|
def setup
|
146
174
|
RussellEdge::DataMigrator.initialize_data_migrations_table unless data_migrations_table_exists?
|
147
|
-
|
148
|
-
unless File.directory?
|
149
|
-
FileUtils.mkdir_p(
|
175
|
+
|
176
|
+
unless File.directory? @default_migrations_path
|
177
|
+
FileUtils.mkdir_p(@default_migrations_path)
|
150
178
|
#create ignore folder
|
151
|
-
FileUtils.mkdir_p(File.join(@default_migrations_path,'ignore/'))
|
179
|
+
FileUtils.mkdir_p(File.join(@default_migrations_path, 'ignore/'))
|
152
180
|
end
|
153
181
|
end
|
154
|
-
|
182
|
+
|
155
183
|
def handle_higher_passed_version(passed_version)
|
156
184
|
files = get_all_files
|
157
185
|
|
158
186
|
files.each do |file|
|
159
|
-
filename, version, klass_name =
|
187
|
+
filename, version, klass_name = separate_file_parts(file)
|
160
188
|
if version <= passed_version
|
161
189
|
unless version_has_been_migrated?(version)
|
162
190
|
handle_action(file, klass_name, version, :up)
|
@@ -170,9 +198,9 @@ module RussellEdge
|
|
170
198
|
files = get_all_files
|
171
199
|
|
172
200
|
files.each do |file|
|
173
|
-
filename, version, klass_name =
|
201
|
+
filename, version, klass_name = separate_file_parts(file)
|
174
202
|
if passed_version.nil? or version <= passed_version
|
175
|
-
if !version_has_been_migrated?(version)
|
203
|
+
if !version_has_been_migrated?(version)
|
176
204
|
handle_action(file, klass_name, version, :up)
|
177
205
|
end
|
178
206
|
end
|
@@ -183,7 +211,7 @@ module RussellEdge
|
|
183
211
|
files = get_all_files
|
184
212
|
|
185
213
|
files.each do |file|
|
186
|
-
filename, version, klass_name =
|
214
|
+
filename, version, klass_name = separate_file_parts(file)
|
187
215
|
if version > passed_version
|
188
216
|
handle_action(file, klass_name, version, :down) if version_has_been_migrated?(version)
|
189
217
|
end
|
@@ -201,16 +229,15 @@ module RussellEdge
|
|
201
229
|
klass.send(action.to_s)
|
202
230
|
end
|
203
231
|
end
|
204
|
-
rescue Exception=>ex
|
205
|
-
RussellEdge::DataMigrator.cleanup_migrations
|
232
|
+
rescue Exception => ex
|
206
233
|
raise ex
|
207
234
|
end
|
208
235
|
time_str = "(%.4fs)" % time.real
|
209
236
|
puts "================Finished #{klass.to_s} in #{time_str}=="
|
210
|
-
|
237
|
+
|
211
238
|
(action == :up) ? insert_migration_version(version) : remove_migration_version(version)
|
212
239
|
end
|
213
|
-
|
240
|
+
|
214
241
|
def insert_migration_version(version)
|
215
242
|
ActiveRecord::Base.connection.execute("insert into data_migrations (version) values ('#{version}')")
|
216
243
|
end
|
@@ -225,42 +252,43 @@ module RussellEdge
|
|
225
252
|
db_result = ActiveRecord::Base.connection.select_all("select count(*) as num_rows from data_migrations where version = '#{version}'")
|
226
253
|
|
227
254
|
num_rows = db_result[0]['num_rows'] unless db_result == -1
|
228
|
-
|
255
|
+
|
229
256
|
result = false if (num_rows.nil? || num_rows.to_i == 0)
|
230
257
|
result
|
231
258
|
end
|
232
259
|
|
233
260
|
def data_migrations_table_exists?
|
234
|
-
table_names =
|
261
|
+
table_names = ActiveRecord::Base.connection.tables
|
235
262
|
table_names.include?('data_migrations')
|
236
263
|
end
|
237
264
|
|
238
|
-
def
|
265
|
+
def separate_file_parts(file)
|
239
266
|
paths = file.split('/')
|
240
267
|
filename = paths[paths.length - 1]
|
241
268
|
version = filename.split('_')[0]
|
242
269
|
klass_name = filename.gsub(/#{version}/, "").gsub(/.rb/, "")[1..filename.length]
|
270
|
+
klass_name = klass_name.split('.')[0] if klass_name.split('.').length > 1 #check for scope of engine name
|
243
271
|
|
244
272
|
return filename, version.to_i, klass_name
|
245
273
|
end
|
246
274
|
|
247
275
|
def get_all_files
|
248
276
|
files = []
|
249
|
-
|
277
|
+
|
250
278
|
if File.directory? @default_migrations_path
|
251
|
-
|
252
|
-
files_or_directories = Dir.entries(@default_migrations_path).map{|directory| directory}
|
253
279
|
|
254
|
-
files_or_directories.
|
255
|
-
|
280
|
+
files_or_directories = Dir.entries(@default_migrations_path).map { |directory| directory }
|
281
|
+
|
282
|
+
files_or_directories.delete_if { |name| name =~ REMOVE_FILES_REGEX } #remove any file leading with . or ..
|
283
|
+
files_or_directories.delete_if { |name| name == 'ignore' } #ignore the ignore folder
|
284
|
+
|
256
285
|
|
257
|
-
|
258
286
|
files_or_directories.each do |file_or_directory|
|
259
287
|
file_or_directory = @default_migrations_path + "/" + file_or_directory
|
260
288
|
files = get_files_in_directory(file_or_directory, files)
|
261
289
|
end
|
262
290
|
|
263
|
-
files.sort! {|x,y| File.basename(x) <=> File.basename(y)}
|
291
|
+
files.sort! { |x, y| File.basename(x) <=> File.basename(y) }
|
264
292
|
end
|
265
293
|
|
266
294
|
files
|
@@ -268,10 +296,10 @@ module RussellEdge
|
|
268
296
|
|
269
297
|
def get_files_in_directory(file_or_directory, files)
|
270
298
|
unless file_or_directory =~ /\w\.rb/
|
271
|
-
files_or_directories = Dir.entries(file_or_directory).map{|directory| directory}
|
299
|
+
files_or_directories = Dir.entries(file_or_directory).map { |directory| directory }
|
272
300
|
|
273
|
-
files_or_directories.delete_if{|name| name =~ REMOVE_FILES_REGEX} #remove any file leading with . or ..
|
274
|
-
files_or_directories.delete_if{|name| name == 'ignore'} #ignore the ignore folder
|
301
|
+
files_or_directories.delete_if { |name| name =~ REMOVE_FILES_REGEX } #remove any file leading with . or ..
|
302
|
+
files_or_directories.delete_if { |name| name == 'ignore' } #ignore the ignore folder
|
275
303
|
|
276
304
|
files_or_directories.each do |_file_or_directory|
|
277
305
|
_file_or_directory = file_or_directory + "/" + _file_or_directory
|
@@ -0,0 +1,23 @@
|
|
1
|
+
Rails::Engine.class_eval do
|
2
|
+
rake_tasks do
|
3
|
+
next if self.is_a?(Rails::Application)
|
4
|
+
next unless has_data_migrations?
|
5
|
+
|
6
|
+
namespace railtie_name do
|
7
|
+
namespace :install do
|
8
|
+
desc "Copy data_migrations from #{railtie_name} to application"
|
9
|
+
task :data_migrations do
|
10
|
+
ENV["FROM"] = railtie_name
|
11
|
+
Rake::Task["railties:install:data_migrations"].invoke
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
def has_data_migrations?
|
20
|
+
paths["db/data_migrations"].existent.any?
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
Rails::Engine::Configuration.class_eval do
|
2
|
+
def paths
|
3
|
+
@paths ||= begin
|
4
|
+
paths = Rails::Paths::Root.new(@root)
|
5
|
+
paths.add "app", :eager_load => true, :glob => "*"
|
6
|
+
paths.add "app/assets", :glob => "*"
|
7
|
+
paths.add "app/controllers", :eager_load => true
|
8
|
+
paths.add "app/helpers", :eager_load => true
|
9
|
+
paths.add "app/models", :eager_load => true
|
10
|
+
paths.add "app/mailers", :eager_load => true
|
11
|
+
paths.add "app/views"
|
12
|
+
paths.add "lib", :load_path => true
|
13
|
+
paths.add "lib/assets", :glob => "*"
|
14
|
+
paths.add "lib/tasks", :glob => "**/*.rake"
|
15
|
+
paths.add "config"
|
16
|
+
paths.add "config/environments", :glob => "#{Rails.env}.rb"
|
17
|
+
paths.add "config/initializers", :glob => "**/*.rb"
|
18
|
+
paths.add "config/locales", :glob => "*.{rb,yml}"
|
19
|
+
paths.add "config/routes", :with => "config/routes.rb"
|
20
|
+
paths.add "db"
|
21
|
+
paths.add "db/migrate"
|
22
|
+
paths.add "db/data_migrations"
|
23
|
+
paths.add "db/seeds", :with => "db/seeds.rb"
|
24
|
+
paths.add "vendor", :load_path => true
|
25
|
+
paths.add "vendor/assets", :glob => "*"
|
26
|
+
paths.add "vendor/plugins"
|
27
|
+
paths
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -2,20 +2,16 @@ namespace :db do
|
|
2
2
|
desc 'migrates data into database'
|
3
3
|
task :migrate_data => :environment do
|
4
4
|
passed_version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
5
|
-
|
5
|
+
|
6
6
|
RussellEdge::DataMigrator.new.migrate(nil, passed_version)
|
7
|
-
RussellEdge::DataMigrator.cleanup_migrations
|
8
|
-
|
9
7
|
end#end migrate_data task
|
10
8
|
|
11
9
|
namespace :migrate_data do
|
12
10
|
task :list_pending => :environment do
|
13
|
-
RussellEdge::DataMigrator.prepare_migrations
|
14
11
|
pending_migrations = RussellEdge::DataMigrator.new.pending_migrations
|
15
12
|
puts "================Pending Data Migrations=========="
|
16
13
|
puts pending_migrations
|
17
14
|
puts "================================================="
|
18
|
-
RussellEdge::DataMigrator.cleanup_migrations
|
19
15
|
end#end list_pending task
|
20
16
|
|
21
17
|
task :version => :environment do
|
@@ -26,23 +22,44 @@ namespace :db do
|
|
26
22
|
task :up => :environment do
|
27
23
|
passed_version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
28
24
|
raise "VERSION is required" unless passed_version
|
29
|
-
|
30
|
-
RussellEdge::DataMigrator.prepare_migrations
|
25
|
+
|
31
26
|
RussellEdge::DataMigrator.new.run_up(passed_version)
|
32
|
-
RussellEdge::DataMigrator.cleanup_migrations
|
33
|
-
|
34
27
|
end#end up task
|
35
28
|
|
36
29
|
task :down => :environment do
|
37
30
|
passed_version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
38
31
|
raise "VERSION is required" unless passed_version
|
39
|
-
|
40
|
-
RussellEdge::DataMigrator.prepare_migrations
|
32
|
+
|
41
33
|
RussellEdge::DataMigrator.new.run_down(passed_version)
|
42
|
-
RussellEdge::DataMigrator.cleanup_migrations
|
43
|
-
|
44
34
|
end#end down task
|
45
35
|
end#end namespace
|
46
36
|
end
|
47
37
|
|
38
|
+
namespace :railties do
|
39
|
+
namespace :install do
|
40
|
+
# desc "Copies missing data_migrations from Railties (e.g. plugins, engines). You can specify Railties to use with FROM=railtie1,railtie2"
|
41
|
+
task :data_migrations => :environment do
|
42
|
+
to_load = ENV['FROM'].blank? ? :all : ENV['FROM'].split(",").map {|n| n.strip }
|
43
|
+
railties = ActiveSupport::OrderedHash.new
|
44
|
+
Rails.application.railties.all do |railtie|
|
45
|
+
next unless to_load == :all || to_load.include?(railtie.railtie_name)
|
46
|
+
|
47
|
+
if railtie.respond_to?(:paths) && (path = railtie.paths['db/data_migrations'].first)
|
48
|
+
railties[railtie.railtie_name] = path
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
on_skip = Proc.new do |name, migration|
|
53
|
+
puts "NOTE: Data Migration #{migration[:name]} from #{name} has been skipped. Migration with the same name already exists."
|
54
|
+
end
|
55
|
+
|
56
|
+
on_copy = Proc.new do |name, migration, old_path|
|
57
|
+
puts "Copied data_migration #{migration[:name]} from #{name}"
|
58
|
+
end
|
59
|
+
|
60
|
+
RussellEdge::DataMigrator.copy(RussellEdge::DataMigrator.migrations_path, railties, :on_skip => on_skip, :on_copy => on_copy)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
48
65
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: data_migrator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.8'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,19 +9,19 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-10-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement: &
|
15
|
+
name: rails
|
16
|
+
requirement: &70230211897860 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 2.3
|
21
|
+
version: '2.3'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70230211897860
|
25
25
|
description: Allows you to create data migrations that can be run up and down to insert
|
26
26
|
data into the database.
|
27
27
|
email: russellfholmes@gmail.com
|
@@ -31,6 +31,8 @@ extra_rdoc_files: []
|
|
31
31
|
files:
|
32
32
|
- db/migrate/20100819181805_create_data_migrations_table.rb
|
33
33
|
- lib/data_migrator.rb
|
34
|
+
- lib/extensions/railties/engine/configuration.rb
|
35
|
+
- lib/extensions/railties/engine.rb
|
34
36
|
- lib/generators/data_migration/data_migration_generator.rb
|
35
37
|
- lib/generators/data_migration/templates/migration_template.rb
|
36
38
|
- lib/generators/data_migration/USAGE
|
@@ -59,7 +61,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
59
61
|
version: '0'
|
60
62
|
requirements: []
|
61
63
|
rubyforge_project:
|
62
|
-
rubygems_version: 1.8.
|
64
|
+
rubygems_version: 1.8.11
|
63
65
|
signing_key:
|
64
66
|
specification_version: 3
|
65
67
|
summary: Creates Data Migrations for data similar to schema migrations.
|