62 lines
1.8 KiB
Ruby
62 lines
1.8 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
# Crea la tabla de sitios y las relaciones con Usuaries e Invitades
|
||
|
class CreateSitios < ActiveRecord::Migration[5.2]
|
||
|
def up
|
||
|
# Tabla de Sitios
|
||
|
create_table :sites do |t|
|
||
|
t.timestamps
|
||
|
t.string :name, index: true, unique: true
|
||
|
end
|
||
|
|
||
|
# Relación HABTM entre Sitios y Usuaries
|
||
|
create_table :sites_usuaries, id: false do |t|
|
||
|
t.belongs_to :site, index: true
|
||
|
t.belongs_to :usuarie, index: true
|
||
|
end
|
||
|
|
||
|
# Relación HABTM entre Sitios e Invitades
|
||
|
create_table :invitades_sites, id: false do |t|
|
||
|
t.belongs_to :site, index: true
|
||
|
t.belongs_to :usuarie, index: true
|
||
|
end
|
||
|
|
||
|
## Crear las relaciones correspondientes
|
||
|
#
|
||
|
# Obtener todos los sitios (estamos moviendo funcionalidad previa de
|
||
|
# Site
|
||
|
sites = Pathname.new(Site.site_path)
|
||
|
.children.map(&:expand_path).map(&:to_s)
|
||
|
|
||
|
sites.each do |dir|
|
||
|
site = Site.create name: File.basename(dir)
|
||
|
|
||
|
file = File.join([dir, '.usuarias'])
|
||
|
usuarias = File.exist?(file) ? File.read(file).split("\n").uniq : []
|
||
|
|
||
|
file = File.join([dir, '.invitadxs'])
|
||
|
invitadxs = File.exist?(file) ? File.read(file).split("\n").uniq : []
|
||
|
|
||
|
# Tenemos que crear a les usuaries porque no existían en ningún
|
||
|
# lado
|
||
|
usuarias.each do |email|
|
||
|
usuarie = Usuarie.find_by(email: email)
|
||
|
usuarie ||= Usuarie.create(email: email,
|
||
|
password: SecureRandom.hex)
|
||
|
site.usuaries << usuarie
|
||
|
end
|
||
|
|
||
|
# Les Invitades ya están migrades
|
||
|
invitadxs.each do |email|
|
||
|
site.invitades << Usuarie.find_by(email: email)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def down
|
||
|
drop_table :sites
|
||
|
drop_table :sites_usuaries
|
||
|
drop_table :invitades_sites
|
||
|
end
|
||
|
end
|