module Formulario
  class Field
    class Boolean < Field
      def self.for(raw_value)
        if raw_value.is_a?(Field)
          raw_value
        else
          build(raw_value)
        end
      end

      private

      def self.build(raw_value)
        case get_value(raw_value)
        when true, 'true', 't', '1'
          new true
        when false, 'false', 'f', '0', ''
          new false
        else
          ExceptionalValue.new(raw_value, reasons: ['needs to be boolean'])
        end
      end

      def self.get_value(raw_value)
        raw_value.to_s.downcase
      end
    end
  end
end