53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
module OrbitModel
 | 
						|
 | 
						|
  module Status
 | 
						|
 | 
						|
    def self.included(base)
 | 
						|
      base.extend ClassMethods
 | 
						|
      base.class_eval do
 | 
						|
        field :is_top, :type => Boolean, :default => false 
 | 
						|
        field :is_hot, :type => Boolean, :default => false 
 | 
						|
        field :is_hidden, :type => Boolean, :default => false
 | 
						|
        query = {type: 'where', conditions: {is_hidden: false}}
 | 
						|
        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_top?
 | 
						|
        self.is_top
 | 
						|
      end
 | 
						|
      
 | 
						|
      def is_hot?
 | 
						|
        self.is_hot
 | 
						|
      end
 | 
						|
      
 | 
						|
      def is_hidden?
 | 
						|
        self.is_hidden
 | 
						|
      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
 |