Sha256: 762d8cacb2ef708b609db1fc90e96da14e448bae349703435afb5906d66b0805

Contents?: true

Size: 1012 Bytes

Versions: 5

Compression:

Stored size: 1012 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
      
      # Now check if it's empty:
      return [data, :empty] if data == ""

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

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

      # 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

5 entries across 5 versions & 1 rubygems

Version Path
mutations-0.9.1 lib/mutations/boolean_filter.rb
mutations-0.9.0 lib/mutations/boolean_filter.rb
mutations-0.8.3 lib/mutations/boolean_filter.rb
mutations-0.8.2 lib/mutations/boolean_filter.rb
mutations-0.8.1 lib/mutations/boolean_filter.rb