5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-24 12:26:21 +00:00
panel/app/models/metadata_boolean.rb
f f1fa0c77fb
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
fix: testear más cosas
2023-10-06 11:18:38 -03:00

58 lines
1.4 KiB
Ruby

# 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
include MetadataBooleanConstants
include Metadata::NonIndexableConcern
include Metadata::AlwaysPublicConcern
# Devolver el valor desde el esquema y si no existe, por defecto es
# false
#
# @return [Boolean]
def default_value
!!super
end
# Los checkboxes son especiales porque la especificación de HTML
# indica que no se envían aquellos checkboxes con valores vacíos, con
# lo que nunca sabemos cuándo se los está deshabilitando. Rails
# subsana esto enviando un valor vacío bajo el mismo nombre
# (generalmente '0').
#
# En este caso, queremos priorizar el dato enviado por le usuarie
# antes que el generado internamente.
#
# Tenemos varios casos:
#
# * nil => false
# * '0' => false
# * '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]
else
self[:value]
end
end
# Siempre guardar el valor de este campo a menos que sea nulo
#
# @return [Boolean]
def empty?
value.nil?
end
end