Module: ActsAsInterval::ActsAsInterval::LocalInstanceMethods

Defined in:
lib/acts_as_interval/acts_as_interval.rb

Class Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/acts_as_interval/acts_as_interval.rb', line 19

def self.included(klass)
  klass_name = klass.name.underscore.pluralize
  define_method "past_#{klass_name}" do
    self.class.where('ends_at <= ?', self.send(start_field))
  end
  define_method "future_#{klass_name}" do
    self.class.where('starts_at >= ?', self.send(end_field))
  end
  define_method "overlapping_#{klass_name}" do
    self.class.where("TIMEDIFF(#{start_field}, :my_end) * TIMEDIFF(:my_start, #{end_field}) >= 0", my_start: self.send(start_field), my_end: self.send(end_field)).where.not(id: self.id)
  end
  alias_method :intervals_before, "past_#{klass_name}"
  alias_method :intervals_after, "future_#{klass_name}"
end