migraine 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in migraine.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,264 @@
1
+ # Migraine Ruby Gem
2
+
3
+ ## Introduction
4
+
5
+ Have you ever felt enthusiastic about migrating data from one
6
+ database to another? Me neither. Migraine is a simple gem to
7
+ assist in writing data migration scripts in Ruby. It supports
8
+ various database adapters (e.g. MySQL, SQLite3, PostgreSQL)
9
+ through its only dependency, the
10
+ [Sequel](https://github.com/jeremyevans/sequel) Ruby gem.
11
+
12
+ ## Requirements
13
+
14
+ * Ruby 1.9
15
+ * [Sequel](https://github.com/jeremyevans/sequel)
16
+
17
+ ## Installation
18
+
19
+ myproject.com
20
+ > gem install migraine
21
+
22
+ ## Todo
23
+
24
+ 1. `Migraine::Map#map` (or separate method) should be able to deal
25
+ with column type differences between source and destination. The
26
+ method should accept a block argument that takes source record
27
+ as input, and relies on developer to manipulate that and
28
+ return valid destination data.
29
+
30
+ migration.map 'table' do
31
+ map 'column' => 'new_column' do |source|
32
+ destination = "A new string from #{source}"
33
+ destination.upcase
34
+
35
+ destination
36
+ end
37
+ end
38
+
39
+ 2. Provide further adapter support for schema generator, and thus
40
+ migration file generation. As of now, migration files can only
41
+ be generated for MySQL databases since different databases
42
+ require different ways of generating a schema (which is used
43
+ for analyzing difference between source and destination.)
44
+
45
+ See `lib/migraine/generator.rb` for further details.
46
+
47
+ ## Using Migraine
48
+
49
+ ### Create migration file
50
+
51
+ myproject.com
52
+ > vim migrate.rb
53
+
54
+ ### The migration file
55
+
56
+ You must now tell Migraine what data you want to migrate, and
57
+ where. But first require the Migraine gem.
58
+
59
+ require 'migraine'
60
+
61
+ Create a migration, specifying source and destination databases.
62
+ For information about how to write the connection URI's, see the
63
+ documentation of [Sequel](https://github.com/jeremyevans/sequel).
64
+ It's very simple, I promise.
65
+
66
+ migration = Migraine::Migration.new(
67
+ from: "mysql://root:root@localhost/myproj_old",
68
+ to: "mysql://root:root@localhost/myproj"
69
+ )
70
+
71
+ Map source tables to destination tables. If the columns are
72
+ unchanged in the destination table, you do not need to provide
73
+ any block with instructions. Simply map source table to
74
+ destination table.
75
+
76
+ migration.map "products" => "spree_products"
77
+
78
+ If source and destination tables have the same name in both
79
+ databases, you can make it even shorter.
80
+
81
+ migration.map "products"
82
+
83
+ On the other hand, if the column names have changed at the
84
+ destination, you can provide instructions on how to map them.
85
+
86
+ migration.map "users" => "spree_users" do
87
+ map "crypted_password" => "encrypted_password"
88
+ map "salt" => "password_salt"
89
+
90
+ map "remember_token"
91
+ map "persistance_token"
92
+ map "perishable_token"
93
+ end
94
+
95
+ **TODO:** In the future, Migraine will provide methods for dealing
96
+ with differences in column types. See Todo section above.
97
+
98
+ When you have provided the mappings, tell Migraine that you want
99
+ to run the migration.
100
+
101
+ migration.run
102
+
103
+ ### Run migration file
104
+
105
+ myproject.com
106
+ > ruby migrate.rb
107
+
108
+ ## Generating migration files
109
+
110
+ Migraine can even generate migration files for you. This is
111
+ useful for databases with many tables, where you don't want to
112
+ type them all out manually.
113
+
114
+ ### Adapter support
115
+
116
+ At the moment, Migraine can only generate migrations
117
+ for MySQL databases. This is because to analyze the differences
118
+ between source and destination, we need to generate database
119
+ schemas as Hashes. Right now there is only a method for MySQL.
120
+
121
+ Please feel free to add methods for other adapters as well. You
122
+ can do this by forking Migraine, editing
123
+ `lib/migraine/generator.rb` and add a new method. The file
124
+ is commented with further instructions.
125
+
126
+ ### Create generation file
127
+
128
+ You will need to create a file with generation instructions, just
129
+ like you create a file for migrations.
130
+
131
+ myproject.com
132
+ > vim generate.rb
133
+
134
+ ### The generation file
135
+
136
+ All you need to do in your new Ruby file is to create a
137
+ `Migraine::Migration` with a source and destination, and tell
138
+ Migraine to generate a migration file for it.
139
+
140
+ migration = Migraine::Migration.new(
141
+ from: "mysql://root:root@localhost/myproj_old",
142
+ to: "mysql://root:root@localhost/myproj"
143
+ )
144
+
145
+ migration.generate 'migrate.rb'
146
+
147
+ When you run this file using `ruby generate.rb` or similar, it
148
+ will create a migrate.rb file containing table and column
149
+ mappings.
150
+
151
+ Migraine will try to determine the mappings by analyzing the
152
+ differences between source and destination. When it can't, it
153
+ will simply leave the destinations empty for you to fill in.
154
+
155
+ ### Table prefixes
156
+
157
+ If the destination database has many of the same tables as
158
+ source, but with an added prefix (e.g. source table 'users'
159
+ should be mapped to destination table 'spree_users'), you can use
160
+ the prefix method to tell Migraine about it and, and it will
161
+ consider that when looking for destination tables.
162
+
163
+ Add the following before your call to `Migration#generate`.
164
+
165
+ migration.prefix 'spree_'
166
+
167
+ ### Example
168
+
169
+ Following is a generation file and part of its resulting
170
+ migration file (abbreviated since Spree has many tables.)
171
+
172
+ #### generate.rb
173
+
174
+ require 'migraine'
175
+
176
+ migration = Migraine::Migration.new(
177
+ from: 'mysql://root:root@localhost/migraine_from',
178
+ to: 'mysql://root:root@localhost/migraine_to'
179
+ )
180
+
181
+ migration.prefix 'spree_'
182
+
183
+ migration.generate 'generated.rb'
184
+
185
+ After running `ruby generate.rb`, Migraine will generate the
186
+ following file.
187
+
188
+ #### generated.rb
189
+
190
+ require 'migraine'
191
+
192
+ migration = Migraine::Migration.new(
193
+ from: 'mysql://root:root@localhost/migraine_from',
194
+ to: 'mysql://root:root@localhost/migraine_to'
195
+ )
196
+
197
+ migration.map 'addresses' => 'spree_addresses'
198
+ map 'id'
199
+ map 'firstname'
200
+ map 'lastname'
201
+ map 'address1'
202
+ map 'address2'
203
+ map 'city'
204
+ map 'state_id'
205
+ map 'zipcode'
206
+ map 'country_id'
207
+ map 'phone'
208
+ map 'created_at'
209
+ map 'updated_at'
210
+ map 'state_name'
211
+ map 'alternative_phone'
212
+ end
213
+
214
+ migration.map 'adjustments' => 'spree_adjustments'
215
+ map 'id'
216
+ map 'order_id' => ''
217
+ map 'type' => ''
218
+ map 'amount'
219
+ map 'description' => ''
220
+ map 'position' => ''
221
+ map 'created_at'
222
+ map 'updated_at'
223
+ map 'adjustment_source_id' => ''
224
+ map 'adjustment_source_type' => ''
225
+ end
226
+
227
+ migration.map 'assets' => 'spree_assets'
228
+ map 'id'
229
+ map 'viewable_id'
230
+ map 'viewable_type'
231
+ map 'attachment_content_type'
232
+ map 'attachment_file_name'
233
+ map 'attachment_size'
234
+ map 'position'
235
+ map 'type'
236
+ map 'attachment_updated_at'
237
+ map 'attachment_width'
238
+ map 'attachment_height'
239
+ map 'alt'
240
+ end
241
+
242
+ migration.map 'calculators' => 'spree_calculators'
243
+ map 'id'
244
+ map 'type'
245
+ map 'calculable_id'
246
+ map 'calculable_type'
247
+ map 'created_at'
248
+ map 'updated_at'
249
+ end
250
+
251
+ migration.map 'checkouts' => ''
252
+ map 'id' => ''
253
+ map 'order_id' => ''
254
+ map 'email' => ''
255
+ map 'ip_address' => ''
256
+ map 'special_instructions' => ''
257
+ map 'bill_address_id' => ''
258
+ map 'created_at' => ''
259
+ map 'updated_at' => ''
260
+ map 'state' => ''
261
+ map 'ship_address_id' => ''
262
+ map 'shipping_method_id' => ''
263
+ end
264
+
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.pattern = 'spec/**/*_spec.rb'
6
+ t.libs.push 'spec'
7
+ end
@@ -0,0 +1,571 @@
1
+ require 'migraine'
2
+
3
+ migration = Migraine::Migration.new(
4
+ from: 'mysql://root:root@localhost/migraine_from',
5
+ to: 'mysql://root:root@localhost/migraine_to'
6
+ )
7
+
8
+ migration.map 'addresses' => 'spree_addresses'
9
+ map 'id'
10
+ map 'firstname'
11
+ map 'lastname'
12
+ map 'address1'
13
+ map 'address2'
14
+ map 'city'
15
+ map 'state_id'
16
+ map 'zipcode'
17
+ map 'country_id'
18
+ map 'phone'
19
+ map 'created_at'
20
+ map 'updated_at'
21
+ map 'state_name'
22
+ map 'alternative_phone'
23
+ end
24
+
25
+ migration.map 'adjustments' => 'spree_adjustments'
26
+ map 'id'
27
+ map 'order_id' => ''
28
+ map 'type' => ''
29
+ map 'amount'
30
+ map 'description' => ''
31
+ map 'position' => ''
32
+ map 'created_at'
33
+ map 'updated_at'
34
+ map 'adjustment_source_id' => ''
35
+ map 'adjustment_source_type' => ''
36
+ end
37
+
38
+ migration.map 'assets' => 'spree_assets'
39
+ map 'id'
40
+ map 'viewable_id'
41
+ map 'viewable_type'
42
+ map 'attachment_content_type'
43
+ map 'attachment_file_name'
44
+ map 'attachment_size'
45
+ map 'position'
46
+ map 'type'
47
+ map 'attachment_updated_at'
48
+ map 'attachment_width'
49
+ map 'attachment_height'
50
+ map 'alt'
51
+ end
52
+
53
+ migration.map 'calculators' => 'spree_calculators'
54
+ map 'id'
55
+ map 'type'
56
+ map 'calculable_id'
57
+ map 'calculable_type'
58
+ map 'created_at'
59
+ map 'updated_at'
60
+ end
61
+
62
+ migration.map 'checkouts' => ''
63
+ map 'id' => ''
64
+ map 'order_id' => ''
65
+ map 'email' => ''
66
+ map 'ip_address' => ''
67
+ map 'special_instructions' => ''
68
+ map 'bill_address_id' => ''
69
+ map 'created_at' => ''
70
+ map 'updated_at' => ''
71
+ map 'state' => ''
72
+ map 'ship_address_id' => ''
73
+ map 'shipping_method_id' => ''
74
+ end
75
+
76
+ migration.map 'configurations' => 'spree_configurations'
77
+ map 'id'
78
+ map 'name'
79
+ map 'created_at'
80
+ map 'updated_at'
81
+ map 'type'
82
+ end
83
+
84
+ migration.map 'countries' => 'spree_countries'
85
+ map 'id'
86
+ map 'iso_name'
87
+ map 'iso'
88
+ map 'name'
89
+ map 'iso3'
90
+ map 'numcode'
91
+ end
92
+
93
+ migration.map 'coupons' => ''
94
+ map 'id' => ''
95
+ map 'code' => ''
96
+ map 'description' => ''
97
+ map 'usage_limit' => ''
98
+ map 'combine' => ''
99
+ map 'expires_at' => ''
100
+ map 'created_at' => ''
101
+ map 'updated_at' => ''
102
+ map 'starts_at' => ''
103
+ end
104
+
105
+ migration.map 'creditcards' => 'spree_creditcards'
106
+ map 'id'
107
+ map 'number' => ''
108
+ map 'month'
109
+ map 'year'
110
+ map 'verification_value' => ''
111
+ map 'cc_type'
112
+ map 'last_digits'
113
+ map 'first_name'
114
+ map 'last_name'
115
+ map 'created_at'
116
+ map 'updated_at'
117
+ map 'start_month'
118
+ map 'start_year'
119
+ map 'issue_number'
120
+ map 'address_id'
121
+ map 'gateway_customer_profile_id'
122
+ map 'gateway_payment_profile_id'
123
+ end
124
+
125
+ migration.map 'gateways' => 'spree_gateways'
126
+ map 'id'
127
+ map 'type'
128
+ map 'name'
129
+ map 'description'
130
+ map 'active'
131
+ map 'environment'
132
+ map 'server'
133
+ map 'test_mode'
134
+ map 'created_at'
135
+ map 'updated_at'
136
+ end
137
+
138
+ migration.map 'inventory_units' => 'spree_inventory_units'
139
+ map 'id'
140
+ map 'variant_id'
141
+ map 'order_id'
142
+ map 'state'
143
+ map 'lock_version'
144
+ map 'created_at'
145
+ map 'updated_at'
146
+ map 'shipment_id'
147
+ map 'return_authorization_id'
148
+ end
149
+
150
+ migration.map 'line_items' => 'spree_line_items'
151
+ map 'id'
152
+ map 'order_id'
153
+ map 'variant_id'
154
+ map 'quantity'
155
+ map 'price'
156
+ map 'created_at'
157
+ map 'updated_at'
158
+ end
159
+
160
+ migration.map 'open_id_authentication_associations' => ''
161
+ map 'id' => ''
162
+ map 'issued' => ''
163
+ map 'lifetime' => ''
164
+ map 'handle' => ''
165
+ map 'assoc_type' => ''
166
+ map 'server_url' => ''
167
+ map 'secret' => ''
168
+ end
169
+
170
+ migration.map 'open_id_authentication_nonces' => ''
171
+ map 'id' => ''
172
+ map 'timestamp' => ''
173
+ map 'server_url' => ''
174
+ map 'salt' => ''
175
+ end
176
+
177
+ migration.map 'option_types' => 'spree_option_types'
178
+ map 'id'
179
+ map 'name'
180
+ map 'presentation'
181
+ map 'created_at'
182
+ map 'updated_at'
183
+ end
184
+
185
+ migration.map 'option_types_prototypes' => 'spree_option_types_prototypes'
186
+ map 'prototype_id'
187
+ map 'option_type_id'
188
+ end
189
+
190
+ migration.map 'option_values' => 'spree_option_values'
191
+ map 'id'
192
+ map 'option_type_id'
193
+ map 'name'
194
+ map 'position'
195
+ map 'presentation'
196
+ map 'created_at'
197
+ map 'updated_at'
198
+ end
199
+
200
+ migration.map 'option_values_variants' => 'spree_option_values_variants'
201
+ map 'variant_id'
202
+ map 'option_value_id'
203
+ end
204
+
205
+ migration.map 'orders' => 'spree_orders'
206
+ map 'id'
207
+ map 'user_id'
208
+ map 'number'
209
+ map 'item_total'
210
+ map 'total'
211
+ map 'created_at'
212
+ map 'updated_at'
213
+ map 'state'
214
+ map 'token' => ''
215
+ map 'adjustment_total'
216
+ map 'credit_total'
217
+ map 'completed_at'
218
+ end
219
+
220
+ migration.map 'pages' => ''
221
+ map 'id' => ''
222
+ map 'title' => ''
223
+ map 'body' => ''
224
+ map 'slug' => ''
225
+ map 'created_at' => ''
226
+ map 'updated_at' => ''
227
+ map 'show_in_header' => ''
228
+ map 'show_in_footer' => ''
229
+ map 'foreign_link' => ''
230
+ map 'position' => ''
231
+ map 'visible' => ''
232
+ map 'meta_keywords' => ''
233
+ map 'meta_description' => ''
234
+ map 'layout' => ''
235
+ map 'show_in_sidebar' => ''
236
+ end
237
+
238
+ migration.map 'payment_methods' => 'spree_payment_methods'
239
+ map 'id'
240
+ map 'type'
241
+ map 'name'
242
+ map 'description'
243
+ map 'active'
244
+ map 'environment'
245
+ map 'created_at'
246
+ map 'updated_at'
247
+ map 'deleted_at'
248
+ map 'display' => ''
249
+ end
250
+
251
+ migration.map 'payments' => 'spree_payments'
252
+ map 'id'
253
+ map 'payable_id' => ''
254
+ map 'created_at'
255
+ map 'updated_at'
256
+ map 'amount'
257
+ map 'payable_type' => ''
258
+ map 'source_id'
259
+ map 'source_type'
260
+ map 'payment_method_id'
261
+ end
262
+
263
+ migration.map 'preferences' => 'spree_preferences'
264
+ map 'id'
265
+ map 'attribute' => ''
266
+ map 'owner_id' => ''
267
+ map 'owner_type' => ''
268
+ map 'group_id' => ''
269
+ map 'group_type' => ''
270
+ map 'value'
271
+ map 'created_at'
272
+ map 'updated_at'
273
+ end
274
+
275
+ migration.map 'product_groups' => 'spree_product_groups'
276
+ map 'id'
277
+ map 'name'
278
+ map 'permalink'
279
+ map 'order'
280
+ end
281
+
282
+ migration.map 'product_groups_products' => 'spree_product_groups_products'
283
+ map 'product_id'
284
+ map 'product_group_id'
285
+ end
286
+
287
+ migration.map 'product_option_types' => 'spree_product_option_types'
288
+ map 'id'
289
+ map 'product_id'
290
+ map 'option_type_id'
291
+ map 'position'
292
+ map 'created_at'
293
+ map 'updated_at'
294
+ end
295
+
296
+ migration.map 'product_properties' => 'spree_product_properties'
297
+ map 'id'
298
+ map 'product_id'
299
+ map 'property_id'
300
+ map 'value'
301
+ map 'created_at'
302
+ map 'updated_at'
303
+ end
304
+
305
+ migration.map 'product_scopes' => 'spree_product_scopes'
306
+ map 'id'
307
+ map 'product_group_id'
308
+ map 'name'
309
+ map 'arguments'
310
+ end
311
+
312
+ migration.map 'products' => 'spree_products'
313
+ map 'id'
314
+ map 'name'
315
+ map 'description'
316
+ map 'created_at'
317
+ map 'updated_at'
318
+ map 'permalink'
319
+ map 'available_on'
320
+ map 'tax_category_id'
321
+ map 'shipping_category_id'
322
+ map 'deleted_at'
323
+ map 'meta_description'
324
+ map 'meta_keywords'
325
+ map 'count_on_hand'
326
+ end
327
+
328
+ migration.map 'products_taxons' => 'spree_products_taxons'
329
+ map 'product_id'
330
+ map 'taxon_id'
331
+ end
332
+
333
+ migration.map 'properties' => 'spree_properties'
334
+ map 'id'
335
+ map 'name'
336
+ map 'presentation'
337
+ map 'created_at'
338
+ map 'updated_at'
339
+ end
340
+
341
+ migration.map 'properties_prototypes' => 'spree_properties_prototypes'
342
+ map 'prototype_id'
343
+ map 'property_id'
344
+ end
345
+
346
+ migration.map 'prototypes' => 'spree_prototypes'
347
+ map 'id'
348
+ map 'name'
349
+ map 'created_at'
350
+ map 'updated_at'
351
+ end
352
+
353
+ migration.map 'queued_mails' => ''
354
+ map 'id' => ''
355
+ map 'object' => ''
356
+ map 'mailer' => ''
357
+ end
358
+
359
+ migration.map 'return_authorizations' => 'spree_return_authorizations'
360
+ map 'id'
361
+ map 'number'
362
+ map 'amount'
363
+ map 'order_id'
364
+ map 'reason'
365
+ map 'state'
366
+ map 'created_at'
367
+ map 'updated_at'
368
+ end
369
+
370
+ migration.map 'roles' => 'spree_roles'
371
+ map 'id'
372
+ map 'name'
373
+ end
374
+
375
+ migration.map 'roles_users' => 'spree_roles_users'
376
+ map 'role_id'
377
+ map 'user_id'
378
+ end
379
+
380
+ migration.map 'schema_migrations' do
381
+ map 'version'
382
+ end
383
+
384
+ migration.map 'shipments' => 'spree_shipments'
385
+ map 'id'
386
+ map 'order_id'
387
+ map 'shipping_method_id'
388
+ map 'tracking'
389
+ map 'created_at'
390
+ map 'updated_at'
391
+ map 'number'
392
+ map 'cost'
393
+ map 'shipped_at'
394
+ map 'address_id'
395
+ map 'state'
396
+ end
397
+
398
+ migration.map 'shipping_categories' => 'spree_shipping_categories'
399
+ map 'id'
400
+ map 'name'
401
+ map 'created_at'
402
+ map 'updated_at'
403
+ end
404
+
405
+ migration.map 'shipping_methods' => 'spree_shipping_methods'
406
+ map 'id'
407
+ map 'zone_id'
408
+ map 'name'
409
+ map 'created_at'
410
+ map 'updated_at'
411
+ end
412
+
413
+ migration.map 'shipping_rates' => ''
414
+ map 'id' => ''
415
+ map 'shipping_category_id' => ''
416
+ map 'shipping_method_id' => ''
417
+ end
418
+
419
+ migration.map 'snippets' => ''
420
+ map 'id' => ''
421
+ map 'slug' => ''
422
+ map 'content' => ''
423
+ map 'created_by' => ''
424
+ map 'modified_by' => ''
425
+ map 'created_at' => ''
426
+ map 'updated_at' => ''
427
+ end
428
+
429
+ migration.map 'state_events' => 'spree_state_events'
430
+ map 'id'
431
+ map 'stateful_id'
432
+ map 'user_id'
433
+ map 'name'
434
+ map 'created_at'
435
+ map 'updated_at'
436
+ map 'previous_state'
437
+ map 'stateful_type'
438
+ end
439
+
440
+ migration.map 'states' => 'spree_states'
441
+ map 'id'
442
+ map 'name'
443
+ map 'abbr'
444
+ map 'country_id'
445
+ end
446
+
447
+ migration.map 'tax_categories' => 'spree_tax_categories'
448
+ map 'id'
449
+ map 'name'
450
+ map 'description'
451
+ map 'created_at'
452
+ map 'updated_at'
453
+ map 'is_default'
454
+ end
455
+
456
+ migration.map 'tax_rates' => 'spree_tax_rates'
457
+ map 'id'
458
+ map 'zone_id'
459
+ map 'amount'
460
+ map 'created_at'
461
+ map 'updated_at'
462
+ map 'tax_category_id'
463
+ end
464
+
465
+ migration.map 'taxonomies' => 'spree_taxonomies'
466
+ map 'id'
467
+ map 'name'
468
+ map 'created_at'
469
+ map 'updated_at'
470
+ end
471
+
472
+ migration.map 'taxons' => 'spree_taxons'
473
+ map 'id'
474
+ map 'taxonomy_id'
475
+ map 'parent_id'
476
+ map 'position'
477
+ map 'name'
478
+ map 'created_at'
479
+ map 'updated_at'
480
+ map 'permalink'
481
+ map 'lft'
482
+ map 'rgt'
483
+ map 'icon_file_name'
484
+ map 'icon_content_type'
485
+ map 'icon_file_size'
486
+ map 'icon_updated_at'
487
+ map 'description'
488
+ end
489
+
490
+ migration.map 'trackers' => 'spree_trackers'
491
+ map 'id'
492
+ map 'environment'
493
+ map 'analytics_id'
494
+ map 'active'
495
+ map 'created_at'
496
+ map 'updated_at'
497
+ end
498
+
499
+ migration.map 'transactions' => ''
500
+ map 'id' => ''
501
+ map 'amount' => ''
502
+ map 'txn_type' => ''
503
+ map 'response_code' => ''
504
+ map 'avs_response' => ''
505
+ map 'cvv_response' => ''
506
+ map 'created_at' => ''
507
+ map 'updated_at' => ''
508
+ map 'original_creditcard_txn_id' => ''
509
+ map 'payment_id' => ''
510
+ map 'type' => ''
511
+ end
512
+
513
+ migration.map 'users' => 'spree_users'
514
+ map 'id'
515
+ map 'email'
516
+ map 'crypted_password' => ''
517
+ map 'salt' => ''
518
+ map 'remember_token'
519
+ map 'remember_token_expires_at' => ''
520
+ map 'created_at'
521
+ map 'updated_at'
522
+ map 'persistence_token'
523
+ map 'single_access_token' => ''
524
+ map 'perishable_token'
525
+ map 'login_count' => ''
526
+ map 'failed_login_count' => ''
527
+ map 'last_request_at'
528
+ map 'current_login_at' => ''
529
+ map 'last_login_at' => ''
530
+ map 'current_login_ip' => ''
531
+ map 'last_login_ip' => ''
532
+ map 'login'
533
+ map 'ship_address_id'
534
+ map 'bill_address_id'
535
+ map 'openid_identifier' => ''
536
+ map 'api_key'
537
+ end
538
+
539
+ migration.map 'variants' => 'spree_variants'
540
+ map 'id'
541
+ map 'product_id'
542
+ map 'sku'
543
+ map 'price'
544
+ map 'weight'
545
+ map 'height'
546
+ map 'width'
547
+ map 'depth'
548
+ map 'deleted_at'
549
+ map 'is_master'
550
+ map 'count_on_hand'
551
+ map 'cost_price'
552
+ end
553
+
554
+ migration.map 'zone_members' => 'spree_zone_members'
555
+ map 'id'
556
+ map 'zone_id'
557
+ map 'zoneable_id'
558
+ map 'zoneable_type'
559
+ map 'created_at'
560
+ map 'updated_at'
561
+ end
562
+
563
+ migration.map 'zones' => 'spree_zones'
564
+ map 'id'
565
+ map 'name'
566
+ map 'description'
567
+ map 'created_at'
568
+ map 'updated_at'
569
+ end
570
+
571
+ migration.run