lib/stockboy/translations/boolean.rb
require 'stockboy/translator'
module Stockboy::Translations
# Convert common false-like and true-like values to proper boolean +true+ or
# +false+.
#
# Returns nil for indeterminate values. This should be chained with a
# default value translator like [DefaultFalse] or [DefaultTrue].
#
# == Job template DSL
#
# Registered as +:boolean+. Use with:
#
# attributes do
# active as: :boolean
# end
#
# @example
# bool = Stockboy::Translator::Boolean.new
#
# record.active = 't'
# bool.translate(record, :active) # => true
#
# record.active = 'f'
# bool.translate(record, :active) # => false
#
# record.active = '1'
# bool.translate(record, :active) # => true
#
# record.active = '0'
# bool.translate(record, :active) # => false
#
# record.active = 'y'
# bool.translate(record, :active) # => true
#
# record.active = 'n'
# bool.translate(record, :active) # => false
#
# record.active = '?'
# bool.translate(record, :active) # => nil
#
class Boolean < Stockboy::Translator
TRUTHY_VALUES = [true, 1, '1', 't', 'T', 'true', 'TRUE', 'y', 'Y', 'yes', 'YES']
FALSY_VALUES = [false, 0, '0', 'f', 'F', 'false', 'FALSE', 'n', 'N', 'no', 'NO']
# @return [Boolean]
#
def translate(context)
value = field_value(context, field_key)
return true if TRUTHY_VALUES.include?(value)
return false if FALSY_VALUES.include?(value)
return nil
end
end
end