1
0
Fork 0
mirror of https://github.com/thoughtbot/shoulda-matchers.git synced 2022-11-09 12:01:38 -05:00

uniqueness: Refactor code to set next value

This commit is contained in:
Luciano Sousa 2014-12-24 09:28:54 -03:00 committed by Elliot Winkler
parent 239487cebf
commit 9b252cca9b

View file

@ -374,21 +374,7 @@ module Shoulda
# Assume the scope is a foreign key if the field is nil
previous_value ||= correct_type_for_column(@subject.class.columns_hash[scope.to_s])
next_value =
if @subject.class.respond_to?(:defined_enums) && @subject.defined_enums[scope.to_s]
available_values = @subject.defined_enums[scope.to_s].reject do |key, _|
key == previous_value
end
available_values.keys.last
elsif scope.to_s =~ /_type$/ && model_class?(previous_value)
Uniqueness::TestModels.create(previous_value).to_s
elsif previous_value.respond_to?(:next)
previous_value.next
elsif previous_value.respond_to?(:to_datetime)
previous_value.to_datetime.next
else
previous_value.to_s.next
end
next_value = next_value_for(scope, previous_value)
@subject.__send__("#{scope}=", next_value)
@ -418,6 +404,27 @@ module Shoulda
end
end
def next_value_for(scope, previous_value)
if @subject.class.respond_to?(:defined_enums) && @subject.defined_enums[scope.to_s]
available_values = available_enum_values_for(scope, previous_value)
available_values.keys.last
elsif scope.to_s =~ /_type$/ && model_class?(previous_value)
Uniqueness::TestModels.create(previous_value).to_s
elsif previous_value.respond_to?(:next)
previous_value.next
elsif previous_value.respond_to?(:to_datetime)
previous_value.to_datetime.next
else
previous_value.to_s.next
end
end
def available_enum_values_for(scope, previous_value)
@subject.defined_enums[scope.to_s].reject do |key, _|
key == previous_value
end
end
def class_name
@subject.class.name
end