mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-26 13:46:22 +00:00
terminar de eliminar invitadxs
This commit is contained in:
parent
42bf7e173b
commit
b4877baa47
4 changed files with 7 additions and 121 deletions
|
@ -59,7 +59,7 @@ class PostsController < ApplicationController
|
||||||
if @site.usuarie? current_usuarie
|
if @site.usuarie? current_usuarie
|
||||||
@post.update_attributes(author: params[:post][:author])
|
@post.update_attributes(author: params[:post][:author])
|
||||||
else
|
else
|
||||||
# Todo lo que crean lxs invitadxs es borrador
|
# Todo lo que crean les invitades es borrador
|
||||||
@post.update_attributes(draft: true)
|
@post.update_attributes(draft: true)
|
||||||
end
|
end
|
||||||
unless @post.author
|
unless @post.author
|
||||||
|
@ -105,7 +105,7 @@ class PostsController < ApplicationController
|
||||||
end
|
end
|
||||||
@post.update_attributes(draft: false)
|
@post.update_attributes(draft: false)
|
||||||
else
|
else
|
||||||
# Todo lo que crean lxs invitadxs es borrador
|
# Todo lo que crean les invitades es borrador
|
||||||
@post.update_attributes(draft: true)
|
@post.update_attributes(draft: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -15,7 +15,7 @@ class PostPolicy
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
# Lxs invitadxs solo pueden ver sus propios posts
|
# Les invitades solo pueden ver sus propios posts
|
||||||
def show?
|
def show?
|
||||||
post.site.usuarie?(usuarie) || post.author == usuarie.email
|
post.site.usuarie?(usuarie) || post.author == usuarie.email
|
||||||
end
|
end
|
||||||
|
@ -32,12 +32,12 @@ class PostPolicy
|
||||||
update?
|
update?
|
||||||
end
|
end
|
||||||
|
|
||||||
# Lxs invitadxs solo pueden modificar sus propios artículos
|
# Les invitades solo pueden modificar sus propios artículos
|
||||||
def update?
|
def update?
|
||||||
post.site.usuarie?(usuarie) || post.author == usuarie.email
|
post.site.usuarie?(usuarie) || post.author == usuarie.email
|
||||||
end
|
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
|
# borrar sus propios artículos
|
||||||
def destroy?
|
def destroy?
|
||||||
update?
|
update?
|
||||||
|
@ -45,7 +45,7 @@ class PostPolicy
|
||||||
|
|
||||||
# Las usuarias pueden ver todos los posts
|
# 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
|
class Scope
|
||||||
attr_reader :usuarie, :scope
|
attr_reader :usuarie, :scope
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ class PostPolicy
|
||||||
|
|
||||||
# Las usuarias pueden ver todos los posts
|
# 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
|
def resolve
|
||||||
return scope if scope.try(:first).try(:site).try(:usuarie?, usuarie)
|
return scope if scope.try(:first).try(:site).try(:usuarie?, usuarie)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue