Class: RailsLens::Connection
- Inherits:
-
Object
- Object
- RailsLens::Connection
- Defined in:
- lib/rails_lens/connection.rb
Class Method Summary collapse
- .adapter_for(model_class, connection = nil) ⇒ Object
- .connection_config(model_class) ⇒ Object
- .connection_info(model_class) ⇒ Object
- .database_dialect(connection) ⇒ Object
- .database_version(model_class) ⇒ Object
- .detect_adapter_name(connection) ⇒ Object
- .resolve_adapter_class(adapter_name) ⇒ Object
- .supports_check_constraints?(model_class) ⇒ Boolean
- .supports_comments?(model_class) ⇒ Boolean
- .supports_foreign_keys?(model_class) ⇒ Boolean
- .supports_materialized_views?(model_class) ⇒ Boolean
- .supports_views?(model_class) ⇒ Boolean
Class Method Details
.adapter_for(model_class, connection = nil) ⇒ Object
6 7 8 9 10 11 12 |
# File 'lib/rails_lens/connection.rb', line 6 def adapter_for(model_class, connection = nil) conn = connection || model_class.connection adapter_name = detect_adapter_name(conn) adapter_class = resolve_adapter_class(adapter_name) adapter_class.new(conn, model_class.table_name) end |
.connection_config(model_class) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/rails_lens/connection.rb', line 60 def connection_config(model_class) if model_class.connection.respond_to?(:connection_db_config) # Rails 6.1+ model_class.connection.connection_db_config.configuration_hash elsif model_class.connection.respond_to?(:config) # Older Rails versions model_class.connection.config else {} end end |
.connection_info(model_class) ⇒ Object
86 87 88 89 90 91 92 93 |
# File 'lib/rails_lens/connection.rb', line 86 def connection_info(model_class) { adapter: detect_adapter_name(model_class.connection), database: connection_config(model_class)[:database], version: database_version(model_class), encoding: connection_encoding(model_class) } end |
.database_dialect(connection) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/rails_lens/connection.rb', line 43 def database_dialect(connection) adapter_name = connection.adapter_name case adapter_name.downcase when /postgresql/, /postgis/ 'PostgreSQL' when /mysql2/, /trilogy/ 'MySQL' when /mariadb/ 'MariaDB' when /sqlite/ 'SQLite' else adapter_name # Return the original adapter name if unknown end end |
.database_version(model_class) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/rails_lens/connection.rb', line 72 def database_version(model_class) connection = model_class.connection if connection.respond_to?(:database_version) connection.database_version elsif connection.respond_to?(:version) connection.version else 'Unknown' end rescue StandardError 'Unknown' end |
.detect_adapter_name(connection) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/rails_lens/connection.rb', line 27 def detect_adapter_name(connection) adapter_name = connection.adapter_name.downcase case adapter_name when /postgresql/, /postgis/ :postgresql when /mysql2/, /trilogy/, /mariadb/ :mysql when /sqlite/ :sqlite3 else # Return the normalized adapter name for constantize adapter_name.to_sym end end |
.resolve_adapter_class(adapter_name) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/rails_lens/connection.rb', line 14 def resolve_adapter_class(adapter_name) class_name = "RailsLens::Schema::Adapters::#{adapter_name.to_s.camelize}" begin class_name.constantize rescue NameError raise RailsLens::UnsupportedAdapterError, "Unsupported database adapter: #{adapter_name}. " \ "Expected adapter class #{class_name} not found. " \ 'Consider adding support by creating the adapter class.' end end |
.supports_check_constraints?(model_class) ⇒ Boolean
99 100 101 |
# File 'lib/rails_lens/connection.rb', line 99 def supports_check_constraints?(model_class) model_class.connection.supports_check_constraints? end |
.supports_comments?(model_class) ⇒ Boolean
103 104 105 |
# File 'lib/rails_lens/connection.rb', line 103 def supports_comments?(model_class) model_class.connection.supports_comments? end |
.supports_foreign_keys?(model_class) ⇒ Boolean
95 96 97 |
# File 'lib/rails_lens/connection.rb', line 95 def supports_foreign_keys?(model_class) model_class.connection.supports_foreign_keys? end |
.supports_materialized_views?(model_class) ⇒ Boolean
111 112 113 |
# File 'lib/rails_lens/connection.rb', line 111 def supports_materialized_views?(model_class) model_class.connection.supports_materialized_views? end |
.supports_views?(model_class) ⇒ Boolean
107 108 109 |
# File 'lib/rails_lens/connection.rb', line 107 def supports_views?(model_class) model_class.connection.supports_views? end |