ImportToMysql now loads users.csv. Spec currently failing on datetime conversion.
This commit is contained in:
parent
80867bbc54
commit
7f86a9e1ba
8 changed files with 164 additions and 15 deletions
7
app/models/mongo.rb
Normal file
7
app/models/mongo.rb
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
module Mongo
|
||||
def self.table_name_prefix
|
||||
"mongo_"
|
||||
end
|
||||
|
||||
class User < ActiveRecord::Base; end
|
||||
end
|
||||
24
db/migrate/20110105051803_create_import_tables.rb
Normal file
24
db/migrate/20110105051803_create_import_tables.rb
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
class CreateImportTables < ActiveRecord::Migration
|
||||
def self.up
|
||||
create_table :mongo_users do |t|
|
||||
t.string :mongo_id
|
||||
t.string :username
|
||||
t.text :serialized_private_key
|
||||
t.string :encrypted_password
|
||||
t.integer :invites
|
||||
t.string :invitation_token
|
||||
t.datetime :invitation_sent_at
|
||||
t.boolean :getting_started
|
||||
t.boolean :disable_mail
|
||||
t.string :language
|
||||
t.string :last_sign_in_ip
|
||||
t.datetime :last_sign_in_at
|
||||
t.string :reset_password_token
|
||||
t.string :password_salt
|
||||
end
|
||||
end
|
||||
|
||||
def self.down
|
||||
drop_table :mongo_users
|
||||
end
|
||||
end
|
||||
19
db/schema.rb
19
db/schema.rb
|
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended to check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(:version => 0) do
|
||||
ActiveRecord::Schema.define(:version => 20110105051803) do
|
||||
|
||||
create_table "aspect_memberships", :force => true do |t|
|
||||
t.integer "aspect_id"
|
||||
|
|
@ -70,6 +70,23 @@ ActiveRecord::Schema.define(:version => 0) do
|
|||
|
||||
add_index "invitations", ["sender_id"], :name => "index_invitations_on_sender_id"
|
||||
|
||||
create_table "mongo_users", :force => true do |t|
|
||||
t.string "mongo_id"
|
||||
t.string "username"
|
||||
t.text "serialized_private_key"
|
||||
t.string "encrypted_password"
|
||||
t.integer "invites"
|
||||
t.string "invitation_token"
|
||||
t.datetime "invitation_sent_at"
|
||||
t.boolean "getting_started"
|
||||
t.boolean "disable_mail"
|
||||
t.string "language"
|
||||
t.string "last_sign_in_ip"
|
||||
t.datetime "last_sign_in_at"
|
||||
t.string "reset_password_token"
|
||||
t.string "password_salt"
|
||||
end
|
||||
|
||||
create_table "notifications", :force => true do |t|
|
||||
t.string "target_type"
|
||||
t.integer "target_id"
|
||||
|
|
|
|||
|
|
@ -4,11 +4,12 @@
|
|||
|
||||
module DataConversion
|
||||
class Base
|
||||
attr_accessor :start_time, :directory
|
||||
attr_accessor :start_time, :directory, :full_path
|
||||
|
||||
def initialize(start_time = Time.now)
|
||||
@start_time = start_time
|
||||
@directory = "tmp/export-for-mysql"
|
||||
@full_path = "#{Rails.root}/#{directory}"
|
||||
end
|
||||
|
||||
def log(message)
|
||||
|
|
@ -17,9 +18,5 @@ module DataConversion
|
|||
end
|
||||
Rails.logger.debug(message) if Rails.logger
|
||||
end
|
||||
|
||||
def full_path
|
||||
"#{Rails.root}/#{directory}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
# Copyright (c) 2010, Diaspora Inc. This file is
|
||||
# licensed under the Affero General Public License version 3 or later. See
|
||||
# the COPYRIGHT file.
|
||||
|
||||
module DataConversion
|
||||
class ImportToMysql < DataConversion::Base
|
||||
end
|
||||
end
|
||||
21
lib/data_conversion/import_to_mysql.rb
Normal file
21
lib/data_conversion/import_to_mysql.rb
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
# Copyright (c) 2010, Diaspora Inc. This file is
|
||||
# licensed under the Affero General Public License version 3 or later. See
|
||||
# the COPYRIGHT file.
|
||||
|
||||
module DataConversion
|
||||
class ImportToMysql < DataConversion::Base
|
||||
def import_raw
|
||||
Mongo::User.connection.execute <<-SQL
|
||||
LOAD DATA INFILE '#{full_path}/users.csv' INTO TABLE mongo_users
|
||||
FIELDS TERMINATED BY ','
|
||||
ENCLOSED BY '"'
|
||||
IGNORE 1 LINES
|
||||
(mongo_id, 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)
|
||||
SQL
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
53
spec/fixtures/data_conversion/users.csv
vendored
Normal file
53
spec/fixtures/data_conversion/users.csv
vendored
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
mongo_id,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
|
||||
4d1513542367bc2525000002,beckett,"-----BEGIN RSA PRIVATE KEY-----
|
||||
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
|
||||
-----END RSA PRIVATE KEY-----
|
||||
",$2a$10$i7ulgssUfhg9lA.FxT2ugOiYSUh.91NvD9X21m1M2AkPRfxbkQv5W,5,,,false,false,en,127.0.0.1,1293241318000,,$2a$10$i7ulgssUfhg9lA.FxT2ugO
|
||||
|
|
|
@ -6,8 +6,46 @@ require 'spec_helper'
|
|||
Dir.glob(File.join(Rails.root, 'lib', 'data_conversion', '*.rb')).each { |f| require f }
|
||||
|
||||
describe DataConversion::ImportToMysql do
|
||||
def copy_fixture_for(table_name)
|
||||
FileUtils.cp("#{Rails.root}/spec/fixtures/data_conversion/#{table_name}.csv",
|
||||
"#{@migrator.full_path}/#{table_name}.csv")
|
||||
end
|
||||
|
||||
before do
|
||||
@migrator = DataConversion::ImportToMysql.new
|
||||
@migrator.full_path = "/tmp/data_conversion"
|
||||
system("rm -rf #{@migrator.full_path}")
|
||||
FileUtils.mkdir_p(@migrator.full_path)
|
||||
end
|
||||
|
||||
describe "#import_raw" do
|
||||
describe "users" do
|
||||
before do
|
||||
copy_fixture_for("users")
|
||||
end
|
||||
it "imports data into the mongo_users table" do
|
||||
Mongo::User.count.should == 0
|
||||
@migrator.import_raw
|
||||
Mongo::User.count.should == 1
|
||||
end
|
||||
it "imports all the columns" do
|
||||
@migrator.import_raw
|
||||
beckett = Mongo::User.first
|
||||
beckett.mongo_id.should == "4d1513542367bc2525000002"
|
||||
beckett.username.should == "beckett"
|
||||
beckett.serialized_private_key.should_not be_nil
|
||||
beckett.encrypted_password.should_not be_nil
|
||||
beckett.invites.should == 5
|
||||
beckett.invitation_token.should == ""
|
||||
beckett.invitation_sent_at.should be_nil
|
||||
beckett.getting_started.should be_false
|
||||
beckett.disable_mail.should be_false
|
||||
beckett.language.should == 'en'
|
||||
beckett.last_sign_in_ip.should == '127.0.0.1'
|
||||
beckett.last_sign_in_at.should_not be_nil
|
||||
beckett.reset_password_token.should == ""
|
||||
beckett.password_salt.should_not be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in a new issue