Sha256: 23b74b58d953fe75d4009bc577d1b6ad2d7d0779d2c08573c14edb16c43698d8

Contents?: true

Size: 927 Bytes

Versions: 3

Compression:

Stored size: 927 Bytes

Contents

module Mutations
  class BooleanFilter < AdditionalFilter
    @default_options = {
      :nils => false   # true allows an explicit nil to be valid. Overrides any other options
    }

    BOOL_MAP = {"true" => true, "1" => true, "false" => false, "0" => false}

    def filter(data)

      # Handle nil case
      if data.nil?
        return [nil, nil] if options[:nils]
        return [nil, :nils]
      end

      # If data is true or false, we win.
      return [data, nil] if data == true || data == false

      # If data is a Fixnum, like 1, let's convert it to a string first
      data = data.to_s if data.is_a?(Fixnum)

      # If data's a string, try to convert it to a boolean. If we can't, it's invalid.
      if data.is_a?(String)
        res = BOOL_MAP[data.downcase]
        return [res, nil] unless res.nil?
        return [data, :boolean]
      else
        return [data, :boolean]
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mutations-0.7.1 lib/mutations/boolean_filter.rb
mutations-0.7.0 lib/mutations/boolean_filter.rb
mutations-0.6.0 lib/mutations/boolean_filter.rb