Module: SanteyView::Viewable::ViewMethods
- Defined in:
- lib/santey_view/viewable.rb
Class Method Summary collapse
-
.included(base) ⇒ Object
:nodoc:.
Instance Method Summary collapse
-
#view(ip, viewer = nil) ⇒ Object
View the object with or without a viewer - create new or update as needed.
-
#view_count ⇒ Object
Get the number of viewings for this object based on the views field, or with a SQL query if the viewed objects doesn’t have the views field.
-
#viewed? ⇒ Boolean
Is this object viewed already?.
-
#viewed_by?(ip, viewer = nil) ⇒ Boolean
Check if an item was already viewed by the given viewer.
Class Method Details
.included(base) ⇒ Object
:nodoc:
97 98 99 |
# File 'lib/santey_view/viewable.rb', line 97 def self.included(base) #:nodoc: base.extend ClassMethods end |
Instance Method Details
#view(ip, viewer = nil) ⇒ Object
View the object with or without a viewer - create new or update as needed
-
ip- the viewer ip -
viewer- an object of the viewer class. Must be valid and with an id to be used. Or nil
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/santey_view/viewable.rb', line 118 def view ip, viewer = nil # Sanity checks for the parameters viewing_class = [:viewing_class].constantize if viewer && !([:viewer_class].constantize === viewer) raise ViewedError, "the viewer object must be the one used when defining santey_view (or a descendent of it). other objects are not acceptable" end viewing_class.transaction do if !viewed_by? ip, viewer view = viewing_class.new view.viewer_id = viewer.id if viewer && !viewer.id.nil? view.ip = ip viewings << view target = self if attributes.has_key? 'views' #target.views = ( (target.views || 0) + 1 ) if target target.increment(:views, 1) if target view.save target.save(false) if target return true else return false end end end |
#view_count ⇒ Object
Get the number of viewings for this object based on the views field, or with a SQL query if the viewed objects doesn’t have the views field
109 110 111 112 |
# File 'lib/santey_view/viewable.rb', line 109 def view_count return self.views || 0 if attributes.has_key? 'views' viewings.count end |
#viewed? ⇒ Boolean
Is this object viewed already?
102 103 104 105 |
# File 'lib/santey_view/viewable.rb', line 102 def viewed? return (!self.views.nil? && self.views > 0) if attributes.has_key? 'views' !viewings.find(:first).nil? end |
#viewed_by?(ip, viewer = nil) ⇒ Boolean
Check if an item was already viewed by the given viewer
145 146 147 148 149 150 151 152 153 154 |
# File 'lib/santey_view/viewable.rb', line 145 def viewed_by? ip, viewer = nil if viewer && !viewer.nil? && !([:viewer_class].constantize === viewer) raise ViewedError, "the viewer object must be the one used when defining santey_view (or a descendent of it). other objects are not acceptable" end if viewer && !viewer.id.nil? return viewings.count(:conditions => ["viewer_id = '#{viewer.id}' or ip = '#{ip}'"]) > 0 else return viewings.count(:conditions => ["ip = '#{ip}'"]) > 0 end end |