Sha256: 9b7b2a3c37e3bf27f2c41a0b7585645175df26a05173ba2cb66b42c74ad403f8

Contents?: true

Size: 1.33 KB

Versions: 4

Compression:

Stored size: 1.33 KB

Contents

require 'json'
require 'chronic'

module Saneitized

  def self.convert(unknown, options = {})
    options[:blacklist] ||= nil

    return Saneitized::Hash.new(unknown, options) if unknown.is_a? ::Hash
    return Saneitized::Array.new(unknown, options) if unknown.is_a? ::Array
    return unknown unless unknown.is_a? String #Only attempt to convert string
    return unknown if Array(options[:blacklist]).include?(unknown)

    %w(true false nil integer float json time).each do |type|
      value = Converter.send(type + '?', unknown)
      next if value == :nope
      return (type == 'json') ? convert(value, options) : value
    end

    unknown
  end


  module Converter
    extend self

    def true?(unknown)
      (unknown == 'true') ? true : :nope
    end

    def false?(unknown)
      (unknown == 'false') ? false : :nope
    end

    def nil?(unknown)
      (%w(nil null NULL).include? unknown) ? nil : :nope
    end

    def json?(unknown)
      JSON.parse(unknown)
    rescue JSON::ParserError, TypeError
      :nope
    end

    def integer?(unknown)
      Integer(unknown)
    rescue ArgumentError, TypeError
      :nope
    end

    def float?(unknown)
      Float(unknown)
    rescue ArgumentError, TypeError
      :nope
    end

    def time?(unknown)
      value = Chronic.parse(unknown)
      value.nil? ? :nope : value
    end
  end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
saneitized-1.5.0 lib/saneitized/converter.rb
saneitized-1.4.0 lib/saneitized/converter.rb
saneitized-1.3.2 lib/saneitized/converter.rb
saneitized-1.3.1 lib/saneitized/converter.rb