Module: SanteyView::Viewable::ViewMethods

Defined in:
lib/santey_view/viewable.rb

Class Method Summary collapse

Instance Method Summary collapse

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 = santey_view_options[:viewing_class].constantize
  if viewer && !(santey_view_options[: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_countObject

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?

Returns:

  • (Boolean)


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

Returns:

  • (Boolean)


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? && !(santey_view_options[: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