Sha256: bf2ff6c74d0e90af7cdefa1a7d13fa8e52f0ed6f3fb307c6a7407b125ab366cc

Contents?: true

Size: 783 Bytes

Versions: 3

Compression:

Stored size: 783 Bytes

Contents

module PunchingBag
  module ActiveRecord
  
    module ClassMethods
      def most_hit(since=nil, limit=5)
        query = self.scoped.joins(:punches).group(:punchable_type, :punchable_id)
        query = query.where('punches.average_time >= ?', since) unless since.nil?
        query.order('SUM(punches.hits) DESC').limit(limit)
      end
    end
    
    module InstanceMethods
      def hits(since=nil)
        self.punches.after(since).sum(:hits)
      end
      
      def punch(request=nil)
        PunchingBag.punch(self, request)
      end
    end
    
  end
end

class ActiveRecord::Base
  def self.acts_as_punchable
    extend PunchingBag::ActiveRecord::ClassMethods
    include PunchingBag::ActiveRecord::InstanceMethods
    has_many :punches, :as => :punchable
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
punching_bag-0.1.2 lib/punching_bag/acts_as_punchable.rb
punching_bag-0.1.1 lib/punching_bag/acts_as_punchable.rb
punching_bag-0.1.0 lib/punching_bag/acts_as_punchable.rb