forest_admin_datasource_mongoid 1.22.2 → 2.0.0

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: 075d89743d3b55de774a366182fe99514c00541162d14f8a5291ef3eceb35ebd
4
- data.tar.gz: 379682e6263a1455758733dd2160fd6b18a571b1a5c5c302964033af2d58e997
3
+ metadata.gz: ad4d7aa1026727336745fcc9095544d5393bb79cd1d682a86695e0dcbcdd9e87
4
+ data.tar.gz: 4aa57abededdb49cbb6f594f99fdc3d7e7f2d6ef85f8e57df7aeeafbbe68b62b
5
5
  SHA512:
6
- metadata.gz: 80e4f725dd94340ce6fd61002074188b279fe77659d7249a21f5e59e992fcc76b84238ac0d84e1e9adc2d164bb793d8b709817a246c7e8d3dbd8eba5ba2b478d
7
- data.tar.gz: 1e151e24a1e4bb64fe52e12a185071ff6a3a6ea8ec275a388ed95c63625768de4eab8ee3dc6bba9ebd02bb25852cb0f95bc692a8baab1cba1a42edf7da4b7331
6
+ metadata.gz: f877f111b692e58d048997f1afb7eb462f842dbdf9049b1ac09546d73e8efeaa7987d908027058fe1a3ff10d1937d1a60cb480fe586a240fde5a86c1b1c370b3
7
+ data.tar.gz: e3038174309f72a8b276d26049f2535f69887d545ad66d7a9670cb198653019df2f8d6f993c79dd5bd29a95756e09f7222b034fd53bcff624f75cb0a4d5b6d6b
@@ -34,13 +34,5 @@ admin work on any Ruby application."
34
34
 
35
35
  spec.add_dependency "mongoid", ">= 9.0"
36
36
  spec.add_dependency "activesupport", ">= 6.1"
37
- spec.add_dependency "base64"
38
- spec.add_dependency "benchmark"
39
- spec.add_dependency "bigdecimal"
40
- spec.add_dependency "cgi"
41
- spec.add_dependency "csv"
42
- spec.add_dependency "logger"
43
- spec.add_dependency "mutex_m"
44
- spec.add_dependency "ostruct"
45
37
  spec.add_dependency "zeitwerk", "~> 2.3"
46
38
  end
@@ -4,12 +4,10 @@ module ForestAdminDatasourceMongoid
4
4
  def get_polymorphic_types(relation_name)
5
5
  types = {}
6
6
 
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
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
13
11
  end
14
12
  end
15
13
 
@@ -4,35 +4,33 @@ 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?
9
7
 
10
- parse_column_validators(model._validators[column.name.to_sym], column)
11
- end
12
-
13
- def before_validation_callback?(model)
8
+ validations = []
9
+ # NOTICE: Do not consider validations if a before_validation Active Records
10
+ # Callback is detected.
14
11
  default_callback_excluded = [:normalize_changed_in_place_attributes]
15
- model._validation_callbacks.any? do |callback|
16
- !default_callback_excluded.include?(callback.filter) && callback.kind == :before
17
- end
18
- end
12
+ return validations if model._validation_callbacks
13
+ .reject { |callback| default_callback_excluded.include?(callback.filter) }
14
+ .map(&:kind).include?(:before)
19
15
 
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]
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]
24
20
 
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)
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
34
31
  end
35
32
  end
33
+
36
34
  validations
37
35
  end
38
36
 
@@ -28,13 +28,11 @@ module ForestAdminDatasourceMongoid
28
28
  result[field_prefix] ||= nil
29
29
  end
30
30
 
31
- nested_prefixes = projection.filter_map { |field| field.split(':').first if field.include?(':') }.uniq
31
+ nested_prefixes = projection.select { |field| field.include?(':') }.map { |field| field.split(':').first }.uniq
32
32
 
33
33
  nested_prefixes.each do |nested_prefix|
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
34
+ child_paths = projection.filter { |field| field.start_with?("#{nested_prefix}:") }
35
+ .map { |field| field[(nested_prefix.size + 1)..] }
38
36
 
39
37
  next unless result[nested_prefix] && !result[nested_prefix].nil?
40
38
 
@@ -5,8 +5,7 @@ module ForestAdminDatasourceMongoid
5
5
  # @example
6
6
  # unnest(['firstname', 'book.title', 'book.author'], 'book') == ['title', 'author']
7
7
  def unnest(strings, prefix)
8
- prefix_with_dot = "#{prefix}."
9
- strings.filter_map { |field| field[(prefix.size + 1)..] if field.start_with?(prefix_with_dot) }
8
+ strings.select { |field| field.start_with?("#{prefix}.") }.map { |field| field[(prefix.size + 1)..] }
10
9
  end
11
10
 
12
11
  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
- fields.merge(list_paths(condition_tree.field))
79
+ list_paths(condition_tree.field).each { |field| fields << field }
80
80
  end
81
81
  end
82
82
 
@@ -35,25 +35,23 @@ module ForestAdminDatasourceMongoid
35
35
  return {} if options[:include] && !options[:include].include?(name)
36
36
  return {} if options[:exclude]&.include?(name)
37
37
 
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
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
44
43
  end
45
44
 
46
45
  def self.lookup_relation(current_path, schema_stack, name, projection, options)
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
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] }
52
50
 
53
51
  as = current_path ? "#{current_path}.#{name}" : name
54
52
 
55
- last_schema = schema_stack.last
56
- previous_schema = schema_stack
53
+ last_schema = schema_stack[schema_stack.length - 1]
54
+ previous_schema = schema_stack.slice(0..(schema_stack.length - 1))
57
55
 
58
56
  return {} if options[:include] && !options[:include].include?(as)
59
57
  return {} if options[:exclude]&.include?(as)
@@ -1,3 +1,3 @@
1
1
  module ForestAdminDatasourceMongoid
2
- VERSION = "1.22.2"
2
+ VERSION = "2.0.0"
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.22.2
4
+ version: 2.0.0
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: 2026-01-22 00:00:00.000000000 Z
12
+ date: 2025-12-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongoid
@@ -39,118 +39,6 @@ dependencies:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
41
  version: '6.1'
42
- - !ruby/object:Gem::Dependency
43
- name: base64
44
- requirement: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - ">="
47
- - !ruby/object:Gem::Version
48
- version: '0'
49
- type: :runtime
50
- prerelease: false
51
- version_requirements: !ruby/object:Gem::Requirement
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- version: '0'
56
- - !ruby/object:Gem::Dependency
57
- name: benchmark
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: '0'
63
- type: :runtime
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - ">="
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- - !ruby/object:Gem::Dependency
71
- name: bigdecimal
72
- requirement: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- version: '0'
77
- type: :runtime
78
- prerelease: false
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - ">="
82
- - !ruby/object:Gem::Version
83
- version: '0'
84
- - !ruby/object:Gem::Dependency
85
- name: cgi
86
- requirement: !ruby/object:Gem::Requirement
87
- requirements:
88
- - - ">="
89
- - !ruby/object:Gem::Version
90
- version: '0'
91
- type: :runtime
92
- prerelease: false
93
- version_requirements: !ruby/object:Gem::Requirement
94
- requirements:
95
- - - ">="
96
- - !ruby/object:Gem::Version
97
- version: '0'
98
- - !ruby/object:Gem::Dependency
99
- name: csv
100
- requirement: !ruby/object:Gem::Requirement
101
- requirements:
102
- - - ">="
103
- - !ruby/object:Gem::Version
104
- version: '0'
105
- type: :runtime
106
- prerelease: false
107
- version_requirements: !ruby/object:Gem::Requirement
108
- requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- version: '0'
112
- - !ruby/object:Gem::Dependency
113
- name: logger
114
- requirement: !ruby/object:Gem::Requirement
115
- requirements:
116
- - - ">="
117
- - !ruby/object:Gem::Version
118
- version: '0'
119
- type: :runtime
120
- prerelease: false
121
- version_requirements: !ruby/object:Gem::Requirement
122
- requirements:
123
- - - ">="
124
- - !ruby/object:Gem::Version
125
- version: '0'
126
- - !ruby/object:Gem::Dependency
127
- name: mutex_m
128
- requirement: !ruby/object:Gem::Requirement
129
- requirements:
130
- - - ">="
131
- - !ruby/object:Gem::Version
132
- version: '0'
133
- type: :runtime
134
- prerelease: false
135
- version_requirements: !ruby/object:Gem::Requirement
136
- requirements:
137
- - - ">="
138
- - !ruby/object:Gem::Version
139
- version: '0'
140
- - !ruby/object:Gem::Dependency
141
- name: ostruct
142
- requirement: !ruby/object:Gem::Requirement
143
- requirements:
144
- - - ">="
145
- - !ruby/object:Gem::Version
146
- version: '0'
147
- type: :runtime
148
- prerelease: false
149
- version_requirements: !ruby/object:Gem::Requirement
150
- requirements:
151
- - - ">="
152
- - !ruby/object:Gem::Version
153
- version: '0'
154
42
  - !ruby/object:Gem::Dependency
155
43
  name: zeitwerk
156
44
  requirement: !ruby/object:Gem::Requirement