Sha256: 75f1c17426af58aabf75e25ef0a80d7fb3c691b948ed80700ee84e43af347470

Contents?: true

Size: 817 Bytes

Versions: 17

Compression:

Stored size: 817 Bytes

Contents

class Cl
  module Cast
    TRUE  = /^(true|yes|on)$/
    FALSE = /^(false|no|off)$/

    def cast(value)
      case type
      when nil
        value
      when :array
        Array(value).compact.flatten.map { |value| split(value) }.flatten
      when :string, :str
        value.to_s unless value.to_s.empty?
      when :flag, :boolean, :bool
        return true  if value.to_s =~ TRUE
        return false if value.to_s =~ FALSE
        !!value
      when :integer, :int
        Integer(value)
      when :float
        Float(value)
      else
        raise ArgumentError, "Unknown type: #{type}" if value
      end
    rescue ::ArgumentError => e
      raise ArgumentError.new(:wrong_type, value.inspect, type)
    end

    def split(value)
      separator ? value.to_s.split(separator) : value
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
cl-1.0.0 lib/cl/cast.rb
cl-0.1.28 lib/cl/cast.rb
cl-0.1.27 lib/cl/cast.rb
cl-0.1.26 lib/cl/cast.rb
cl-0.1.25 lib/cl/cast.rb
cl-0.1.24 lib/cl/cast.rb
cl-0.1.23 lib/cl/cast.rb
cl-0.1.22 lib/cl/cast.rb
cl-0.1.21 lib/cl/cast.rb
cl-0.1.20 lib/cl/cast.rb
cl-0.1.19 lib/cl/cast.rb
cl-0.1.18 lib/cl/cast.rb
cl-0.1.17 lib/cl/cast.rb
cl-0.1.16 lib/cl/cast.rb
cl-0.1.15 lib/cl/cast.rb
cl-0.1.14 lib/cl/cast.rb
cl-0.1.13 lib/cl/cast.rb