You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
2.6 KiB
127 lines
2.6 KiB
require 'open-uri'
|
|
require 'json'
|
|
require 'rest_client'
|
|
require 'geocoder/calculations'
|
|
|
|
$panoramios = Hash.new
|
|
|
|
namespace :migrate do
|
|
desc "Migrates data from live site to current database"
|
|
|
|
task all: :environment do
|
|
puts ""
|
|
Dir.glob(File.join(File.dirname(__FILE__), 'sample_data', "*.yml")).each { | file|
|
|
class_name = file.gsub(/^.*\/(.*?).yml$/, '\1').classify
|
|
object = nil
|
|
begin
|
|
object = class_name.constantize.new
|
|
rescue
|
|
puts "\tUndefined class: #{class_name}"
|
|
end
|
|
if object
|
|
puts "\tMigrating #{class_name} objects"
|
|
migrate! object
|
|
end
|
|
}
|
|
puts "\tMigration complete"
|
|
puts ""
|
|
end
|
|
|
|
task users: :environment do
|
|
migrate! User.new
|
|
end
|
|
|
|
task locations: :environment do
|
|
migrate! Location.new
|
|
end
|
|
|
|
task organization_statuses: :environment do
|
|
migrate! OrganizationStatus.new#, true, 'shop_status'
|
|
end
|
|
|
|
task organizations: :environment do
|
|
migrate! Organization.new
|
|
end
|
|
|
|
task conference_types: :environment do
|
|
migrate! ConferenceType.new#, true, false
|
|
end
|
|
|
|
task conferences: :environment do
|
|
migrate! Conference.new
|
|
end
|
|
|
|
task workshop_streams: :environment do
|
|
migrate! WorkshopStream.new#, true
|
|
end
|
|
|
|
task workshop_resources: :environment do
|
|
migrate! WorkshopResources.new#, true
|
|
end
|
|
|
|
task workshops: :environment do
|
|
migrate! Workshop.new
|
|
end
|
|
|
|
def clear_table(table)
|
|
ActiveRecord::Base.connection.execute("TRUNCATE TABLE #{table} RESTART IDENTITY;")
|
|
end
|
|
|
|
def get(type, key = nil)
|
|
file = File.join(File.dirname(__FILE__), 'sample_data', "#{type}.yml")
|
|
if File.exist?(file)
|
|
data = YAML.load_file(file)
|
|
if key
|
|
return data[key]
|
|
end
|
|
return data
|
|
end
|
|
[]
|
|
end
|
|
|
|
def prepare_user(user)
|
|
return user
|
|
end
|
|
|
|
def prepare_organizations
|
|
clear_table('organization_statuses')
|
|
clear_table('user_organization_relationships')
|
|
end
|
|
|
|
def prepare_organization(org)
|
|
org['users'].each { | key, relationship |
|
|
user = get('users', key)
|
|
UserOrganizationRelationship.create({
|
|
user_id: user['id'].to_i,
|
|
organization_id: org['id'].to_i,
|
|
relationship: relationship
|
|
})
|
|
}
|
|
status = get('organization_statuses', org['organization_status'])
|
|
org['organization_status_id'] = status['id'].to_i
|
|
|
|
org.delete('users')
|
|
org.delete('organization_status')
|
|
return org
|
|
end
|
|
|
|
def call(fn, args = [])
|
|
if self.respond_to?(fn, true)
|
|
object = self.send(fn, *args)
|
|
end
|
|
end
|
|
|
|
def migrate!(model)
|
|
type = model.class.table_name
|
|
clear_table(type)
|
|
|
|
call("prepare_#{type}")
|
|
|
|
data = get(type)
|
|
|
|
data.each { | key, object |
|
|
call("prepare_#{type.singularize}", [object])
|
|
record = model.class.create(object)
|
|
}
|
|
end
|
|
end
|
|
|