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:

  • (UnrecommendableError)

    if you have not declared the passed object’s model to ‘act_as_recommendable`



193
194
195
196
197
198
199
200
201
202
# File 'lib/recommendable/acts_as_recommended_to.rb', line 193

def dislike object
  raise UnrecommendableError unless object.recommendable?
  return if dislikes? object
  
  run_hook :before_dislike, object
  dislikes.create! :dislikeable_id => object.id, :dislikeable_type => object.class
  run_hook :after_dislike, object

  true
end

#dislikedArray

Returns an array of ActiveRecord objects that self has disliked.

Returns:

  • (Array)

    an array of ActiveRecord objects that self has disliked



229
230
231
# File 'lib/recommendable/acts_as_recommended_to.rb', line 229

def disliked
  Recommendable.recommendable_classes.map { |klass| disliked_for klass }.flatten
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



208
209
210
# File 'lib/recommendable/acts_as_recommended_to.rb', line 208

def dislikes? object
  dislikes.exists? :dislikeable_id => object.id, :dislikeable_type => object.class.base_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



216
217
218
219
220
221
222
223
224
# File 'lib/recommendable/acts_as_recommended_to.rb', line 216

def undislike object
  dislike = dislikes.where(:dislikeable_id => object.id, :dislikeable_type => object.class.base_class.to_s)
  if dislike.exists?
    run_hook :before_undislike, object
    dislike.first.destroy
    run_hook :after_undislike, object
    true
  end
end