mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-26 11: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
|
||||
@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
|
||||
|
||||
|
|
|
@ -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
|
||||
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)
|
||||
|
||||
|
|
Loading…
Reference in a new issue