forest_admin_datasource_active_record 1.0.0.pre.beta.54 → 1.0.0.pre.beta.55

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 872ac653d0f9a281cab0421a9f01343ab3ee751ab12dd89d07aaabc870ecd91e
4
- data.tar.gz: dc666fc765acabfa4ce22fccd2e3240f4c4ba308884d2b77754b6ffd33adf85d
3
+ metadata.gz: 24b6a78fb3119d0686735b3d7d550148fad3d6a8c6a0251867230f13cc0c043f
4
+ data.tar.gz: 2912d1b2435e29fd19a3284debaa7ba97bdcd1bd223af8629645b9630a915656
5
5
  SHA512:
6
- metadata.gz: 613b29a6e6f7119ecc1d33f2955b5bf3fdf69999a4d6a2d7066c1a423b4bff4af630dc8dd4aefdf2fdc88a4f2393da8dcb5edc379ab54f89ba00e00ab158c512
7
- data.tar.gz: fc7ca9cc8868bdf8aca89735d1c22c550bdb45b962054958dd1cc8c01a2cd0ec8022c67dd27c1e7ea3c5c05f51442cbd7d8f22ff6e417eefd5352c667296dcb2
6
+ metadata.gz: ec1c79b449b3855576a9a318b50094fff0cb126a8a421718175b68bb76bf83939badc2a3c68625f3c723a53e0051d7f8d36621bfd5f618b6f7307e49a7553aba
7
+ data.tar.gz: d059a3bb21bc5b66a5bfceeb13f6e3b12abe5690a5cb9f6dfe26c80c5acdcbd4d53cf97476e69ac260a1762851a2d23a04d0dcfbeb8fe70a2d754c228f891e37
@@ -50,39 +50,41 @@ module ForestAdminDatasourceActiveRecord
50
50
 
51
51
  def apply_condition_tree(condition_tree, aggregator = nil)
52
52
  if condition_tree.is_a? Nodes::ConditionTreeBranch
53
- aggregator = condition_tree.aggregator.downcase
53
+ aggregator = condition_tree.aggregator.downcase.to_sym
54
54
  condition_tree.conditions.each do |condition|
55
- query = apply_condition_tree(condition, aggregator)
56
- @query = @query.send(aggregator, query)
55
+ @query = apply_condition_tree(condition, aggregator)
56
+ @query = @query.send(aggregator, @query)
57
57
  end
58
58
 
59
59
  @query
60
60
  else
61
- compute_main_operator(condition_tree, aggregator || 'and')
61
+ @query = compute_main_operator(condition_tree, aggregator || :and)
62
62
  end
63
63
  end
64
64
 
65
65
  def compute_main_operator(condition_tree, aggregator)
66
66
  field = format_field(condition_tree.field)
67
67
  value = condition_tree.value
68
+ aggregator = aggregator.to_sym
68
69
 
69
70
  case condition_tree.operator
70
71
  when Operators::PRESENT
71
- @query = @query.send(aggregator, @query.where.not({ field => nil }))
72
+ @query = query_aggregator(aggregator, @collection.model.where.not({ field => nil }))
72
73
  when Operators::EQUAL, Operators::IN
73
- @query = @query.send(aggregator, @query.where({ field => value }))
74
+ @query = query_aggregator(aggregator, @collection.model.where({ field => value }))
74
75
  when Operators::NOT_EQUAL, Operators::NOT_IN
75
- @query = @query.send(aggregator, @query.where.not({ field => value }))
76
+ @query = query_aggregator(aggregator, @collection.model.where.not({ field => value }))
76
77
  when Operators::GREATER_THAN
77
- @query = @query.send(aggregator, @query.where(@arel_table[field.to_sym].gt(value)))
78
+ @query = query_aggregator(aggregator, @collection.model.where(@arel_table[field.to_sym].gt(value)))
78
79
  when Operators::LESS_THAN
79
- @query = @query.send(aggregator, @query.where(@arel_table[field.to_sym].lt(value)))
80
+ @query = query_aggregator(aggregator, @collection.model.where(@arel_table[field.to_sym].lt(value)))
80
81
  when Operators::NOT_CONTAINS
81
- @query = @query.send(aggregator, @query.where.not(@arel_table[field.to_sym].matches("%#{value}%")))
82
+ @query = query_aggregator(aggregator,
83
+ @collection.model.where.not(@arel_table[field.to_sym].matches("%#{value}%")))
82
84
  when Operators::LIKE
83
- @query = @query.send(aggregator, @query.where(@arel_table[field.to_sym].matches(value)))
85
+ @query = query_aggregator(aggregator, @collection.model.where(@arel_table[field.to_sym].matches(value)))
84
86
  when Operators::INCLUDES_ALL
85
- @query = @query.send(aggregator, @query.where(@arel_table[field.to_sym].matches_all(value)))
87
+ @query = query_aggregator(aggregator, @collection.model.where(@arel_table[field.to_sym].matches_all(value)))
86
88
  end
87
89
 
88
90
  @query
@@ -93,7 +95,7 @@ module ForestAdminDatasourceActiveRecord
93
95
  @select += @projection.columns.map { |field| "#{@collection.model.table_name}.#{field}" }
94
96
  @projection.relations.each_key do |relation|
95
97
  relation_schema = @collection.schema[:fields][relation]
96
- @select << if relation_schema.type == 'OneToOne'
98
+ @select << if relation_schema.type == 'OneToOne' || relation_schema.type == 'PolymorphicOneToOne'
97
99
  "#{@collection.model.table_name}.#{relation_schema.origin_key_target}"
98
100
  else
99
101
  "#{@collection.model.table_name}.#{relation_schema.foreign_key}"
@@ -107,33 +109,41 @@ module ForestAdminDatasourceActiveRecord
107
109
  def apply_select
108
110
  unless @projection.nil?
109
111
  @query = @query.select(@select.join(', '))
110
- @query = @query.joins(@projection.relations.keys.map(&:to_sym))
112
+ @query = @query.includes(@projection.relations.keys.map(&:to_sym))
111
113
  end
112
114
 
113
115
  @query
114
116
  end
115
117
 
116
- def add_join_relation(relation, relation_name)
117
- if relation.type == 'ManyToMany'
118
- # TODO: to implement
119
- else
120
- @query = @query.joins(relation_name.to_sym)
121
- end
118
+ def add_join_relation(relation_name)
119
+ @query = @query.includes(relation_name.to_sym)
122
120
 
123
121
  @query
124
122
  end
125
123
 
126
124
  def format_field(field)
125
+ @select << "#{@collection.model.table_name}.#{field}"
126
+
127
127
  if field.include?(':')
128
128
  relation_name, field = field.split(':')
129
129
  relation = @collection.schema[:fields][relation_name]
130
130
  table_name = @collection.datasource.get_collection(relation.foreign_collection).model.table_name
131
- add_join_relation(relation, relation_name)
131
+ add_join_relation(relation_name)
132
+ @select << "#{table_name}.#{field}"
133
+
132
134
  return "#{table_name}.#{field}"
133
135
  end
134
136
 
135
137
  field
136
138
  end
139
+
140
+ def query_aggregator(aggregator, query)
141
+ if !@query.respond_to?(:where_clause) || @query.where_clause.empty?
142
+ query
143
+ else
144
+ @query.send(aggregator, query)
145
+ end
146
+ end
137
147
  end
138
148
  end
139
149
  end
@@ -1,3 +1,3 @@
1
1
  module ForestAdminDatasourceActiveRecord
2
- VERSION = "1.0.0-beta.54"
2
+ VERSION = "1.0.0-beta.55"
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.54
4
+ version: 1.0.0.pre.beta.55
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthieu
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2024-06-10 00:00:00.000000000 Z
12
+ date: 2024-06-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord