mirror of
https://0xacab.org/sutty/sutty
synced 2025-02-17 00:51:49 +00:00
feat: poder asignar atributos sin guardar cambios
This commit is contained in:
parent
9fb3601d92
commit
42e9d5fd66
1 changed files with 29 additions and 10 deletions
|
@ -15,6 +15,9 @@ class Post
|
|||
PUBLIC_ATTRIBUTES = %i[lang date uuid created_at].freeze
|
||||
ATTR_SUFFIXES = %w[? =].freeze
|
||||
|
||||
class PostError < StandardError; end
|
||||
class UnknownAttributeError < PostError; end
|
||||
|
||||
attr_reader :attributes, :errors, :layout, :site, :document
|
||||
|
||||
# TODO: Modificar el historial de Git con callbacks en lugar de
|
||||
|
@ -50,12 +53,33 @@ class Post
|
|||
@errors = {}
|
||||
@metadata = {}
|
||||
|
||||
# Inicializar valores
|
||||
# Leer el documento si existe
|
||||
# @todo Asignar todos los valores a self[:value] luego de leer
|
||||
document&.read! unless new?
|
||||
|
||||
# Inicializar valores o modificar los que vengan del documento
|
||||
assignable_attributes = args.slice(*attributes)
|
||||
assign_attributes(assignable_attributes) if assignable_attributes.present?
|
||||
end
|
||||
|
||||
# Asignar atributos, ignorando atributos que no se pueden modificar
|
||||
# o inexistentes
|
||||
#
|
||||
# @param attrs [Hash]
|
||||
def assign_attributes(attrs)
|
||||
attrs = attrs.transform_keys(&:to_sym)
|
||||
|
||||
attributes.each do |attr|
|
||||
public_send(attr)&.value = args[attr] if args.key?(attr)
|
||||
self[attr].value = attrs[attr] if attrs.key?(attr) && self[attr].writable?
|
||||
end
|
||||
|
||||
document.read! unless new?
|
||||
unknown_attrs = attrs.keys.map(&:to_sym) - attributes
|
||||
|
||||
if unknown_attrs.present?
|
||||
raise UnknownAttributeError, "Unknown attribute(s) #{unknown_attrs.map(&:to_s).join(', ')} for Post"
|
||||
end
|
||||
|
||||
nil
|
||||
end
|
||||
|
||||
def inspect
|
||||
|
@ -165,8 +189,7 @@ class Post
|
|||
# Limpiar el nombre del atributo, para que todos los ayudantes
|
||||
# reciban el método en limpio
|
||||
unless attribute? name
|
||||
raise NoMethodError, I18n.t('exceptions.post.no_method',
|
||||
method: name)
|
||||
raise UnknownAttributeError, I18n.t('exceptions.post.no_method', method: name)
|
||||
end
|
||||
|
||||
define_singleton_method(name) do
|
||||
|
@ -386,11 +409,7 @@ class Post
|
|||
end
|
||||
|
||||
def update_attributes(hashable)
|
||||
hashable.to_hash.each do |attr, value|
|
||||
next unless self[attr].writable?
|
||||
|
||||
self[attr].value = value
|
||||
end
|
||||
assign_attributes(hashable)
|
||||
|
||||
save
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue