Class: SqlGenius::Core::Analysis::Columns
- Inherits:
-
Object
- Object
- SqlGenius::Core::Analysis::Columns
- 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
- #call(table:) ⇒ Object
-
#initialize(connection, blocked_tables:, masked_column_patterns:, default_columns:) ⇒ Columns
constructor
A new instance of Columns.
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 |