Sha256: 9fdb834300b865b312181506fd86cda9e78671ef912559c85a5d80e00f5fbaa3

Contents?: true

Size: 1.26 KB

Versions: 4

Compression:

Stored size: 1.26 KB

Contents

# Manages friends and friendship requests for users.
# origin: M
module User::FriendsTrait
  as_trait do

    has_many :sent_friendship_requests, :class_name => 'FriendshipRequest', :foreign_key => 'requesting_user_id'
    has_many :friendship_requests

    has_many :friendships
    has_many :friends, :through => :friendships, :order => 'username'

    def in_contact_with?(other_user)
      friends_with?(other_user) or sent_friendship_requests.collect(&:user_id).include?(other_user.id)
    end

    def friends_with?(other_user)
      friendships.collect(&:friend_id).include? other_user.id
    end

    def can_become_friends_with?(other_user)
      self != other_user and not in_contact_with? other_user
    end
    
    def status_towards(other_user)
      if friends_with?(other_user)
        'in_contact'
      elsif sent_friendship_requests.collect(&:user_id).include?(other_user.id)
        'RCD_sent'
      elsif friendship_requests.collect(&:requesting_user_id).include?(other_user.id)
        'RCD_received'
      else
        'no_contact'
      end
    end

    def contacts
      user_ids = (friend_ids + sent_friendship_requests.collect(&:user_id) + friendship_requests.collect(&:requesting_user_id)).uniq
      User.all(:conditions => {:id => user_ids})
    end

  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
serum-rails-0.2.1 spec/test_apps/rails-2-3/app/models/user/friends_trait.rb
serum-rails-0.2.0 spec/test_apps/rails-2-3/app/models/user/friends_trait.rb
serum-rails-0.1.1 spec/test_app/app/models/user/friends_trait.rb
serum-rails-0.1.0 spec/test_app/app/models/user/friends_trait.rb