2019-08-20 22:11:10 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
# Implementa valores por sí o por no
|
2020-06-16 22:10:54 +00:00
|
|
|
#
|
|
|
|
# Esto es increíblemente difícil de lograr que salga bien!
|
2019-08-20 22:11:10 +00:00
|
|
|
class MetadataBoolean < MetadataTemplate
|
|
|
|
def default_value
|
|
|
|
false
|
|
|
|
end
|
|
|
|
|
2019-09-30 18:20:23 +00:00
|
|
|
# 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.
|
2020-05-26 19:36:26 +00:00
|
|
|
#
|
|
|
|
# Tenemos varios casos:
|
|
|
|
#
|
|
|
|
# * nil => false
|
|
|
|
# * '0' => false
|
|
|
|
# * '1' => true
|
|
|
|
# * false
|
|
|
|
# * true
|
2019-08-20 22:11:10 +00:00
|
|
|
def value
|
2021-10-21 13:48:34 +00:00
|
|
|
case self[:value]
|
|
|
|
when NilClass
|
|
|
|
document.data.fetch(name.to_s, default_value)
|
|
|
|
when String
|
|
|
|
true_values.include? self[:value]
|
|
|
|
else
|
|
|
|
self[:value]
|
|
|
|
end
|
2020-07-23 19:06:29 +00:00
|
|
|
end
|
|
|
|
|
2021-09-11 20:26:44 +00:00
|
|
|
# Siempre guardar el valor de este campo a menos que sea nulo
|
|
|
|
def empty?
|
2021-10-21 13:47:32 +00:00
|
|
|
value.nil?
|
2021-09-11 20:26:44 +00:00
|
|
|
end
|
|
|
|
|
2020-07-23 19:06:29 +00:00
|
|
|
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
|
2019-09-30 18:20:23 +00:00
|
|
|
end
|
2019-08-20 22:11:10 +00:00
|
|
|
end
|