class RepositoryStatus < ActiveRecord::Base include Modules::Models::FileStoreClean include Modules::Models::RegenerationStatus WAITING_FOR_RESIGN = 300 PUBLISH = 400 RESIGN = 500 WAITING_FOR_RESIGN_AFTER_PUBLISH = 600 WAITING_FOR_RESIGN_AFTER_REGENERATION = 700 WAITING_FOR_REGENERATION_AFTER_PUBLISH = 800 WAITING_FOR_REGENERATION_AFTER_RESIGN = 900 WAITING_FOR_RESIGN_AND_REGENERATION_AFTER_PUBLISH = 1000 WAITING_FOR_RESIGN_AND_REGENERATION = 1100 HUMAN_STATUSES = HUMAN_STATUSES.clone.merge({ WAITING_FOR_RESIGN => :waiting_for_resign, PUBLISH => :publish, RESIGN => :resign, WAITING_FOR_RESIGN_AFTER_PUBLISH => :waiting_for_resign_after_publish, WAITING_FOR_RESIGN_AFTER_REGENERATION => :waiting_for_resign_after_regeneration, WAITING_FOR_REGENERATION_AFTER_PUBLISH => :waiting_for_regeneration_after_publish, WAITING_FOR_REGENERATION_AFTER_RESIGN => :waiting_for_regeneration_after_resign, WAITING_FOR_RESIGN_AND_REGENERATION_AFTER_PUBLISH => :waiting_for_resign_and_regeneration_after_publish, WAITING_FOR_RESIGN_AND_REGENERATION => :waiting_for_resign_and_regeneration }).freeze belongs_to :platform belongs_to :repository validates :repository_id, :platform_id, :presence => true validates :repository_id, :uniqueness => {:scope => :platform_id} attr_accessible :platform_id, :repository_id scope :platform_ready, where(:platforms => {:status => READY}).joins(:platform) scope :for_regeneration, where(:status => WAITING_FOR_REGENERATION) scope :for_resign, where(:status => [WAITING_FOR_RESIGN, WAITING_FOR_RESIGN_AND_REGENERATION]) scope :not_ready, where('repository_statuses.status != ?', READY) state_machine :status, :initial => :ready do event :ready do transition [:regenerating, :publish, :resign] => :ready transition [:waiting_for_resign_after_publish, :waiting_for_resign_after_regeneration] => :waiting_for_resign transition [:waiting_for_regeneration_after_publish, :waiting_for_regeneration_after_resign] => :waiting_for_regeneration transition :waiting_for_resign_and_regeneration_after_publish => :waiting_for_resign_and_regeneration end event :regenerate do transition :ready => :waiting_for_regeneration transition :publish => :waiting_for_regeneration_after_publish transition :resign => :waiting_for_regeneration_after_resign transition :waiting_for_resign_after_publish => :waiting_for_resign_and_regeneration_after_publish transition :waiting_for_resign => :waiting_for_resign_and_regeneration end event :start_regeneration do transition :waiting_for_regeneration => :regenerating transition :waiting_for_resign_and_regeneration => :waiting_for_resign_after_regeneration end event :resign do transition :ready => :waiting_for_resign transition :publish => :waiting_for_resign_after_publish transition :waiting_for_regeneration => :waiting_for_resign_and_regeneration transition :waiting_for_regeneration_after_publish => :waiting_for_resign_and_regeneration_after_publish transition :regenerating => :waiting_for_resign_after_regeneration end event :start_resign do transition :waiting_for_resign => :resign transition :waiting_for_resign_and_regeneration => :waiting_for_regeneration_after_resign end event :publish do transition :ready => :publish end HUMAN_STATUSES.each do |code,name| state name, :value => code end end end