diff --git a/packages/forest_admin_datasource_active_record/Gemfile b/packages/forest_admin_datasource_active_record/Gemfile index fcb660e5c..89f105034 100644 --- a/packages/forest_admin_datasource_active_record/Gemfile +++ b/packages/forest_admin_datasource_active_record/Gemfile @@ -4,6 +4,8 @@ source "https://rubygems.org" 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 b9c65ad44..f4fbb646e 100644 --- a/packages/forest_admin_datasource_active_record/Gemfile-test +++ b/packages/forest_admin_datasource_active_record/Gemfile-test @@ -9,6 +9,8 @@ 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' gem 'simplecov', '~> 0.22', require: false 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 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..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 @@ -19,6 +19,18 @@ 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 + 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 describe 'get_enum_values' do