Sha256: 8c8f69fda2acbdd958675928d29030710ecad7728d021cacddbe291fe5e15a3e

Contents?: true

Size: 877 Bytes

Versions: 3

Compression:

Stored size: 877 Bytes

Contents

# frozen_string_literal: true

module SqlEnum
  EnumColumn = Struct.new(:table_name, :column_name) do
    def values
      schema_values.to_s.scan(/\w+/).reject { |v| v == 'enum' }
    end

    private

    def schema_values
      ActiveRecord::Base.connection.exec_query(schema_values_query).rows.dig(0, 0)
    end

    def database_name
      if ActiveRecord::Base.respond_to?(:connection_db_config)
        ActiveRecord::Base.connection_db_config.configuration_hash[:database]
      else
        ActiveRecord::Base.connection_config.values_at(:database, :database_name).find(&:present?)
      end
    end

    def schema_values_query
      <<~SQL
        SELECT column_type
        FROM information_schema.COLUMNS
        WHERE TABLE_SCHEMA = '#{database_name}'
        AND TABLE_NAME = '#{table_name}'
        AND COLUMN_NAME = '#{column_name}'
      SQL
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
sql_enum-1.0.0 lib/sql_enum/enum_column.rb
sql_enum-0.4.0 lib/sql_enum/enum_column.rb
sql_enum-0.3.1 lib/sql_enum/enum_column.rb