Class: SqlGenius::Core::Analysis::Columns

Inherits:
Object
  • Object
show all
Defined in:
lib/sql_genius/core/analysis/columns.rb

Overview

Service class for the Rails engine’s GET /columns action. Takes a Core::Connection and the relevant configuration; returns a tagged Result struct that the controller maps to HTTP responses.

Each status maps 1:1 to an HTTP status code:

:ok        → 200 with columns: array
:blocked   → 403 with error_message:
:not_found → 404 with error_message:

The adapter reads result.status and dispatches accordingly.

Defined Under Namespace

Classes: Result

Instance Method Summary collapse

Constructor Details

#initialize(connection, blocked_tables:, masked_column_patterns:, default_columns:) ⇒ Columns

Returns a new instance of Columns.



19
20
21
22
23
24
# File 'lib/sql_genius/core/analysis/columns.rb', line 19

def initialize(connection, blocked_tables:, masked_column_patterns:, default_columns:)
  @connection = connection
  @blocked_tables = blocked_tables
  @masked_column_patterns = masked_column_patterns
  @default_columns = default_columns
end

Instance Method Details

#call(table:) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/sql_genius/core/analysis/columns.rb', line 26

def call(table:)
  return blocked_result(table)   if @blocked_tables.include?(table)
  return not_found_result(table) unless @connection.tables.include?(table)

  defaults = @default_columns[table] || []
  visible = @connection.columns_for(table).reject do |col|
    SqlValidator.masked_column?(col.name, @masked_column_patterns)
  end
  formatted = visible.map do |col|
    {
      name: col.name,
      type: col.type.to_s,
      default: defaults.empty? || defaults.include?(col.name),
    }
  end

  Result.new(status: :ok, columns: formatted)
end