Guest User

Untitled

a guest
Apr 22nd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.94 KB | None | 0 0
  1. require 'mongo_mapper'
  2. require 'spec'
  3.  
  4. MongoMapper.connection = Mongo::Connection.new('localhost')
  5. MongoMapper.database = 'tmp'
  6.  
  7. class Cast
  8. include MongoMapper::EmbeddedDocument
  9. key :person, Integer
  10. key :name, String
  11. key :age, Integer, :default => 0
  12. end
  13.  
  14. class Movie
  15. include MongoMapper::Document
  16. key :name, String
  17. many :casts
  18. end
  19.  
  20. describe 'Movie' do
  21. before :each do
  22. Movie.collection.clear
  23. movie = Movie.create(:name => 'Support Your Local Gunfighter')
  24. movie.casts << Cast.new(:name => 'James Garner', :person => 16896)
  25. movie.casts << Cast.new(:name => 'Suzanne Pleshette', :person => 8231)
  26. movie.casts << Cast.new(:name => 'Jack Elam', :person => 4965)
  27. movie.casts << Cast.new(:name => 'Harry Morgan', :person => 4073)
  28. movie.save
  29. movie = Movie.create(:name => 'Support Your Local Sheriff')
  30. movie.casts << Cast.new(:name => 'James Garner', :person => 16896)
  31. movie.casts << Cast.new(:name => 'Joan Hackett', :person => 69947)
  32. movie.casts << Cast.new(:name => 'Jack Elam', :person => 4965)
  33. movie.casts << Cast.new(:name => 'Harry Morgan', :person => 4073)
  34. movie.casts << Cast.new(:name => 'Walter Brennan', :persion => 4302)
  35. movie.save
  36. end
  37.  
  38. it "should update embedded documents" do
  39. movie = Movie.first
  40. cast = movie.casts.select{|cast| cast.name == 'Jack Elam'}
  41. cast.first.age = 83
  42. movie.save
  43. Movie.all(:conditions => {'casts.age' => 83}).size.should == 1
  44. end
  45.  
  46. it "should find embedded documents" do
  47. Movie.all("casts.name" => 'Jack Elam').size.should == 2
  48. Movie.all("casts.name" => 'Joan Hackett').size.should == 1
  49. Movie.all("casts.name" => 'Billy Bob').should be_empty
  50. end
  51.  
  52. it "should delete embedded documents" do
  53. movie = Movie.all(:conditions => {:name => /Support Your Local/}).first
  54. movie.should_not be_nil
  55. movie.casts.size.should == 4
  56. movie.casts.delete_if{|cast| cast.person == 4965}
  57. movie.save
  58. movie.casts.size.should == 3
  59. end
  60.  
  61. end
Add Comment
Please, Sign In to add comment