diff options
Diffstat (limited to 'app/models/event.rb')
| -rw-r--r-- | app/models/event.rb | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/app/models/event.rb b/app/models/event.rb index 94a22e3..26c79e4 100644 --- a/app/models/event.rb +++ b/app/models/event.rb | |||
| @@ -1,22 +1,25 @@ | |||
| 1 | class Event < ApplicationRecord | 1 | class Event < ApplicationRecord |
| 2 | 2 | ||
| 3 | # Associations | 3 | belongs_to :node, optional: true |
| 4 | 4 | has_many :occurrences | |
| 5 | has_many :occurrences | 5 | |
| 6 | belongs_to :node | 6 | validates :title, presence: true, unless: -> { node_id.present? } |
| 7 | 7 | validates :is_primary, uniqueness: { scope: :node_id, | |
| 8 | # Callbacks | 8 | message: "only one primary event per node allowed" }, |
| 9 | 9 | if: -> { is_primary? && node_id.present? } | |
| 10 | after_save :generate_occurences | 10 | |
| 11 | 11 | after_save :generate_occurences | |
| 12 | # Instance Methods | 12 | |
| 13 | |||
| 14 | def occurrences_in_range start_time, end_time | 13 | def occurrences_in_range start_time, end_time |
| 15 | self.occurrences.where( | 14 | self.occurrences.where( |
| 16 | "start_time > ? AND end_time < ?", | 15 | "start_time > ? AND end_time < ?", |
| 17 | start_time, end_time | 16 | start_time, end_time |
| 18 | ) | 17 | ) |
| 19 | end | 18 | end |
| 19 | |||
| 20 | def display_title | ||
| 21 | title.presence || node&.head&.title || "Untitled event" | ||
| 22 | end | ||
| 20 | 23 | ||
| 21 | private | 24 | private |
| 22 | def generate_occurences | 25 | def generate_occurences |
