Module: ActsAsViewable::InstanceMethods

Defined in:
lib/acts_as_viewable/acts_as_viewable.rb

Instance Method Summary collapse

Instance Method Details

#cache_increase(context, request) ⇒ Object



62
63
64
65
66
67
68
# File 'lib/acts_as_viewable/acts_as_viewable.rb', line 62

def cache_increase(context,request)
   views = views_on(context)
   Rails.cache.write("#{self.class}_#{context}_count",views+1)
   views = Rails.cache.read("#{self.class}_#{context}_views") || []
   views << {:ip => request.remote_ip , :user_agent => request.env['HTTP_USER_AGENT']}
   Rails.cache.write("#{self.class}_#{context}_views",views)
end

#events_on(context) ⇒ Object



36
37
38
# File 'lib/acts_as_viewable/acts_as_viewable.rb', line 36

def events_on(context)
  ViewEvent.all :conditions => {:context => context , :viewable_id => self.id , :viewable_type => self.class.to_s }
end

#increase_for(context, persis_count = 100, request) ⇒ Object



40
41
42
43
44
45
46
# File 'lib/acts_as_viewable/acts_as_viewable.rb', line 40

def increase_for(context, persis_count = 100, request)
    if views_on(context) % persis_count == 0
      non_cache_increase(context,request)
    else
      cache_increase(context,request)
    end
end

#non_cache_increase(context, request) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/acts_as_viewable/acts_as_viewable.rb', line 48

def non_cache_increase(context,request)
  count = Rails.cache.fetch("#{self.class}_#{context}_count")
  view_item = View.first :conditions => {:context => context , :viewable_id => self.id , :viewable_type => self.class.to_s }
  unless view_item
    view_item = View.new({:viewable_id => self.id , :viewable_type => self.class.to_s, :quantity => count})
  end
  view_item.quantity = count  
  view_item.save
  views = Rails.cache.read("#{self.class}_#{context}_views") || []
  views.each do  |k|
    view_item.create_view_event(k.first)
  end
end

#views_on(context) ⇒ Object



29
30
31
32
33
34
# File 'lib/acts_as_viewable/acts_as_viewable.rb', line 29

def views_on(context)
  Rails.cache.fetch("#{self.class}_#{context}_count") do
      view=View.first :conditions => {:context => context , :viewable_id => self.id , :viewable_type => self.class.to_s }
      view ? view.quantity : 0
  end
end