Orbit/lib/orbit_model/time_frame.rb

52 lines
1.3 KiB
Ruby

module OrbitModel
module TimeFrame
def self.included(base)
base.extend ClassMethods
base.class_eval do
field :postdate , :type => DateTime
field :deadline , :type => DateTime
before_save :check_deadline
query = {type: 'any_of', conditions: "{deadline: nil, :postdate.lte => Time.now} , {:deadline.gte => Time.now, :postdate.lte => Time.now}"}
if class_variable_defined?(:@@can_display)
class_variable_set(:@@can_display, (class_variable_get(:@@can_display) << query))
else
class_variable_set(:@@can_display, [query])
end
send :include, InstanceMethods
end
end
module InstanceMethods
def is_expired?
Date.today > self.deadline ? true : false rescue false
end
private
def check_deadline
if(!self.deadline.nil? and (self.deadline < self.postdate ))
self.deadline = nil
end
end
end
module ClassMethods
define_method(:can_display) do
final_query = class_variable_get(:@@can_display).inject('') do |result, query_hash|
result << "." if result.present?
result << "#{query_hash[:type]}(#{query_hash[:conditions]})"
result
end
eval(final_query)
end unless method_defined? :can_display
end
end
end