terminar de eliminar invitadxs

This commit is contained in:
f 2019-08-06 14:50:58 -03:00
parent 42bf7e173b
commit b4877baa47
No known key found for this signature in database
GPG key ID: 2AE5A13E321F953D
4 changed files with 7 additions and 121 deletions

View file

@ -59,7 +59,7 @@ class PostsController < ApplicationController
if @site.usuarie? current_usuarie
@post.update_attributes(author: params[:post][:author])
else
# Todo lo que crean lxs invitadxs es borrador
# Todo lo que crean les invitades es borrador
@post.update_attributes(draft: true)
end
unless @post.author
@ -105,7 +105,7 @@ class PostsController < ApplicationController
end
@post.update_attributes(draft: false)
else
# Todo lo que crean lxs invitadxs es borrador
# Todo lo que crean les invitades es borrador
@post.update_attributes(draft: true)
end

View file

@ -1,86 +0,0 @@
# frozen_string_literal: true
class Invitadx < ApplicationRecord
has_secure_password
validates_uniqueness_of :email
validate :acepto_politicas_de_privacidad
after_create :create_invitadx_directory!
after_save :add_sites!
# Para facilitar la serialización de Warden
def username
email
end
def path
File.join(Rails.root, '_invitadxs', email)
end
# TODO: convertir el Pathname en un helper
def site_dirs
return [] unless Dir.exist? path
Pathname.new(path).children.map(&:expand_path).map(&:to_s)
end
def sites
@sites ||= site_dirs.map do |site|
Site.find(File.basename(site))
end.compact
end
private
def acepto_politicas_de_privacidad
unless acepta_politicas_de_privacidad?
errors.add(:acepta_politicas_de_privacidad,
:no_acepta_politicas_de_privacidad)
end
end
# Crea el directorio en _sites
def create_invitadx_directory!
FileUtils.mkdir_p(path)
end
# Agrega el sitio a las invitadxs y viceversa
def add_sites!
sites.each do |site|
dir = File.join(path, site.name)
file = site.invitadxs_file
unless File.exist? dir
FileUtils.ln_s File.join('..', '..', '_sites', site.name), dir
end
if File.exist? file
invitadxs = File.read(file).split("\n")
invitadxs_orig = invitadxs.dup
invitadxs << email unless invitadxs.include? email
else
invitadxs_orig = []
invitadxs = [email]
end
# Solo escribir los cambios si hubo cambios en la lista
return if invitadxs_orig == invitadxs
r = File.open(file, File::RDWR | File::CREAT, 0o640) do |f|
# Bloquear el archivo para que no sea accedido por otro
# proceso u otra editora
f.flock(File::LOCK_EX)
# Empezar por el principio
f.rewind
# Escribir la fecha de creación
f.write(invitadxs.join("\n"))
# Eliminar el resto
f.flush
f.truncate(f.pos)
end
end
end
end

View file

@ -1,28 +0,0 @@
# frozen_string_literal: true
# Política de acceso para Invitades
#
# TODO: Incorporar a Usuarie y eliminar
class InvitadxPolicy
attr_reader :usuarix, :model
def initialize(usuarix, model)
@usuarix = usuarix
@model = model
end
def new?
create?
end
# Al crear, el modelo recibido es un sitio
def create?
unless model.class == Site
raise ArgumentError,
"#{model.class} must be Site"
end
# El sitio acepta invitadxs
model.invitadxs?
end
end

View file

@ -15,7 +15,7 @@ class PostPolicy
true
end
# Lxs invitadxs solo pueden ver sus propios posts
# Les invitades solo pueden ver sus propios posts
def show?
post.site.usuarie?(usuarie) || post.author == usuarie.email
end
@ -32,12 +32,12 @@ class PostPolicy
update?
end
# Lxs invitadxs solo pueden modificar sus propios artículos
# Les invitades solo pueden modificar sus propios artículos
def update?
post.site.usuarie?(usuarie) || post.author == usuarie.email
end
# Solo las usuarias pueden eliminar artículos. Lxs invitadxs pueden
# Solo las usuarias pueden eliminar artículos. Les invitades pueden
# borrar sus propios artículos
def destroy?
update?
@ -45,7 +45,7 @@ class PostPolicy
# Las usuarias pueden ver todos los posts
#
# Lxs invitadxs solo pueden ver sus propios posts
# Les invitades solo pueden ver sus propios posts
class Scope
attr_reader :usuarie, :scope
@ -56,7 +56,7 @@ class PostPolicy
# Las usuarias pueden ver todos los posts
#
# Lxs invitadxs solo pueden ver sus propios posts
# Les invitades solo pueden ver sus propios posts
def resolve
return scope if scope.try(:first).try(:site).try(:usuarie?, usuarie)