From b99c13cf756d70cecf9b0db4e6d2386fff1bf0ab Mon Sep 17 00:00:00 2001 From: stephann <3025661+stephannv@users.noreply.github.com> Date: Fri, 10 Jan 2025 22:37:22 -0300 Subject: [PATCH] Fix error when using non-ActiveRecord::Base on ActiveRecord::Relation (#274) --- Gemfile | 1 + config/quickdraw.rb | 1 + lib/literal/rails/patches/active_record.rb | 7 ++++--- test/rails.test.rb | 9 +++++++++ 4 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 test/rails.test.rb diff --git a/Gemfile b/Gemfile index 5b1ef08e..dc465814 100644 --- a/Gemfile +++ b/Gemfile @@ -11,4 +11,5 @@ group :development do gem "rubocop", platform: :ruby gem "ruby-lsp", platform: :ruby gem "simplecov", platform: :ruby + gem "rails", platform: :ruby end diff --git a/config/quickdraw.rb b/config/quickdraw.rb index 70ca3d10..831eb1f5 100644 --- a/config/quickdraw.rb +++ b/config/quickdraw.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true +require "active_record/railtie" require "literal" require "securerandom" require "set" diff --git a/lib/literal/rails/patches/active_record.rb b/lib/literal/rails/patches/active_record.rb index 885dc9f2..dd230e90 100644 --- a/lib/literal/rails/patches/active_record.rb +++ b/lib/literal/rails/patches/active_record.rb @@ -4,9 +4,10 @@ module ActiveRecord class RelationType def initialize(model_class) unless Class === model_class && model_class < ActiveRecord::Base - raise Literal::TypeError.expected( - model_class, - to_be_a: ActiveRecord::Base, + raise Literal::TypeError.new( + context: Literal::TypeError::Context.new( + expected: ActiveRecord::Base, actual: model_class + ) ) end diff --git a/test/rails.test.rb b/test/rails.test.rb new file mode 100644 index 00000000..4679e137 --- /dev/null +++ b/test/rails.test.rb @@ -0,0 +1,9 @@ +test "ActiveRecord::Relation with non-ActiveRecord::Base child" do + assert_raises(Literal::TypeError) do + Class.new do + extend Literal::Properties + + prop :example, ActiveRecord::Relation(String) + end + end +end