Class: ForestAdminDatasourceActiveRecord::Datasource
- Inherits:
-
ForestAdminDatasourceToolkit::Datasource
- Object
- ForestAdminDatasourceToolkit::Datasource
- ForestAdminDatasourceActiveRecord::Datasource
- Defined in:
- lib/forest_admin_datasource_active_record/datasource.rb
Instance Attribute Summary collapse
-
#models ⇒ Object
readonly
Returns the value of attribute models.
Instance Method Summary collapse
- #build_binding_symbol(connection_name, binds) ⇒ Object
- #execute_native_query(connection_name, query, binds) ⇒ Object
-
#initialize(db_config = {}, support_polymorphic_relations: false, live_query_connections: nil) ⇒ Datasource
constructor
A new instance of Datasource.
Constructor Details
#initialize(db_config = {}, support_polymorphic_relations: false, live_query_connections: nil) ⇒ Datasource
Returns a new instance of Datasource.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/forest_admin_datasource_active_record/datasource.rb', line 7 def initialize( db_config = {}, support_polymorphic_relations: false, live_query_connections: nil ) super() @models = [] @support_polymorphic_relations = support_polymorphic_relations @habtm_models = {} @connection_drivers = {} @live_query_connections = if live_query_connections.is_a?(String) { live_query_connections => 'primary' } elsif live_query_connections.is_a?(Hash) live_query_connections else {} end init_orm(db_config) generate end |
Instance Attribute Details
#models ⇒ Object (readonly)
Returns the value of attribute models.
5 6 7 |
# File 'lib/forest_admin_datasource_active_record/datasource.rb', line 5 def models @models end |
Instance Method Details
#build_binding_symbol(connection_name, binds) ⇒ Object
49 50 51 52 53 54 55 |
# File 'lib/forest_admin_datasource_active_record/datasource.rb', line 49 def build_binding_symbol(connection_name, binds) if @connection_drivers[@live_query_connections[connection_name]] == 'postgresql' "$#{binds.size + 1}" else '?' end end |
#execute_native_query(connection_name, query, binds) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/forest_admin_datasource_active_record/datasource.rb', line 30 def execute_native_query(connection_name, query, binds) unless @live_query_connections[connection_name] raise ForestAdminAgent::Http::Exceptions::NotFoundError, "Native query connection '#{connection_name}' is unknown." end begin connection = @live_query_connections[connection_name] result = ActiveRecord::Base.connects_to(database: { reading: connection.to_sym }).first.connection .exec_query(query, "SQL Native Query on '#{connection_name}'", binds) ForestAdminDatasourceToolkit::Utils::HashHelper.convert_keys(result.to_a) rescue StandardError => e raise ForestAdminDatasourceToolkit::Exceptions::ForestException, "Error when executing SQL query: '#{e.full_message}'" end end |