From f223c7d76325d683a7a23a71abbf043a56048dba Mon Sep 17 00:00:00 2001 From: Daniel Colson Date: Sun, 21 Jun 2020 21:41:30 -0400 Subject: [PATCH] Use attr_readers in association declaration This commit separates the factory name from the overrides on initialize, then uses attr_readers throughout instead of manipulating instance variables. This is a bit cleaner, and will make it easier to reused the factory_name and overrides in a future code change. --- lib/factory_bot/declaration/association.rb | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/factory_bot/declaration/association.rb b/lib/factory_bot/declaration/association.rb index d9f8c0344..9300cf472 100644 --- a/lib/factory_bot/declaration/association.rb +++ b/lib/factory_bot/declaration/association.rb @@ -6,6 +6,7 @@ def initialize(name, *options) super(name, false) @options = options.dup @overrides = options.extract_options! + @factory_name = @overrides.delete(:factory) || name @traits = options end @@ -21,18 +22,25 @@ def ==(other) private + attr_reader :factory_name, :overrides, :traits + def build ensure_factory_is_not_a_declaration! - factory_name = @overrides[:factory] || name - [Attribute::Association.new(name, factory_name, [@traits, @overrides.except(:factory)].flatten)] + [ + Attribute::Association.new( + name, + factory_name, + [traits, overrides].flatten + ) + ] end def ensure_factory_is_not_a_declaration! - if @overrides[:factory].is_a?(Declaration) + if factory_name.is_a?(Declaration) raise ArgumentError.new(<<~MSG) Association '#{name}' received an invalid factory argument. - Did you mean? 'factory: :#{@overrides[:factory].name}' + Did you mean? 'factory: :#{factory_name.name}' MSG end end