Sha256: 3d5960417c5d79779453d47cea0725b7595afbbcddf99842a80433d7c038cd48

Contents?: true

Size: 1.26 KB

Versions: 57

Compression:

Stored size: 1.26 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',
        '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_class(klass)
        name = all[klass.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

57 entries across 57 versions & 1 rubygems

Version Path
motor-admin-0.1.87 lib/motor/active_record_utils/types.rb
motor-admin-0.1.86 lib/motor/active_record_utils/types.rb
motor-admin-0.1.85 lib/motor/active_record_utils/types.rb
motor-admin-0.1.84 lib/motor/active_record_utils/types.rb
motor-admin-0.1.83 lib/motor/active_record_utils/types.rb
motor-admin-0.1.82 lib/motor/active_record_utils/types.rb
motor-admin-0.1.81 lib/motor/active_record_utils/types.rb
motor-admin-0.1.80 lib/motor/active_record_utils/types.rb
motor-admin-0.1.79 lib/motor/active_record_utils/types.rb
motor-admin-0.1.78 lib/motor/active_record_utils/types.rb
motor-admin-0.1.77 lib/motor/active_record_utils/types.rb
motor-admin-0.1.76 lib/motor/active_record_utils/types.rb
motor-admin-0.1.75 lib/motor/active_record_utils/types.rb
motor-admin-0.1.74 lib/motor/active_record_utils/types.rb
motor-admin-0.1.73 lib/motor/active_record_utils/types.rb
motor-admin-0.1.72 lib/motor/active_record_utils/types.rb
motor-admin-0.1.71 lib/motor/active_record_utils/types.rb
motor-admin-0.1.70 lib/motor/active_record_utils/types.rb
motor-admin-0.1.68 lib/motor/active_record_utils/types.rb
motor-admin-0.1.67 lib/motor/active_record_utils/types.rb