sutty/app/models/metadata_boolean.rb

52 lines
1.2 KiB
Ruby
Raw Permalink Normal View History

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
# 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
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
end
# Siempre guardar el valor de este campo a menos que sea nulo
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
2019-08-20 22:11:10 +00:00
end