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:
parent
239487cebf
commit
9b252cca9b
1 changed files with 22 additions and 15 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue