Class: ForestAdminDatasourceActiveRecord::Datasource

Inherits:
ForestAdminDatasourceToolkit::Datasource
  • Object
show all
Defined in:
lib/forest_admin_datasource_active_record/datasource.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#modelsObject (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