Sha256: 06fb39af2582500fd24d1dcc97115fc4f7fe1eb8ece62b51b297c25f5056bde7

Contents?: true

Size: 1.2 KB

Versions: 5

Compression:

Stored size: 1.2 KB

Contents

# frozen_string_literal: true

module Esquema
  module TypeCaster # rubocop:disable Style/Documentation
    def self.cast(type, value) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
      case type
      when :string, :text
        value.to_s
      when :integer
        begin
          Integer(value)
        rescue StandardError
          nil
        end
      when :float
        begin
          Float(value)
        rescue StandardError
          nil
        end
      when :number
        if value.to_s.include?(".")
          begin
            Float(value)
          rescue StandardError
            nil
          end
        else
          begin
            Integer(value)
          rescue StandardError
            nil
          end
        end
      when :boolean
        case value
        when true, "true", "1", 1
          true
        when false, "false", "0", 0
          false
        end
      when :array
        Array(value)
      when :object
        value.is_a?(Hash) ? value : nil # or convert as desired
      when :null
        nil if value.nil?
      else
        raise ArgumentError, "Unsupported type: #{type}"
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 3 rubygems

Version Path
model-to-schema-0.1.2 lib/esquema/type_caster.rb
model-to-schema-0.1.1 lib/esquema/type_caster.rb
model-to-schema-0.1.0 lib/esquema/type_caster.rb
model-to-squema-0.1.0 lib/esquema/type_caster.rb
esquema-0.1.2 lib/esquema/type_caster.rb