Skip to content

Instantly share code, notes, and snippets.

@arthurnn
Created September 15, 2013 02:43
Show Gist options
  • Save arthurnn/6567607 to your computer and use it in GitHub Desktop.
Save arthurnn/6567607 to your computer and use it in GitHub Desktop.
require "spec_helper"
class User
include Mongoid::Document
has_and_belongs_to_many :cars, inverse_of: :users
has_one :favorite_car, class_name: 'Car', inverse_of: :person
before_validation :set_default_favorite_car, on: :create
before_save :update_cars
def set_default_favorite_car
unless self.favorite_car
self.favorite_car = Car.create!
end
end
def updated_cars
[favorite_car].compact
end
def update_cars
_updated_cars = updated_cars
self.cars = _updated_cars unless self.cars.map(&:id).sort == _updated_cars.map(&:id).sort
true
end
end
class Car
include Mongoid::Document
has_and_belongs_to_many :users, inverse_of: :cars
belongs_to :person, class_name: 'User', inverse_of: :favorite_car#, autosave: true
end
describe User do
before do
@user = User.create!
end
describe "updating favorite_car" do
before do
@car = Car.create!
@user.favorite_car = @car
@user.save!
end
it "should update cars" do
@user.cars.should eq([@car])
end
it "should update car_ids" do
@user.car_ids.should eq([@car.id])
end
it "should persist new cars" do
@user.reload.cars.should eq([@car])
end
end
end
describe Car do
before do
@car = Car.create!
end
describe "updating person" do
before do
@user = User.create!(favorite_car: @car)
@car.person = @user
@car.save!
end
it "should update users" do
@car.users.should eq([@user])
end
it "should update user_ids" do
@car.user_ids.should eq([@user.id])
end
it "should persist new users" do
@car.reload.users.should eq([@user])
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment