Bike!Bike! Website!
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.

128 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