Module: Recommendable::ActsAsRecommendedTo::DislikeMethods

Defined in:
lib/recommendable/acts_as_recommended_to.rb

Instance Method Summary collapse

Instance Method Details

#dislike(object) ⇒ Object

Creates a Recommendable::Dislike to associate self to a passed object. If self is currently found to have liked object, the corresponding Recommendable::Like will be destroyed. It will also be removed from the user’s stash or list of ignores.

Parameters:

  • object (Object)

    the object you want self to dislike.

Returns:

  • true if object has been disliked

Raises:



108
109
110
111
112
113
114
115
# File 'lib/recommendable/acts_as_recommended_to.rb', line 108

def dislike(object)
  raise RecordNotRecommendableError unless object.recommendable?
  return if dislikes?(object)
  completely_unrecommend(object)
  dislikes.create!(:dislikeable_id => object.id, :dislikeable_type => object.class.to_s)
  Resque.enqueue RecommendationRefresher, self.id, object.send(:rates_by)
  true
end

#dislikedArray

Returns an array of ActiveRecord objects that self has disliked.

Returns:

  • (Array)

    an array of ActiveRecord objects that self has disliked



139
140
141
# File 'lib/recommendable/acts_as_recommended_to.rb', line 139

def disliked
  dislikes.map {|dislike| dislike.dislikeable}
end

#disliked_for(klass) ⇒ Array

Get a list of records belonging to a passed class that self currently dislikes.

Parameters:

  • klass (Class, String, Symbol)

    the class of records. Can be the class constant, or a String/Symbol representation of the class name.

Returns:

  • (Array)

    an array of ActiveRecord objects that self has disliked belonging to klass



148
149
150
# File 'lib/recommendable/acts_as_recommended_to.rb', line 148

def disliked_for(klass)
  klass.to_s.classify.constantize.find dislikes_for(klass).map(&:dislikeable_id)
end

#dislikes?(object) ⇒ Boolean

Checks to see if self has already disliked a passed object.

Parameters:

  • object (Object)

    the object you want to check

Returns:

  • (Boolean)

    true if self dislikes object, false if not



121
122
123
# File 'lib/recommendable/acts_as_recommended_to.rb', line 121

def dislikes?(object)
  dislikes.exists?(:dislikeable_id => object.id, :dislikeable_type => object.class.to_s)
end

#undislike(object) ⇒ Object

Destroys a Recommendable::Dislike currently associating self with object

Parameters:

  • object (Object)

    the object you want to remove from self’s dislikes

Returns:

  • true if object is removed from self’s dislikes, nil if nothing happened



129
130
131
132
133
134
# File 'lib/recommendable/acts_as_recommended_to.rb', line 129

def undislike(object)
  if dislikes.where(:dislikeable_id => object.id, :dislikeable_type => object.class.to_s).first.try(:destroy)
    Resque.enqueue RecommendationRefresher, self.id, object.send(:rates_by)
    true
  end
end