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 # scope :can_display, where(is_hidden: false) self.class_variable_defined?(:@@can_display) ? \ self.class_variable_set(:@@can_display, self.class_variable_get(:@@can_display).merge({is_hidden: false})) : \ self.class_variable_set(:@@can_display, {is_hidden: false}) 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 where(class_variable_get(:@@can_display)) end unless method_defined? :can_display end end end