From 9a2df34605fdd030250da4b3fe0dddc5c6f13c11 Mon Sep 17 00:00:00 2001 From: Nicolas Alexandre Date: Tue, 14 Jan 2025 15:25:51 +0100 Subject: [PATCH 1/5] fix(active_record): return default string type and add log when field type is unknown --- .../parser/column.rb | 12 +++++++++++- .../parser/validation.rb | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/forest_admin_datasource_active_record/lib/forest_admin_datasource_active_record/parser/column.rb b/packages/forest_admin_datasource_active_record/lib/forest_admin_datasource_active_record/parser/column.rb index e578c6173..be31b6a77 100644 --- a/packages/forest_admin_datasource_active_record/lib/forest_admin_datasource_active_record/parser/column.rb +++ b/packages/forest_admin_datasource_active_record/lib/forest_admin_datasource_active_record/parser/column.rb @@ -27,8 +27,18 @@ def get_column_type(model, column) return 'Enum' end + if TYPES.key?(column.type) + type = TYPES[column.type] + else + type = TYPES[:string] + ForestAdminAgent::Facades::Container.logger.log( + 'Info', + "unknown type '#{column.type}' for field named '#{column.name}', '#{TYPES[:string]}' type use by default" + ) + end + is_array = column.respond_to?(:array) && column.array == true - is_array ? "[#{TYPES[column.type]}]" : TYPES[column.type] + is_array ? "[#{type}]" : type end def get_enum_values(model, column) diff --git a/packages/forest_admin_datasource_active_record/lib/forest_admin_datasource_active_record/parser/validation.rb b/packages/forest_admin_datasource_active_record/lib/forest_admin_datasource_active_record/parser/validation.rb index cb65efa24..b8949c592 100644 --- a/packages/forest_admin_datasource_active_record/lib/forest_admin_datasource_active_record/parser/validation.rb +++ b/packages/forest_admin_datasource_active_record/lib/forest_admin_datasource_active_record/parser/validation.rb @@ -51,7 +51,7 @@ def parse_numericality_validator(validator, parsed_validations) end def parse_length_validator(validator, parsed_validations) - return unless get_column_type(column) == 'String' + return unless get_column_type(@model, column) == 'String' validator.options.each do |option, value| case option From 1e64517606f0a77125cc20c36dc3608b6847bce1 Mon Sep 17 00:00:00 2001 From: Nicolas Alexandre Date: Tue, 14 Jan 2025 15:38:16 +0100 Subject: [PATCH 2/5] test: add test on get_column_type --- .../parser/column_spec.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/forest_admin_datasource_active_record/spec/lib/forest_admin_datasource_active_record/parser/column_spec.rb b/packages/forest_admin_datasource_active_record/spec/lib/forest_admin_datasource_active_record/parser/column_spec.rb index 522771c6c..e547837ac 100644 --- a/packages/forest_admin_datasource_active_record/spec/lib/forest_admin_datasource_active_record/parser/column_spec.rb +++ b/packages/forest_admin_datasource_active_record/spec/lib/forest_admin_datasource_active_record/parser/column_spec.rb @@ -19,6 +19,10 @@ module Parser it { expect(dummy_class.get_column_type(User, columns['time_field'])).to eq 'Time' } it { expect(dummy_class.get_column_type(User, columns['binary_field'])).to eq 'Binary' } it { expect(dummy_class.get_column_type(User, columns['enum_field'])).to eq 'Enum' } + + it 'return string type by default when column type is unknown' do + expect(dummy_class.get_column_type(User, columns['foo'])).to eq 'String' + end end describe 'get_enum_values' do From 05ca22583c9dcfab592746821da84d75aeeae043 Mon Sep 17 00:00:00 2001 From: Nicolas Alexandre Date: Tue, 14 Jan 2025 16:38:03 +0100 Subject: [PATCH 3/5] fix: test on get_column_type --- packages/forest_admin_datasource_active_record/Gemfile | 1 + .../forest_admin_datasource_active_record/Gemfile-test | 1 + .../parser/column_spec.rb | 10 +++++++++- .../spec/spec_helper.rb | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/forest_admin_datasource_active_record/Gemfile b/packages/forest_admin_datasource_active_record/Gemfile index fcb660e5c..6576cb8a2 100644 --- a/packages/forest_admin_datasource_active_record/Gemfile +++ b/packages/forest_admin_datasource_active_record/Gemfile @@ -4,6 +4,7 @@ source "https://rubygems.org" gemspec gem 'database_cleaner-active_record' +gem 'forest_admin_agent' gem 'forest_admin_datasource_toolkit' gem 'rake', '~> 13.0' gem 'rubocop', '~> 1.21' diff --git a/packages/forest_admin_datasource_active_record/Gemfile-test b/packages/forest_admin_datasource_active_record/Gemfile-test index b9c65ad44..55fb12e50 100644 --- a/packages/forest_admin_datasource_active_record/Gemfile-test +++ b/packages/forest_admin_datasource_active_record/Gemfile-test @@ -9,6 +9,7 @@ gem 'rubocop', '~> 1.21' group :development, :test do gem 'database_cleaner-active_record' gem 'forest_admin_datasource_toolkit', path: '../forest_admin_datasource_toolkit' + gem 'forest_admin_agent', path: '../forest_admin_agent' gem 'rails' gem 'rspec-rails', '~> 3.0' gem 'simplecov', '~> 0.22', require: false diff --git a/packages/forest_admin_datasource_active_record/spec/lib/forest_admin_datasource_active_record/parser/column_spec.rb b/packages/forest_admin_datasource_active_record/spec/lib/forest_admin_datasource_active_record/parser/column_spec.rb index e547837ac..abdbccbcf 100644 --- a/packages/forest_admin_datasource_active_record/spec/lib/forest_admin_datasource_active_record/parser/column_spec.rb +++ b/packages/forest_admin_datasource_active_record/spec/lib/forest_admin_datasource_active_record/parser/column_spec.rb @@ -21,7 +21,15 @@ module Parser it { expect(dummy_class.get_column_type(User, columns['enum_field'])).to eq 'Enum' } it 'return string type by default when column type is unknown' do - expect(dummy_class.get_column_type(User, columns['foo'])).to eq 'String' + logger = instance_double(Logger, log: nil) + allow(ForestAdminAgent::Facades::Container).to receive(:logger).and_return(logger) + column = instance_double( + ActiveRecord::ConnectionAdapters::SQLite3::Column, + name: 'foo', + type: 'unknown type' + ) + + expect(dummy_class.get_column_type(User, column)).to eq 'String' end end diff --git a/packages/forest_admin_datasource_active_record/spec/spec_helper.rb b/packages/forest_admin_datasource_active_record/spec/spec_helper.rb index 02fd111e4..d5a9b12a7 100644 --- a/packages/forest_admin_datasource_active_record/spec/spec_helper.rb +++ b/packages/forest_admin_datasource_active_record/spec/spec_helper.rb @@ -2,6 +2,7 @@ require 'simplecov_json_formatter' require 'simplecov-html' require 'forest_admin_datasource_active_record' +require 'forest_admin_agent' require 'active_record' require 'database_cleaner-active_record' From 84b1f67dc2fbdfa55e18afcb881e5f5808fc6ab3 Mon Sep 17 00:00:00 2001 From: Nicolas Alexandre Date: Tue, 14 Jan 2025 17:17:46 +0100 Subject: [PATCH 4/5] fix: test --- .../forest_admin_datasource_active_record/spec/spec_helper.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/forest_admin_datasource_active_record/spec/spec_helper.rb b/packages/forest_admin_datasource_active_record/spec/spec_helper.rb index d5a9b12a7..02fd111e4 100644 --- a/packages/forest_admin_datasource_active_record/spec/spec_helper.rb +++ b/packages/forest_admin_datasource_active_record/spec/spec_helper.rb @@ -2,7 +2,6 @@ require 'simplecov_json_formatter' require 'simplecov-html' require 'forest_admin_datasource_active_record' -require 'forest_admin_agent' require 'active_record' require 'database_cleaner-active_record' From e19fc637df4069d7ef4a980b0834d91b5c043059 Mon Sep 17 00:00:00 2001 From: Nicolas Alexandre Date: Tue, 14 Jan 2025 17:33:45 +0100 Subject: [PATCH 5/5] fix: test --- packages/forest_admin_datasource_active_record/Gemfile | 1 + packages/forest_admin_datasource_active_record/Gemfile-test | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/forest_admin_datasource_active_record/Gemfile b/packages/forest_admin_datasource_active_record/Gemfile index 6576cb8a2..89f105034 100644 --- a/packages/forest_admin_datasource_active_record/Gemfile +++ b/packages/forest_admin_datasource_active_record/Gemfile @@ -5,6 +5,7 @@ gemspec gem 'database_cleaner-active_record' gem 'forest_admin_agent' +gem 'forest_admin_datasource_customizer' gem 'forest_admin_datasource_toolkit' gem 'rake', '~> 13.0' gem 'rubocop', '~> 1.21' diff --git a/packages/forest_admin_datasource_active_record/Gemfile-test b/packages/forest_admin_datasource_active_record/Gemfile-test index 55fb12e50..f4fbb646e 100644 --- a/packages/forest_admin_datasource_active_record/Gemfile-test +++ b/packages/forest_admin_datasource_active_record/Gemfile-test @@ -9,6 +9,7 @@ gem 'rubocop', '~> 1.21' group :development, :test do gem 'database_cleaner-active_record' gem 'forest_admin_datasource_toolkit', path: '../forest_admin_datasource_toolkit' + gem 'forest_admin_datasource_customizer', path: '../forest_admin_datasource_customizer' gem 'forest_admin_agent', path: '../forest_admin_agent' gem 'rails' gem 'rspec-rails', '~> 3.0'