Skip to content

Instantly share code, notes, and snippets.

@belguzmani
Last active August 29, 2015 14:05
Show Gist options
  • Save belguzmani/5bda8e4b1f8be32bce4a to your computer and use it in GitHub Desktop.
Save belguzmani/5bda8e4b1f8be32bce4a to your computer and use it in GitHub Desktop.
User Referals
class XUser
include Mongoid::Document
field :name
has_one :x_referal, :class_name => XReferal, :inverse_of => :referal_user
has_many :referal_urls, :class_name => XReferal, :inverse_of => :x_user
end
class XReferal
include Mongoid::Document
include Mongoid::Timestamps
belongs_to :x_user, :inverse_of => :referal_urls, :class_name => XUser
belongs_to :referal_user, :inverse_of => :x_referal, :class_name => XUser
end
# New user with no referal
user_a = XUser.create :name => 'User A'
#User A invites user B
referal_a = user_a.referal_urls.create
#User B accept invitation and Join
referal_a.referal_user = XUser.create :name => 'User B'
referal_a.save!
#User A invites user C
referal_b = user_a.referal_urls.create
#User C accept invitation and Join
referal_b.referal_user = XUser.create :name => 'User C'
referal_b.save!
# Expect user A to have 2 referals
user_a.referal_urls.each do |refs|
expect(['User B', 'User C']).to include(refs.referal_user.name)
end
#Expect user C has A as a referal
expect(XUser.last.x_referal.x_user.name).to be 'User A'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment