Sha256: e348e22f0cb50db5286220108ec92c97187037d40f7fc8924f994ac8d7fad21a

Contents?: true

Size: 1.16 KB

Versions: 16

Compression:

Stored size: 1.16 KB

Contents

# frozen_string_literal: true

module Anyway
  module AutoCast
    # Regexp to detect array values
    # Array value is a values that contains at least one comma
    # and doesn't start/end with quote or curly braces
    ARRAY_RXP = /\A[^'"{].*\s*,\s*.*[^'"}]\z/

    class << self
      def call(val)
        return val unless val.is_a?(::Hash) || val.is_a?(::String)

        case val
        when Hash
          val.transform_values { call(_1) }
        when ARRAY_RXP
          val.split(/\s*,\s*/).map { call(_1) }
        when /\A(true|t|yes|y)\z/i
          true
        when /\A(false|f|no|n)\z/i
          false
        when /\A(nil|null)\z/i
          nil
        when /\A\d+\z/
          val.to_i
        when /\A\d*\.\d+\z/
          val.to_f
        when /\A['"].*['"]\z/
          val.gsub(/(\A['"]|['"]\z)/, "")
        else
          val
        end
      end

      def cast_hash(obj)
        obj.transform_values do |val|
          val.is_a?(::Hash) ? cast_hash(val) : call(val)
        end
      end

      def coerce(_key, val)
        call(val)
      end
    end
  end

  module NoCast
    def self.call(val) = val

    def self.coerce(_key, val) = val
  end
end

Version data entries

16 entries across 16 versions & 2 rubygems

Version Path
runger_config-3.0.1 lib/anyway/auto_cast.rb
runger_config-3.0.0 lib/anyway/auto_cast.rb
runger_config-2.7.0 lib/anyway/auto_cast.rb
runger_config-2.6.1 lib/anyway/auto_cast.rb
runger_config-2.6.0 lib/anyway/auto_cast.rb
anyway_config-2.5.4 lib/anyway/auto_cast.rb
anyway_config-2.5.3 lib/anyway/auto_cast.rb
anyway_config-2.5.2 lib/anyway/auto_cast.rb
anyway_config-2.5.1 lib/anyway/auto_cast.rb
anyway_config-2.5.0 lib/anyway/auto_cast.rb
anyway_config-2.4.2 lib/anyway/auto_cast.rb
anyway_config-2.4.1 lib/anyway/auto_cast.rb
anyway_config-2.4.0 lib/anyway/auto_cast.rb
anyway_config-2.3.1 lib/anyway/auto_cast.rb
anyway_config-2.3.0 lib/anyway/auto_cast.rb
anyway_config-2.2.3 lib/anyway/auto_cast.rb