Sha256: 21cb4ffb768d8643d6eeb4877c046d003599bfa61cf71e30854350859865691c
Contents?: true
Size: 1.32 KB
Versions: 2
Compression:
Stored size: 1.32 KB
Contents
# frozen_string_literal: true module ActiveRecordDataLoader module ActiveRecord class EnumValueGenerator class << self def generator_for(model_class:, ar_column:, connection_factory:) values = enum_values_for(model_class, ar_column.sql_type, connection_factory) -> { values.sample } end private def enum_values_for(model_class, enum_type, connection_factory) connection = connection_factory.call if connection.adapter_name.downcase.to_sym == :postgresql postgres_enum_values_for(model_class, enum_type) elsif connection.adapter_name.downcase.to_s.start_with?("mysql") mysql_enum_values_for(model_class, enum_type) else [] end end def postgres_enum_values_for(model_class, enum_type) model_class .connection .execute("SELECT unnest(enum_range(NULL::#{enum_type}))::text") .map(&:values) .flatten .compact end def mysql_enum_values_for(_model_class, enum_type) enum_type .to_s .downcase .gsub(/\Aenum\(|\)\Z/, "") .split(",") .map(&:strip) .map { |s| s.gsub(/\A'|'\Z/, "") } end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems