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