forest_admin_datasource_active_record 1.0.0.pre.beta.53 → 1.0.0.pre.beta.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 241691e966a9bd75b1cf66d07cc640e8ad2201fef29640568fafca6490c28250
4
- data.tar.gz: 4db07ffe9fa5d0c0f9397c9b4b7073850440aa5a68d8329ef1e350d2e23ba7db
3
+ metadata.gz: 872ac653d0f9a281cab0421a9f01343ab3ee751ab12dd89d07aaabc870ecd91e
4
+ data.tar.gz: dc666fc765acabfa4ce22fccd2e3240f4c4ba308884d2b77754b6ffd33adf85d
5
5
  SHA512:
6
- metadata.gz: d7b4af902acab6b8edd4067603f6de7f1e3420608a78b44a5ee339125030b54e4508a50f4956c50bad891a8d77c92f6854d922fd5e3debfbe9cf6706555fcacf
7
- data.tar.gz: 817416e1dc2c846b473f1afec82f922205560c8802f8b340507337714aa4388bc1d328436ad2b5bfaae24cef2b52960da69d6c25e7cb5c4b991a17bfd1e52d3c
6
+ metadata.gz: 613b29a6e6f7119ecc1d33f2955b5bf3fdf69999a4d6a2d7066c1a423b4bff4af630dc8dd4aefdf2fdc88a4f2393da8dcb5edc379ab54f89ba00e00ab158c512
7
+ data.tar.gz: fc7ca9cc8868bdf8aca89735d1c22c550bdb45b962054958dd1cc8c01a2cd0ec8022c67dd27c1e7ea3c5c05f51442cbd7d8f22ff6e417eefd5352c667296dcb2
@@ -47,11 +47,10 @@ module ForestAdminDatasourceActiveRecord
47
47
 
48
48
  def fetch_fields
49
49
  @model.columns_hash.each do |column_name, column|
50
- # TODO: check is not sti column
51
50
  field = ForestAdminDatasourceToolkit::Schema::ColumnSchema.new(
52
51
  column_type: get_column_type(@model, column),
53
52
  filter_operators: operators_for_column_type(get_column_type(@model, column)),
54
- is_primary_key: column_name == @model.primary_key,
53
+ is_primary_key: column_name == @model.primary_key || @model.primary_key.include?(column_name),
55
54
  is_read_only: false,
56
55
  is_sortable: true,
57
56
  default_value: column.default,
@@ -5,6 +5,7 @@ module ForestAdminDatasourceActiveRecord
5
5
  def initialize(db_config = {})
6
6
  super()
7
7
  @models = []
8
+ @habtm_models = {}
8
9
  init_orm(db_config)
9
10
  generate
10
11
  end
@@ -19,11 +20,52 @@ module ForestAdminDatasourceActiveRecord
19
20
  end
20
21
 
21
22
  def fetch_model(model)
22
- @models << model unless model.abstract_class? || @models.include?(model) || !model.table_exists?
23
+ if model.name.start_with?('HABTM_')
24
+ build_habtm(model)
25
+ else
26
+ @models << model unless model.abstract_class? || @models.include?(model) || !model.table_exists?
27
+ end
23
28
  end
24
29
 
25
30
  def init_orm(db_config)
26
31
  ActiveRecord::Base.establish_connection(db_config)
27
32
  end
33
+
34
+ def build_habtm(model)
35
+ if @habtm_models.key?(model.table_name)
36
+ @habtm_models[model.table_name].left_reflection = model.right_reflection
37
+ # when the second model is added, we can push the HABTM model to the models list
38
+ @models << make_through_model(
39
+ model.table_name,
40
+ [
41
+ @habtm_models[model.table_name].left_reflection,
42
+ @habtm_models[model.table_name].right_reflection
43
+ ]
44
+ )
45
+ else
46
+ @habtm_models[model.table_name] = model
47
+ end
48
+ end
49
+
50
+ def make_through_model(table_name, associations)
51
+ through_model = Class.new(ActiveRecord::Base) do
52
+ class << self
53
+ attr_accessor :name, :table_name
54
+ end
55
+
56
+ def self.add_association(name, options)
57
+ belongs_to name, required: false, **options
58
+ end
59
+ end
60
+
61
+ through_model.name = table_name.singularize
62
+ through_model.table_name = table_name
63
+ through_model.primary_key = [associations[0].foreign_key, associations[1].foreign_key]
64
+ associations.each do |association|
65
+ through_model.add_association(association.name, association.options)
66
+ end
67
+
68
+ through_model
69
+ end
28
70
  end
29
71
  end
@@ -107,9 +107,7 @@ module ForestAdminDatasourceActiveRecord
107
107
  def apply_select
108
108
  unless @projection.nil?
109
109
  @query = @query.select(@select.join(', '))
110
- @query = @query.eager_load(@projection.relations.keys.map(&:to_sym))
111
- # TODO: replace eager_load by joins because eager_load select ALL columns of relation
112
- # @query = @query.joins(@projection.relations.keys.map(&:to_sym))
110
+ @query = @query.joins(@projection.relations.keys.map(&:to_sym))
113
111
  end
114
112
 
115
113
  @query
@@ -1,3 +1,3 @@
1
1
  module ForestAdminDatasourceActiveRecord
2
- VERSION = "1.0.0-beta.53"
2
+ VERSION = "1.0.0-beta.54"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forest_admin_datasource_active_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.beta.53
4
+ version: 1.0.0.pre.beta.54
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthieu