From 9bd2de06ee21dbd9a951819f1d0db74d8ea9f6ab Mon Sep 17 00:00:00 2001 From: Raphael Date: Fri, 7 Jan 2011 15:14:45 -0800 Subject: [PATCH] Services need a mongo_id --- .../20110105051803_create_import_tables.rb | 2 + db/schema.rb | 1 + lib/data_conversion/base.rb | 4 +- lib/data_conversion/import_to_mysql.rb | 32 ++++++- .../data_conversion/import_to_mysql_spec.rb | 84 +++++++++++++------ 5 files changed, 94 insertions(+), 29 deletions(-) diff --git a/db/migrate/20110105051803_create_import_tables.rb b/db/migrate/20110105051803_create_import_tables.rb index 0fd19ee15..e9233db89 100644 --- a/db/migrate/20110105051803_create_import_tables.rb +++ b/db/migrate/20110105051803_create_import_tables.rb @@ -142,7 +142,9 @@ class CreateImportTables < ActiveRecord::Migration add_index :mongo_requests, :recipient_mongo_id add_index :mongo_requests, [:sender_mongo_id, :recipient_mongo_id] + add_column(:services, :user_mongo_id, :string) create_table :mongo_services do |t| + t.string :mongo_id t.string :type t.string :user_mongo_id t.string :provider diff --git a/db/schema.rb b/db/schema.rb index 225fc48c3..59ce896c1 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -380,6 +380,7 @@ ActiveRecord::Schema.define(:version => 20110105051803) do t.datetime "created_at" t.datetime "updated_at" t.string "mongo_id" + t.string "user_mongo_id" end add_index "services", ["user_id"], :name => "index_services_on_user_id" diff --git a/lib/data_conversion/base.rb b/lib/data_conversion/base.rb index 46a05f1f4..48e80a3cc 100644 --- a/lib/data_conversion/base.rb +++ b/lib/data_conversion/base.rb @@ -42,8 +42,8 @@ module DataConversion :attrs => ["mongo_id", "recipient_mongo_id", "sender_mongo_id", "aspect_mongo_id"], :mongo_attrs => ["_id" , "to_id" , "from_id" , "into_id"]}, {:name => :services, - :attrs => ["type", "user_mongo_id", "provider", "uid", "access_token", "access_secret", "nickname"], - :mongo_attrs => ["_type", "user_id", "provider", "uid", "access_token", "access_secret", "nickname"]}, + :attrs => ["mongo_id", "type", "user_mongo_id", "provider", "uid", "access_token", "access_secret", "nickname"], + :mongo_attrs => ["_id" , "_type", "user_id", "provider", "uid", "access_token", "access_secret", "nickname"]}, {:name => :users, :attrs => ["mongo_id","email", "username", "serialized_private_key", "encrypted_password", "invites", "invitation_token", "invitation_sent_at", "getting_started", "disable_mail", "language", "last_sign_in_ip", "last_sign_in_at", "reset_password_token", "password_salt"], :mongo_attrs => ["_id" , "email","username", "serialized_private_key", "encrypted_password", "invites", "invitation_token", "invitation_sent_at", "getting_started", "disable_mail", "language", "last_sign_in_ip", "last_sign_in_at", "reset_password_token", "password_salt"]}, diff --git a/lib/data_conversion/import_to_mysql.rb b/lib/data_conversion/import_to_mysql.rb index f6078f446..4cd6e4e5a 100644 --- a/lib/data_conversion/import_to_mysql.rb +++ b/lib/data_conversion/import_to_mysql.rb @@ -66,11 +66,37 @@ module DataConversion log "Importing aspects to main table..." Aspect.connection.execute <<-SQL INSERT INTO aspects - SELECT mongo_aspects.id, mongo_aspects.name, users.id, mongo_aspects.created_at, mongo_aspects.updated_at, mongo_aspects.mongo_id, mongo_aspects.user_mongo_id FROM mongo_aspects INNER JOIN users ON (users.mongo_id = mongo_aspects.user_mongo_id) + SELECT mongo_aspects.id, + mongo_aspects.name, + users.id, + mongo_aspects.created_at, + mongo_aspects.updated_at, + mongo_aspects.mongo_id, + mongo_aspects.user_mongo_id + FROM mongo_aspects INNER JOIN users ON (users.mongo_id = mongo_aspects.user_mongo_id) SQL log "Imported #{Aspect.count} aspects." end - + def process_raw_services + log "Importing services to main table..." + Service.connection.execute <<-SQL + INSERT INTO services + SELECT mongo_services.id, + mongo_services.type, + users.id, + mongo_services.provider, + mongo_services.uid, + mongo_services.access_token, + mongo_services.access_secret, + mongo_services.nickname, + mongo_services.created_at, + mongo_services.updated_at, + mongo_services.mongo_id, + mongo_services.user_mongo_id + FROM mongo_services INNER JOIN users ON (users.mongo_id = mongo_services.user_mongo_id) + SQL + log "Imported #{Service.count} services." + end def import_raw_users log "Loading users file..." Mongo::User.connection.execute <<-SQL @@ -156,7 +182,7 @@ module DataConversion Mongo::Service.connection.execute <<-SQL #{load_string("services")} #{infile_opts} - (type,user_mongo_id,@provider,@uid,@access_token,@access_secret,@nickname) + (mongo_id, type,user_mongo_id,@provider,@uid,@access_token,@access_secret,@nickname) SET #{nil_es("provider")}, #{nil_es("uid")}, #{nil_es("access_token")}, diff --git a/spec/lib/data_conversion/import_to_mysql_spec.rb b/spec/lib/data_conversion/import_to_mysql_spec.rb index f43fefccf..e0e6dac01 100644 --- a/spec/lib/data_conversion/import_to_mysql_spec.rb +++ b/spec/lib/data_conversion/import_to_mysql_spec.rb @@ -50,30 +50,66 @@ describe DataConversion::ImportToMysql do bob.reset_password_token.should be_nil bob.password_salt.should_not be_nil end - describe "aspects" do - before do - copy_fixture_for("aspects") - @migrator.import_raw_aspects - @migrator.process_raw_users - end - it "imports data into the aspects table" do - Mongo::Aspect.count.should == 4 - Aspect.count.should == 0 - @migrator.process_raw_aspects - Aspect.count.should == 4 - end - it "imports all the columns" do - @migrator.process_raw_aspects - aspect = Aspect.first - aspect.name.should == "generic" - aspect.mongo_id.should == "4d2657e9cc8cb46033000006" - aspect.user_mongo_id.should == "4d2657e9cc8cb46033000005" - end - it "sets the relation column" do - @migrator.process_raw_aspects - aspect = Aspect.first - aspect.user_id.should == User.where(:mongo_id => aspect.user_mongo_id).first.id - end + + end + describe "aspects" do + before do + copy_fixture_for("aspects") + @migrator.import_raw_aspects + copy_fixture_for("users") + @migrator.import_raw_users + @migrator.process_raw_users + end + it "imports data into the aspects table" do + Mongo::Aspect.count.should == 4 + Aspect.count.should == 0 + @migrator.process_raw_aspects + Aspect.count.should == 4 + end + it "imports all the columns" do + @migrator.process_raw_aspects + aspect = Aspect.first + aspect.name.should == "generic" + aspect.mongo_id.should == "4d2657e9cc8cb46033000006" + aspect.user_mongo_id.should == "4d2657e9cc8cb46033000005" + end + it "sets the relation column" do + @migrator.process_raw_aspects + aspect = Aspect.first + aspect.user_id.should == User.where(:mongo_id => aspect.user_mongo_id).first.id + end + end + describe "services" do + before do + copy_fixture_for("users") + @migrator.import_raw_users + @migrator.process_raw_users + copy_fixture_for("services") + @migrator.import_raw_services + end + + it "imports data into the services table" do + Mongo::Service.count.should == 2 + Service.count.should == 0 + @migrator.process_raw_services + Service.count.should == 2 + end + + it "imports all the columns" do + @migrator.process_raw_services + service = Service.first + service.type_before_type_cast.should == "Services::Facebook" + service.user_mongo_id.should == "4d2657eacc8cb46033000011" + service.provider.should be_nil + service.uid.should be_nil + service.access_token.should == "yeah" + service.access_secret.should be_nil + service.nickname.should be_nil + end + it 'sets the relation column' do + @migrator.process_raw_services + service = Service.first + service.user_id.should == User.where(:mongo_id => service.user_mongo_id).first.id end end end