module Shibaraku::ActiveRecordExt::Core::ClassMethods

Public Instance Methods

in_time(user = nil, now = Time.current) click to toggle source
# File lib/shibaraku/active_record_ext.rb, line 52
def in_time(user = nil, now = Time.current)
  if ancestors.include?(::ActiveRecord::Base)
    start_at = arel_table[shibaraku_start_at_column_name(user)]
    end_at   = arel_table[shibaraku_end_at_column_name(user)]
    starting = where(start_at.eq(nil).or(start_at.lteq(now)))
    ending   = where(end_at.eq(nil).or(end_at.gt(now)))
    starting.merge(ending)
  else
    start_at = shibaraku_start_at_column_name(user)
    end_at   = shibaraku_end_at_column_name(user)
    all.select do |record|
      (record.send(start_at).nil? || record.send(start_at) <= now) && (record.send(end_at).nil? || now < record.send(end_at))
    end
  end
end
shibaraku_end_at_column_name(user) click to toggle source
# File lib/shibaraku/active_record_ext.rb, line 40
def shibaraku_end_at_column_name(user)
  name = self.shibaraku_end_at_column
  name = test_column_name(name) if user && user.super_user?
  name
end
shibaraku_start_at_column_name(user) click to toggle source
# File lib/shibaraku/active_record_ext.rb, line 34
def shibaraku_start_at_column_name(user)
  name = self.shibaraku_start_at_column
  name = test_column_name(name) if user && user.super_user?
  name
end
test_column_name(name) click to toggle source
# File lib/shibaraku/active_record_ext.rb, line 46
def test_column_name(name)
  define_attribute_methods
  test_name = "test_#{name}"
  self.method_defined?(test_name) ? test_name : name
end