Skip to content

Commit

Permalink
Add a rake task to generate missing Budget::Phase's and migrate descr…
Browse files Browse the repository at this point in the history
…icptions
  • Loading branch information
bertocq committed Jan 16, 2018
1 parent 313d8d2 commit 02d596c
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 5 deletions.
8 changes: 4 additions & 4 deletions app/models/budget/phase.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class Phase < ActiveRecord::Base
validates :budget, presence: true
validates :kind, presence: true, uniqueness: { scope: :budget }, inclusion: { in: PHASE_KINDS }
validates :description, length: { maximum: DESCRIPTION_MAX_LENGTH }
validate :dates_range_valid?
validate :invalid_dates_range?
validate :prev_phase_dates_valid?
validate :next_phase_dates_valid?

Expand Down Expand Up @@ -48,7 +48,7 @@ def adjust_date_ranges
end
end

def dates_range_valid?
def invalid_dates_range?
if starts_at.present? && ends_at.present? && starts_at >= ends_at
errors.add(:starts_at, I18n.t('budgets.phases.errors.dates_range_invalid'))
end
Expand All @@ -59,7 +59,7 @@ def dates_range_valid?
def prev_phase_dates_valid?
if enabled? && starts_at.present? && prev_enabled_phase.present?
prev_enabled_phase.assign_attributes(ends_at: starts_at)
if prev_enabled_phase.dates_range_valid?
if prev_enabled_phase.invalid_dates_range?
phase_name = I18n.t("budgets.phase.#{prev_enabled_phase.kind}")
error = I18n.t('budgets.phases.errors.prev_phase_dates_invalid', phase_name: phase_name)
errors.add(:starts_at, error)
Expand All @@ -70,7 +70,7 @@ def prev_phase_dates_valid?
def next_phase_dates_valid?
if enabled? && ends_at.present? && next_enabled_phase.present?
next_enabled_phase.assign_attributes(starts_at: ends_at)
if next_enabled_phase.dates_range_valid?
if next_enabled_phase.invalid_dates_range?
phase_name = I18n.t("budgets.phase.#{next_enabled_phase.kind}")
error = I18n.t('budgets.phases.errors.next_phase_dates_invalid', phase_name: phase_name)
errors.add(:ends_at, error)
Expand Down
20 changes: 19 additions & 1 deletion lib/tasks/budgets.rake
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,22 @@ namespace :budgets do

end

end
namespace :phases do
desc "Generates Phases for existing Budgets without them & migrates description_* attributes"
task generate_missing: :environment do
Budget.where.not(id: Budget::Phase.all.pluck(:budget_id).uniq.compact).each do |budget|
Budget::Phase::PHASE_KINDS.each do |phase|
Budget::Phase.create(
budget: budget,
kind: phase,
description: budget.send("description_#{phase}"),
prev_phase: phases&.last,
starts_at: phases&.last&.ends_at || Date.current,
ends_at: (phases&.last&.ends_at || Date.current) + 1.month
)
end
end
end
end

end

0 comments on commit 02d596c

Please sign in to comment.