mirror of
https://github.com/TracksApp/tracks.git
synced 2026-01-29 04:06:11 +01:00
move model validation into pattern classes and link from recurring_todo model
This commit is contained in:
parent
776a046465
commit
29b815e998
7 changed files with 201 additions and 77 deletions
|
|
@ -8,6 +8,30 @@ module RecurringTodos
|
|||
@user = user
|
||||
end
|
||||
|
||||
def start_from
|
||||
get :start_from
|
||||
end
|
||||
|
||||
def end_date
|
||||
get :end_date
|
||||
end
|
||||
|
||||
def ends_on
|
||||
get :ends_on
|
||||
end
|
||||
|
||||
def target
|
||||
get :target
|
||||
end
|
||||
|
||||
def show_always
|
||||
get :show_always
|
||||
end
|
||||
|
||||
def show_from_delta
|
||||
get :show_from_delta
|
||||
end
|
||||
|
||||
def build_recurring_todo(attributes)
|
||||
@recurring_todo = @user.recurring_todos.build(attributes)
|
||||
end
|
||||
|
|
@ -16,7 +40,53 @@ module RecurringTodos
|
|||
recurring_todo.assign_attributes(attributes)
|
||||
recurring_todo
|
||||
end
|
||||
|
||||
|
||||
def build_from_recurring_todo(recurring_todo)
|
||||
@recurring_todo = recurring_todo
|
||||
@attributes = recurring_todo.attributes
|
||||
end
|
||||
|
||||
def validate
|
||||
starts_and_ends_on_validations
|
||||
set_recurrence_on_validations
|
||||
end
|
||||
|
||||
def starts_and_ends_on_validations
|
||||
errors[:base] << "The start date needs to be filled in" if start_from.blank?
|
||||
case ends_on
|
||||
when 'ends_on_number_of_times'
|
||||
errors[:base] << "The number of recurrences needs to be filled in for 'Ends on'" if number_of_occurences.blank?
|
||||
when "ends_on_end_date"
|
||||
errors[:base] << "The end date needs to be filled in for 'Ends on'" if end_date.blank?
|
||||
else
|
||||
errors[:base] << "The end of the recurrence is not selected" unless ends_on == "no_end_date"
|
||||
end
|
||||
end
|
||||
|
||||
def set_recurrence_on_validations
|
||||
# show always or x days before due date. x not null
|
||||
case target
|
||||
when 'show_from_date'
|
||||
# no validations
|
||||
when 'due_date'
|
||||
errors[:base] << "Please select when to show the action" if show_always.nil?
|
||||
unless show_always
|
||||
errors[:base] << "Please fill in the number of days to show the todo before the due date" if show_from_delta.blank?
|
||||
end
|
||||
else
|
||||
raise Exception.new, "unexpected value of recurrence target selector '#{target}'"
|
||||
end
|
||||
end
|
||||
|
||||
def errors
|
||||
@recurring_todo.errors
|
||||
end
|
||||
|
||||
def get attribute
|
||||
# handle attribute as symbol and as string
|
||||
@attributes[attribute] || @attributes[attribute.to_s]
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue