Sha256: fc909564b5bd4adfcd1a195d0a47f9b6df5d807ef388c55895f2dade55147c29
Contents?: true
Size: 1.37 KB
Versions: 4
Compression:
Stored size: 1.37 KB
Contents
# frozen_string_literal: true module Motor module ActiveRecordUtils module Types MUTEX = Mutex.new DEFAULT_TYPE = 'string' UNIFIED_TYPES = { 'smallint' => 'integer', 'int' => 'integer', 'int4' => 'integer', 'int8' => 'integer', 'int16' => 'integer', 'bigint' => 'integer', 'numeric' => 'float', 'decimal' => 'float', 'float4' => 'float', 'float8' => 'float', 'float16' => 'float', 'text' => 'string', 'citext' => 'string', 'jsonb' => 'json', 'bool' => 'boolean', 'timestamp' => 'datetime' }.freeze module_function def all @all || MUTEX.synchronize do @all ||= build_types_hash end end def find_class_for_name(name) all.invert[name.to_s] end def find_name_for_type(type) name = all[type.subtype.class.to_s] if type.respond_to?(:subtype) name ||= all[type.class.to_s] return UNIFIED_TYPES.fetch(name, name) if name DEFAULT_TYPE end def build_types_hash type_map = ActiveRecord::Base.connection.send(:type_map) type_map.instance_variable_get('@mapping').map do |name, type| next unless name.is_a?(String) [type.call.class.to_s, name] end.compact.to_h end end end end
Version data entries
4 entries across 4 versions & 1 rubygems