Sha256: bb4cb0d9440c6eae15d55c331cefaa1f461f098f5528dad0bec74f8ca8a714d2

Contents?: true

Size: 1.13 KB

Versions: 3

Compression:

Stored size: 1.13 KB

Contents

module Flyboy
  class Goal < ActiveRecord::Base
    include AASM

    aasm(column: "status", whiny_transitions: false) do
      state :open, initial: true
      state :closed

      event :close, if: :no_undone_tasks? do
        transitions from: [:open], to: :closed
      end

      event :open do
        transitions from: [:closed], to: :open
      end
    end

    has_many :tasks, dependent: :destroy

    validates :title, presence: true
    validates :status, inclusion: {
      in: proc { Flyboy::Goal.aasm.states.map(&:to_s) }
    }

    def no_undone_tasks?
      tasks.where(done: false).count == 0
    end

    def progress
      return 0 if tasks.count.zero?
      tasks.sum(:progress) / tasks.count
    end

    def revision
      "#{tracking} #{version}"
    end

    before_create :create_tracking

    def create_tracking
      dailycounter  = Goal.where("DATE(created_at) = ?", Date.today).count + 1
      self.tracking = "#{Time.now.strftime("%y%m%d")}-#{dailycounter}"
    end

    before_save :update_version

    def update_version
      self.version = 0 if self.version.nil?
      self.version = self.version + 1
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
flyboy-1.0.4 app/models/flyboy/goal.rb
flyboy-1.0.3 app/models/flyboy/goal.rb
flyboy-1.0.2 app/models/flyboy/goal.rb