Sha256: a1d60c7d482155fc8d181164732af319b462bf94a8572775dcfa516153c95bfa

Contents?: true

Size: 958 Bytes

Versions: 1

Compression:

Stored size: 958 Bytes

Contents

module SafeYAML
  class Transform
    OPTIONS = {
      :enable_symbol_parsing => false
    }

    PREDEFINED_VALUES = {
      ""      => nil,
      "~"     => nil,
      "null"  => nil,
      "yes"   => true,
      "on"    => true,
      "true"  => true,
      "no"    => false,
      "off"   => false,
      "false" => false
    }.freeze

    SYMBOL_MATCHER = /^:\w+$/.freeze

    INTEGER_MATCHER = /^\d+$/.freeze

    FLOAT_MATCHER = /^(?:\d+(?:\.\d*)?$)|(?:^\.\d+$)/.freeze

    def self.to_proper_type(value)
      if value.is_a?(String)
        if PREDEFINED_VALUES.include?(value.downcase)
          return PREDEFINED_VALUES[value.downcase]

        elsif OPTIONS[:enable_symbol_parsing] && value.match(SYMBOL_MATCHER)
          return value[1..-1].to_sym

        elsif value.match(INTEGER_MATCHER)
          return value.to_i

        elsif value.match(FLOAT_MATCHER)
          return value.to_f
        end
      end

      value
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
safe_yaml-0.4 lib/safe_yaml/transform.rb