colinpetruno/portunus

View on GitHub
lib/portunus/type_casters/boolean.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Portunus
  module TypeCasters
    class Boolean
      def self.cast(value:)
        new(value: value).cast
      end

      def self.uncast(value:)
        new(value: value).uncast
      end

      def initialize(value:)
        @value = value
      end

      def cast
        if [false, nil, "false", 0].include?(value)
          "false"
        else
          "true"
        end
      end

      def uncast
        if value == "true"
          true
        elsif value == "false"
          false
        else
          raise ::Portunus::Error.new("Invalid boolean value")
        end
      end

      private

      attr_reader :value
    end
  end
end