5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-24 13:26:21 +00:00

fix: convertir valores en constantes

los structs se comportan extraño, es posible declararles constantes
internamente, pero luego no pueden ser llamadas desde afuera, como una
clase normal.

al incluirlas como modulos es posible lograr el comportamiento esperado
de una clase.
This commit is contained in:
f 2023-10-06 11:12:02 -03:00
parent 76fd32bd92
commit 68f3839ab1
No known key found for this signature in database

View file

@ -1,11 +1,17 @@
# frozen_string_literal: true
module MetadataBooleanConstants
TRUE_VALUES = %w[1 on true].freeze
end
# Implementa valores por sí o por no
#
# Esto es increíblemente difícil de lograr que salga bien!
class MetadataBoolean < MetadataTemplate
# El valor por defecto es una versión booleana de lo que diga (o no
# diga) el esquema
include MetadataBooleanConstants
# Devolver el valor desde el esquema y si no existe, por defecto es
# false
#
# @return [Boolean]
def default_value
@ -28,28 +34,23 @@ class MetadataBoolean < MetadataTemplate
# * '1' => true
# * false
# * true
#
# @todo Esto debería estar definido en sanitize o save
def value
case self[:value]
when NilClass
document.data.fetch(name.to_s, default_value)
when String
true_values.include? self[:value]
TRUE_VALUES.include? self[:value]
else
self[:value]
end
end
# Siempre guardar el valor de este campo a menos que sea nulo
#
# @return [Boolean]
def empty?
value.nil?
end
private
# Los valores que evalúan a verdadero
#
# XXX: memoizamos porque Struct no puede declarar constantes.
def true_values
@true_values ||= %w[1 on true].freeze
end
end