lucasmedeirosleite/mongoid-followit

View on GitHub
app/models/follow.rb

Summary

Maintainability
A
0 mins
Test Coverage
class Follow
  include Mongoid::Document
  include Mongoid::Timestamps

  field :followee_class, type: String
  field :followee_id, type: String
  field :follower_class, type: String
  field :follower_id, type: String

  def self.store_by!(followee:, follower:)
    find_or_create_by!(
      followee_class: followee.class.to_s,
      followee_id: followee.id,
      follower_class: follower.class.to_s,
      follower_id: follower.id)
  end

  def self.destroy_by!(followee:, follower:)
    find_by(
      followee_class: followee.class.to_s,
      followee_id: followee.id,
      follower_class: follower.class.to_s,
      follower_id: follower.id)
      .try(:destroy)
  end

  def self.destroy_followable_data(followable)
    followable_class = followable.class.to_s
    followee_params = { followee_class: followable_class, followee_id: followable.id }
    follower_params = { follower_class: followable_class, follower_id: followable.id }
    self.or(followee_params, follower_params).destroy_all
  end

  def self.query_options(follower: nil, followee: nil)
    options = {}
    options.merge!(followee_class: followee.class, followee_id: followee.id) if followee.present?
    options.merge!(follower_class: follower.class, follower_id: follower.id) if follower.present?
    options
  end
end