Basic models set up
[rails.git] / app / models / issue.rb
1 class Issue < ActiveRecord::Base
2         belongs_to :reportable, :polymorphic => true
3         has_many :reports
4         validates :reportable_id, :uniqueness => { :scope => [ :reportable_type ] }
5
6         # Check if more statuses are needed
7         enum status: %w( open ignored resolved )
8
9         scope :with_status, -> (issue_status) { where(:status => statuses[issue_status])}
10
11         def read_reports
12                 resolved_at.present? ? reports.where("created_at < ?", resolved_at) : nil
13         end
14
15         def unread_reports
16     resolved_at.present? ? reports.where("created_at >= ?", resolved_at) : reports
17         end
18
19         include AASM
20         aasm :column => :status, :no_direct_assignment => true do
21                 state :open, :initial => true
22                 state :ignored
23                 state :resolved
24
25                 event :ignore do
26                         transitions :from => :open, :to => :ignored 
27                 end
28
29                 event :resolve do
30                         transitions :from => :open, :to => :resolved
31                         after do
32                                 self.resolved_at = Time.now.getutc
33                         end
34                 end
35
36                 event :reopen do
37                         transitions :from => :resolved, :to => :open
38                 end
39
40         end
41
42 end