2018-11-03 15:57:14 -05:00
class Context < ApplicationRecord
2018-11-20 19:57:02 -06:00
has_many :todos , - > { order ( Arel . sql ( " todos.due IS NULL, todos.due ASC, todos.created_at ASC " ) ) . includes ( :project ) } , :dependent = > :delete_all
2010-04-04 18:20:07 +02:00
has_many :recurring_todos , :dependent = > :delete_all
2007-03-30 04:36:52 +00:00
belongs_to :user
2008-11-29 15:35:17 +01:00
2013-05-11 23:13:32 +02:00
scope :active , - > { where state : :active }
scope :hidden , - > { where state : :hidden }
scope :closed , - > { where state : :closed }
2020-09-05 01:24:23 +03:00
scope :with_name , lambda { | name | where ( " name " + Common . like_operator + " ? " , name ) }
2008-11-29 15:35:17 +01:00
2011-09-13 11:15:14 +02:00
acts_as_list :scope = > :user , :top_of_list = > 0
2007-03-30 04:36:52 +00:00
2013-02-27 22:35:49 +01:00
# state machine
include AASM
2013-04-29 11:53:32 +02:00
aasm :column = > :state do
state :active , :initial = > true
state :closed
state :hidden
2013-02-27 22:35:49 +01:00
2013-04-29 11:53:32 +02:00
event :close do
transitions :to = > :closed , :from = > [ :active , :hidden ] , :guard = > :no_active_todos?
end
2013-02-27 22:35:49 +01:00
2013-04-29 11:53:32 +02:00
event :hide do
transitions :to = > :hidden , :from = > [ :active , :closed ]
end
2013-02-27 22:35:49 +01:00
2013-04-29 11:53:32 +02:00
event :activate do
transitions :to = > :active , :from = > [ :closed , :hidden ]
end
2013-02-27 22:35:49 +01:00
end
2020-10-27 21:39:19 +02:00
validates :name , presence : { message : " context must have a name " } , length : { maximum : 255 , message : " context name must be less than 256 characters " } , uniqueness : { message : " already exists " , scope : " user_id " , case_sensitive : false }
2007-03-30 04:36:52 +00:00
def self . null_object
NullContext . new
end
def title
name
end
2011-09-13 11:15:14 +02:00
2013-02-27 22:35:49 +01:00
def no_active_todos?
return todos . active . count == 0
end
2007-03-30 04:36:52 +00:00
end
class NullContext
def nil?
true
end
2011-09-13 11:15:14 +02:00
2007-03-30 04:36:52 +00:00
def id
nil
end
2011-09-13 11:15:14 +02:00
2007-03-30 04:36:52 +00:00
def name
''
end
2013-03-12 19:49:19 -05:00
end