forest_admin_datasource_active_record 1.8.8 → 1.9.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: b16fe13a23203f8a9cd4fc0d2d6d2d2ea0e6ae67199eeb3f24e532f5b48ba6b5
4
- data.tar.gz: 443f1a78c1b248ccd87bf47a9389384ca734c971930afe328370a79b549a0c4d
3
+ metadata.gz: 170e64b890a05d2f678230fba338694e6cebef10c78457da444dfb9ab4844b15
4
+ data.tar.gz: e45e041d369193105109cced86355df152791bdb3fc895d3b66cc7ec248bd963
5
5
  SHA512:
6
- metadata.gz: e5753a7d39a2bbb7b32e88b4ba0aaf0953c57ea926f2674669d633ab85b70422cc0428afeb3d64838f27a2ebb6b468ea85e1e6d30dbf154b659966663f5b9503
7
- data.tar.gz: 2e1e77c261b33343aebcfd94172c843031249d8e61fc6f0a7a3ec2d0219f12ea420c2fdceb4ba8082c5435069ab6068f2704361b7935514b303b8e1a638ac298
6
+ metadata.gz: 28680f12d1bc77bca4e1eb7b61208c2f5491184ea7d5a8a58a242069f6c922ba693d89eee1b3708070ce41776e43b72fd166896310fdc08869cdd95f69607ff7
7
+ data.tar.gz: 2f6a6ad5ac5407dab6ace295cc0c988dd79ffbd0e2da56beeb2e40639774e2342d8a20a34e5bf42f72a177334a90d2e64cee215fe3021e6f705c686c11730ce5
@@ -21,7 +21,8 @@ module ForestAdminDatasourceActiveRecord
21
21
  @aggregation.groups.each do |group|
22
22
  field = format_field(group[:field])
23
23
  if group[:operation]
24
- date_trunc_expression = date_trunc_sql(group[:operation], field)
24
+ # Pass original field name for validation before SQL generation
25
+ date_trunc_expression = date_trunc_sql(group[:operation], field, group[:field])
25
26
  @select << "#{date_trunc_expression} AS \"#{group[:field]}\""
26
27
  group_fields << date_trunc_expression
27
28
  else
@@ -56,11 +57,31 @@ module ForestAdminDatasourceActiveRecord
56
57
  @query
57
58
  end
58
59
 
60
+ # Whitelist of valid date truncation operations
61
+ VALID_DATE_OPERATIONS = %w[
62
+ second
63
+ minute
64
+ hour
65
+ day
66
+ week
67
+ month
68
+ quarter
69
+ year
70
+ ].freeze
71
+
59
72
  private
60
73
 
61
- def date_trunc_sql(operation, field)
74
+ def date_trunc_sql(operation, field, original_field_name = nil)
62
75
  adapter_name = @collection.model.connection.adapter_name.downcase
63
- operation = operation.downcase
76
+ operation = operation.to_s.downcase
77
+
78
+ unless VALID_DATE_OPERATIONS.include?(operation)
79
+ raise ForestAdminDatasourceToolkit::Exceptions::ValidationError,
80
+ "Invalid date truncation operation: '#{operation}'. " \
81
+ "Allowed values: #{VALID_DATE_OPERATIONS.join(", ")}"
82
+ end
83
+
84
+ validate_field_exists!(original_field_name || field)
64
85
 
65
86
  case adapter_name
66
87
  when 'postgresql'
@@ -74,6 +95,14 @@ module ForestAdminDatasourceActiveRecord
74
95
  end
75
96
  end
76
97
 
98
+ def validate_field_exists!(field)
99
+ ForestAdminDatasourceToolkit::Utils::Collection.get_field_schema(@collection, field)
100
+ rescue ForestAdminDatasourceToolkit::Exceptions::ForestException => e
101
+ # Re-raise as ValidationError for consistency with other validation errors in this class
102
+ raise ForestAdminDatasourceToolkit::Exceptions::ValidationError,
103
+ "Invalid field '#{field}': #{e.message}"
104
+ end
105
+
77
106
  # rubocop:disable Layout/LineLength
78
107
  def mysql_date_trunc(operation, field)
79
108
  case operation
@@ -1,3 +1,3 @@
1
1
  module ForestAdminDatasourceActiveRecord
2
- VERSION = "1.8.8"
2
+ VERSION = "1.9.0"
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.8.8
4
+ version: 1.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthieu