forest_admin_datasource_mongoid 1.19.1 → 1.19.3

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: ecbc7d98b9624c6ab77f695543d8a471da4342dbbb98006c790a6b2960321ed4
4
- data.tar.gz: e209e57f676275351c20c992b8447746a2be207cff273629cf5cb170bd5a3f99
3
+ metadata.gz: b27ac1b878a98f85863c4f7ada5ce6cf2622f15c326487509c3d73d4a6964d35
4
+ data.tar.gz: 1246128bdb1f69f137c978402b0268530593a7369e40b24507d1270ead86cebe
5
5
  SHA512:
6
- metadata.gz: e0af1afe82728cae0db55b62d31e65936b6b4a05ed6b3bab2c1ec24be00c315d9f3a9262b322bc6235e89088237cc855d5d4b48bf5a87f829314f21f300820d3
7
- data.tar.gz: '05586d83d941b69b879fd3a8b6272d27104e603cb2bc85fd83fb96358abfca96d81f4a8b05973aebac67baa4bc03549f5a4f33cc5e56c59ffa02d833ba433882'
6
+ metadata.gz: 6e3e496fb16697f1513b1f0c5241cfc97c6110621bbced44f852ef6ecca207641affcf856768417d27f79f0480c06d9579b97bbee2086bdf253ceacaa7eeb98f
7
+ data.tar.gz: c4389a71350ac95b3015b2cee66581d0039e0e4ad132f01f543525915dadbcbb7940520f6f62ff823fa0fe5323b7e612e9ad9e25b341fa2d25c500733781556e
@@ -4,10 +4,12 @@ module ForestAdminDatasourceMongoid
4
4
  def get_polymorphic_types(relation_name)
5
5
  types = {}
6
6
 
7
- ObjectSpace.each_object(Class).select { |klass| klass < Mongoid::Document }.each do |model|
8
- if model.relations.any? { |_, relation| relation.options[:as] == relation_name.to_sym }
9
- primary_key = model.fields.keys.find { |key| model.fields[key].options[:as] == :id } || :_id
10
- types[model.name.gsub('::', '__')] = primary_key.to_s
7
+ ObjectSpace.each_object(Class).each do |klass|
8
+ next unless klass < Mongoid::Document
9
+
10
+ if klass.relations.any? { |_, relation| relation.options[:as] == relation_name.to_sym }
11
+ primary_key = klass.fields.keys.find { |key| klass.fields[key].options[:as] == :id } || :_id
12
+ types[klass.name.gsub('::', '__')] = primary_key.to_s
11
13
  end
12
14
  end
13
15
 
@@ -4,33 +4,35 @@ module ForestAdminDatasourceMongoid
4
4
  include ForestAdminDatasourceToolkit::Components::Query::ConditionTree
5
5
  def get_validations(model, column)
6
6
  return [] if column.is_a?(Hash)
7
+ return [] if before_validation_callback?(model)
8
+ return [] unless model._validators? && model._validators[column.name.to_sym].size.positive?
7
9
 
8
- validations = []
9
- # NOTICE: Do not consider validations if a before_validation Active Records
10
- # Callback is detected.
10
+ parse_column_validators(model._validators[column.name.to_sym], column)
11
+ end
12
+
13
+ def before_validation_callback?(model)
11
14
  default_callback_excluded = [:normalize_changed_in_place_attributes]
12
- return validations if model._validation_callbacks
13
- .reject { |callback| default_callback_excluded.include?(callback.filter) }
14
- .map(&:kind).include?(:before)
15
+ model._validation_callbacks.any? do |callback|
16
+ !default_callback_excluded.include?(callback.filter) && callback.kind == :before
17
+ end
18
+ end
15
19
 
16
- if model._validators? && model._validators[column.name.to_sym].size.positive?
17
- model._validators[column.name.to_sym].each do |validator|
18
- # NOTICE: Do not consider conditional validations
19
- next if validator.options[:if] || validator.options[:unless] || validator.options[:on]
20
+ def parse_column_validators(validators, column)
21
+ validations = []
22
+ validators.each do |validator|
23
+ next if validator.options[:if] || validator.options[:unless] || validator.options[:on]
20
24
 
21
- case validator.class.to_s
22
- when Mongoid::Validatable::PresenceValidator.to_s
23
- validations << { operator: Operators::PRESENT }
24
- when ActiveModel::Validations::NumericalityValidator.to_s
25
- validations = parse_numericality_validator(validator, validations)
26
- when Mongoid::Validatable::LengthValidator.to_s
27
- validations = parse_length_validator(validator, validations, column)
28
- when Mongoid::Validatable::FormatValidator.to_s
29
- validations = parse_format_validator(validator, validations)
30
- end
25
+ case validator.class.to_s
26
+ when Mongoid::Validatable::PresenceValidator.to_s
27
+ validations << { operator: Operators::PRESENT }
28
+ when ActiveModel::Validations::NumericalityValidator.to_s
29
+ validations = parse_numericality_validator(validator, validations)
30
+ when Mongoid::Validatable::LengthValidator.to_s
31
+ validations = parse_length_validator(validator, validations, column)
32
+ when Mongoid::Validatable::FormatValidator.to_s
33
+ validations = parse_format_validator(validator, validations)
31
34
  end
32
35
  end
33
-
34
36
  validations
35
37
  end
36
38
 
@@ -28,11 +28,13 @@ module ForestAdminDatasourceMongoid
28
28
  result[field_prefix] ||= nil
29
29
  end
30
30
 
31
- nested_prefixes = projection.select { |field| field.include?(':') }.map { |field| field.split(':').first }.uniq
31
+ nested_prefixes = projection.filter_map { |field| field.split(':').first if field.include?(':') }.uniq
32
32
 
33
33
  nested_prefixes.each do |nested_prefix|
34
- child_paths = projection.filter { |field| field.start_with?("#{nested_prefix}:") }
35
- .map { |field| field[(nested_prefix.size + 1)..] }
34
+ prefix_with_colon = "#{nested_prefix}:"
35
+ child_paths = projection.filter_map do |field|
36
+ field[(nested_prefix.size + 1)..] if field.start_with?(prefix_with_colon)
37
+ end
36
38
 
37
39
  next unless result[nested_prefix] && !result[nested_prefix].nil?
38
40
 
@@ -5,7 +5,8 @@ module ForestAdminDatasourceMongoid
5
5
  # @example
6
6
  # unnest(['firstname', 'book.title', 'book.author'], 'book') == ['title', 'author']
7
7
  def unnest(strings, prefix)
8
- strings.select { |field| field.start_with?("#{prefix}.") }.map { |field| field[(prefix.size + 1)..] }
8
+ prefix_with_dot = "#{prefix}."
9
+ strings.filter_map { |field| field[(prefix.size + 1)..] if field.start_with?(prefix_with_dot) }
9
10
  end
10
11
 
11
12
  def escape(str)
@@ -76,7 +76,7 @@ module ForestAdminDatasourceMongoid
76
76
  if condition_tree.is_a? Nodes::ConditionTreeBranch
77
77
  condition_tree.conditions.each { |condition| list_fields_used_in_filter_tree(condition, fields) }
78
78
  elsif condition_tree&.field&.include?(':')
79
- list_paths(condition_tree.field).each { |field| fields << field }
79
+ fields.merge(list_paths(condition_tree.field))
80
80
  end
81
81
  end
82
82
 
@@ -35,23 +35,25 @@ module ForestAdminDatasourceMongoid
35
35
  return {} if options[:include] && !options[:include].include?(name)
36
36
  return {} if options[:exclude]&.include?(name)
37
37
 
38
- projection.filter { |field| field.include?('@@@') }
39
- .map { |field_name| "#{name}.#{field_name.tr(":", ".")}" }
40
- .each_with_object({}) do |curr, acc|
41
- acc[curr] = "$#{curr.gsub("@@@", ".")}"
42
- end
38
+ projection.each_with_object({}) do |field_name, acc|
39
+ next unless field_name.include?('@@@')
40
+
41
+ curr = "#{name}.#{field_name.tr(":", ".")}"
42
+ acc[curr] = "$#{curr.gsub("@@@", ".")}"
43
+ end
43
44
  end
44
45
 
45
46
  def self.lookup_relation(current_path, schema_stack, name, projection, options)
46
- models = ObjectSpace
47
- .each_object(Class)
48
- .select { |klass| klass < Mongoid::Document && klass.name && !klass.name.start_with?('Mongoid::') }
49
- .to_h { |klass| [klass.name, klass] }
47
+ models = ObjectSpace.each_object(Class).with_object({}) do |klass, hash|
48
+ next unless klass < Mongoid::Document && klass.name && !klass.name.start_with?('Mongoid::')
49
+
50
+ hash[klass.name] = klass
51
+ end
50
52
 
51
53
  as = current_path ? "#{current_path}.#{name}" : name
52
54
 
53
- last_schema = schema_stack[schema_stack.length - 1]
54
- previous_schema = schema_stack.slice(0..(schema_stack.length - 1))
55
+ last_schema = schema_stack.last
56
+ previous_schema = schema_stack
55
57
 
56
58
  return {} if options[:include] && !options[:include].include?(as)
57
59
  return {} if options[:exclude]&.include?(as)
@@ -1,3 +1,3 @@
1
1
  module ForestAdminDatasourceMongoid
2
- VERSION = "1.19.1"
2
+ VERSION = "1.19.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forest_admin_datasource_mongoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.19.1
4
+ version: 1.19.3
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: 2025-12-24 00:00:00.000000000 Z
12
+ date: 2026-01-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongoid