mongo_mapper 0.5.7 → 0.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Rakefile CHANGED
@@ -1,16 +1,18 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
3
  require 'jeweler'
4
+ require 'yard'
5
+ require 'yard/rake/yardoc_task'
6
+
4
7
  Jeweler::Tasks.new do |gem|
5
8
  gem.name = "mongo_mapper"
6
9
  gem.summary = %Q{Awesome gem for modeling your domain and storing it in mongo}
7
- gem.description = %Q{Awesome gem for modeling your domain and storing it in mongo}
8
10
  gem.email = "nunemaker@gmail.com"
9
11
  gem.homepage = "http://github.com/jnunemaker/mongomapper"
10
12
  gem.authors = ["John Nunemaker"]
11
13
 
12
14
  gem.add_dependency('activesupport', '>= 2.3')
13
- gem.add_dependency('mongo', '0.15.1')
15
+ gem.add_dependency('mongo', '0.16')
14
16
  gem.add_dependency('jnunemaker-validatable', '1.8.0')
15
17
 
16
18
  gem.add_development_dependency('jnunemaker-matchy', '0.4.0')
@@ -47,3 +49,7 @@ end
47
49
 
48
50
  task :default => :test
49
51
  task :test => :check_dependencies
52
+
53
+ YARD::Rake::YardocTask.new(:doc) do |t|
54
+ t.options = ["--legacy"]
55
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.7
1
+ 0.5.8
@@ -56,6 +56,12 @@ module MongoMapper
56
56
  apply_scope(doc).save
57
57
  doc
58
58
  end
59
+
60
+ def create!(attrs={})
61
+ doc = klass.new(attrs)
62
+ apply_scope(doc).save!
63
+ doc
64
+ end
59
65
 
60
66
  def destroy_all(options={})
61
67
  all(options).map(&:destroy)
@@ -5,13 +5,12 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mongo_mapper}
8
- s.version = "0.5.7"
8
+ s.version = "0.5.8"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["John Nunemaker"]
12
- s.date = %q{2009-10-28}
12
+ s.date = %q{2009-10-29}
13
13
  s.default_executable = %q{mmconsole}
14
- s.description = %q{Awesome gem for modeling your domain and storing it in mongo}
15
14
  s.email = %q{nunemaker@gmail.com}
16
15
  s.executables = ["mmconsole"]
17
16
  s.extra_rdoc_files = [
@@ -142,7 +141,7 @@ Gem::Specification.new do |s|
142
141
 
143
142
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
144
143
  s.add_runtime_dependency(%q<activesupport>, [">= 2.3"])
145
- s.add_runtime_dependency(%q<mongo>, ["= 0.15.1"])
144
+ s.add_runtime_dependency(%q<mongo>, ["= 0.16"])
146
145
  s.add_runtime_dependency(%q<jnunemaker-validatable>, ["= 1.8.0"])
147
146
  s.add_development_dependency(%q<jnunemaker-matchy>, ["= 0.4.0"])
148
147
  s.add_development_dependency(%q<shoulda>, ["= 2.10.2"])
@@ -150,7 +149,7 @@ Gem::Specification.new do |s|
150
149
  s.add_development_dependency(%q<mocha>, ["= 0.9.4"])
151
150
  else
152
151
  s.add_dependency(%q<activesupport>, [">= 2.3"])
153
- s.add_dependency(%q<mongo>, ["= 0.15.1"])
152
+ s.add_dependency(%q<mongo>, ["= 0.16"])
154
153
  s.add_dependency(%q<jnunemaker-validatable>, ["= 1.8.0"])
155
154
  s.add_dependency(%q<jnunemaker-matchy>, ["= 0.4.0"])
156
155
  s.add_dependency(%q<shoulda>, ["= 2.10.2"])
@@ -159,7 +158,7 @@ Gem::Specification.new do |s|
159
158
  end
160
159
  else
161
160
  s.add_dependency(%q<activesupport>, [">= 2.3"])
162
- s.add_dependency(%q<mongo>, ["= 0.15.1"])
161
+ s.add_dependency(%q<mongo>, ["= 0.16"])
163
162
  s.add_dependency(%q<jnunemaker-validatable>, ["= 1.8.0"])
164
163
  s.add_dependency(%q<jnunemaker-matchy>, ["= 0.4.0"])
165
164
  s.add_dependency(%q<shoulda>, ["= 2.10.2"])
@@ -3,8 +3,8 @@ require 'models'
3
3
 
4
4
  class BelongsToPolymorphicProxyTest < Test::Unit::TestCase
5
5
  def setup
6
- Status.collection.clear
7
- Project.collection.clear
6
+ Status.collection.remove
7
+ Project.collection.remove
8
8
  end
9
9
 
10
10
  should "default to nil" do
@@ -14,7 +14,7 @@ class BelongsToPolymorphicProxyTest < Test::Unit::TestCase
14
14
  end
15
15
 
16
16
  should "be able to replace the association" do
17
- status = Status.new
17
+ status = Status.new(:name => 'Foo!')
18
18
  project = Project.new(:name => "mongomapper")
19
19
  status.target = project
20
20
  status.save.should be_true
@@ -27,7 +27,7 @@ class BelongsToPolymorphicProxyTest < Test::Unit::TestCase
27
27
  end
28
28
 
29
29
  should "unset the association" do
30
- status = Status.new
30
+ status = Status.new(:name => 'Foo!')
31
31
  project = Project.new(:name => "mongomapper")
32
32
  status.target = project
33
33
  status.save.should be_true
@@ -41,7 +41,7 @@ class BelongsToPolymorphicProxyTest < Test::Unit::TestCase
41
41
 
42
42
  context "association id set but document not found" do
43
43
  setup do
44
- @status = Status.new
44
+ @status = Status.new(:name => 'Foo!')
45
45
  project = Project.new(:name => "mongomapper")
46
46
  @status.target = project
47
47
  @status.save.should be_true
@@ -3,8 +3,8 @@ require 'models'
3
3
 
4
4
  class BelongsToProxyTest < Test::Unit::TestCase
5
5
  def setup
6
- Status.collection.clear
7
- Project.collection.clear
6
+ Status.collection.remove
7
+ Project.collection.remove
8
8
  end
9
9
 
10
10
  should "default to nil" do
@@ -14,7 +14,7 @@ class BelongsToProxyTest < Test::Unit::TestCase
14
14
  end
15
15
 
16
16
  should "be able to replace the association" do
17
- status = Status.new
17
+ status = Status.new(:name => 'Foo!')
18
18
  project = Project.new(:name => "mongomapper")
19
19
  status.project = project
20
20
  status.save.should be_true
@@ -25,7 +25,7 @@ class BelongsToProxyTest < Test::Unit::TestCase
25
25
  end
26
26
 
27
27
  should "unset the association" do
28
- status = Status.new
28
+ status = Status.new(:name => 'Foo!')
29
29
  project = Project.new(:name => "mongomapper")
30
30
  status.project = project
31
31
  status.save.should be_true
@@ -3,8 +3,8 @@ require 'models'
3
3
 
4
4
  class ManyDocumentsAsProxyTest < Test::Unit::TestCase
5
5
  def setup
6
- Post.collection.clear
7
- PostComment.collection.clear
6
+ Post.collection.remove
7
+ PostComment.collection.remove
8
8
  end
9
9
 
10
10
  should "default reader to empty array" do
@@ -3,8 +3,8 @@ require 'models'
3
3
 
4
4
  class ManyEmbeddedPolymorphicProxyTest < Test::Unit::TestCase
5
5
  def setup
6
- Catalog.collection.clear
7
- TrModels::Fleet.collection.clear
6
+ Catalog.collection.remove
7
+ TrModels::Fleet.collection.remove
8
8
  end
9
9
 
10
10
  should "default reader to empty array" do
@@ -3,8 +3,8 @@ require 'models'
3
3
 
4
4
  class ManyEmbeddedProxyTest < Test::Unit::TestCase
5
5
  def setup
6
- Project.collection.clear
7
- RealPerson.collection.clear
6
+ Project.collection.remove
7
+ RealPerson.collection.remove
8
8
  end
9
9
 
10
10
  should "default reader to empty array" do
@@ -45,7 +45,7 @@ class ManyEmbeddedProxyTest < Test::Unit::TestCase
45
45
  set_collection_name 'test'
46
46
  key :person, Person
47
47
  end
48
- @document.collection.clear
48
+ @document.collection.remove
49
49
 
50
50
  meg = Person.new(:name => "Meg")
51
51
  meg.child = Person.new(:name => "Steve")
@@ -92,7 +92,7 @@ class ManyEmbeddedProxyTest < Test::Unit::TestCase
92
92
  set_collection_name 'test'
93
93
  many :people
94
94
  end
95
- @document.collection.clear
95
+ @document.collection.remove
96
96
  end
97
97
 
98
98
  should "persist all embedded documents" do
@@ -3,8 +3,8 @@ require 'models'
3
3
 
4
4
  class ManyPolymorphicProxyTest < Test::Unit::TestCase
5
5
  def setup
6
- Room.collection.clear
7
- Message.collection.clear
6
+ Room.collection.remove
7
+ Message.collection.remove
8
8
  end
9
9
 
10
10
  should "default reader to empty array" do
@@ -3,8 +3,8 @@ require 'models'
3
3
 
4
4
  class ManyProxyTest < Test::Unit::TestCase
5
5
  def setup
6
- Project.collection.clear
7
- Status.collection.clear
6
+ Project.collection.remove
7
+ Status.collection.remove
8
8
  end
9
9
 
10
10
  should "default reader to empty array" do
@@ -14,9 +14,9 @@ class ManyProxyTest < Test::Unit::TestCase
14
14
 
15
15
  should "allow adding to association like it was an array" do
16
16
  project = Project.new
17
- project.statuses << Status.new
18
- project.statuses.push Status.new
19
- project.statuses.concat Status.new
17
+ project.statuses << Status.new(:name => 'Foo1!')
18
+ project.statuses.push Status.new(:name => 'Foo2!')
19
+ project.statuses.concat Status.new(:name => 'Foo3!')
20
20
  project.statuses.size.should == 3
21
21
  end
22
22
 
@@ -59,14 +59,14 @@ class ManyProxyTest < Test::Unit::TestCase
59
59
  context "create" do
60
60
  should "assign foreign key" do
61
61
  project = Project.create
62
- status = project.statuses.create
62
+ status = project.statuses.create(:name => 'Foo!')
63
63
  status.project_id.should == project.id
64
64
  end
65
65
 
66
66
  should "save record" do
67
67
  project = Project.create
68
68
  lambda {
69
- project.statuses.create
69
+ project.statuses.create(:name => 'Foo!')
70
70
  }.should change { Status.count }
71
71
  end
72
72
 
@@ -77,13 +77,42 @@ class ManyProxyTest < Test::Unit::TestCase
77
77
  end
78
78
  end
79
79
 
80
+ context "create!" do
81
+ should "assign foreign key" do
82
+ project = Project.create
83
+ status = project.statuses.create!(:name => 'Foo!')
84
+ status.project_id.should == project.id
85
+ end
86
+
87
+ should "save record" do
88
+ project = Project.create
89
+ lambda {
90
+ project.statuses.create!(:name => 'Foo!')
91
+ }.should change { Status.count }
92
+ end
93
+
94
+ should "allow passing attributes" do
95
+ project = Project.create
96
+ status = project.statuses.create!(:name => 'Foo!')
97
+ status.name.should == 'Foo!'
98
+ end
99
+
100
+ should "raise exception if not valid" do
101
+ project = Project.create
102
+ lambda {
103
+ project.statuses.create!(:name => nil)
104
+ }.should raise_error(MongoMapper::DocumentNotValid)
105
+ end
106
+ end
107
+
108
+
80
109
  context "count" do
81
110
  should "work scoped to association" do
82
111
  project = Project.create
83
- 3.times { project.statuses.create }
112
+ 3.times { project.statuses.create(:name => 'Foo!') }
84
113
 
85
114
  other_project = Project.create
86
- 2.times { other_project.statuses.create }
115
+ 2.times { other_project.statuses.create(:name => 'Foo!') }
87
116
 
88
117
  project.statuses.count.should == 3
89
118
  other_project.statuses.count.should == 2
@@ -8,7 +8,7 @@ class AssociationsTest < Test::Unit::TestCase
8
8
 
9
9
  many :posts, :class_name => 'AssociationsTest::AwesomePost', :foreign_key => :creator_id
10
10
  end
11
- AwesomeUser.collection.clear
11
+ AwesomeUser.collection.remove
12
12
 
13
13
  class AwesomeTag
14
14
  include MongoMapper::EmbeddedDocument
@@ -28,8 +28,8 @@ class AssociationsTest < Test::Unit::TestCase
28
28
  many :tags, :class_name => 'AssociationsTest::AwesomeTag', :foreign_key => :post_id
29
29
  end
30
30
 
31
- AwesomeUser.collection.clear
32
- AwesomePost.collection.clear
31
+ AwesomeUser.collection.remove
32
+ AwesomePost.collection.remove
33
33
 
34
34
  user = AwesomeUser.create
35
35
  tag1 = AwesomeTag.new(:name => 'awesome')
@@ -7,7 +7,7 @@ class BinaryTest < Test::Unit::TestCase
7
7
  set_collection_name 'test'
8
8
  key :contents, Binary
9
9
  end
10
- klass.collection.clear
10
+ klass.collection.remove
11
11
 
12
12
  doc = klass.new(:contents => '010101')
13
13
  doc.save
@@ -30,7 +30,7 @@ class CallbacksTest < Test::Unit::TestCase
30
30
  @history = nil
31
31
  end
32
32
  end
33
- @document.collection.clear
33
+ @document.collection.remove
34
34
  end
35
35
 
36
36
  should "get the order right for creating documents" do
@@ -8,10 +8,10 @@ class DirtyTest < Test::Unit::TestCase
8
8
  set_collection_name 'test'
9
9
  key :phrase, String
10
10
  end
11
- @document.collection.clear
11
+ @document.collection.remove
12
12
 
13
- Status.collection.clear
14
- Project.collection.clear
13
+ Status.collection.remove
14
+ Project.collection.remove
15
15
  end
16
16
 
17
17
  context "marking changes" do
@@ -12,7 +12,7 @@ class DocumentTest < Test::Unit::TestCase
12
12
  key :age, Integer
13
13
  key :date, Date
14
14
  end
15
- @document.collection.clear
15
+ @document.collection.remove
16
16
  end
17
17
 
18
18
  context "Saving a document with a custom id" do
@@ -194,7 +194,7 @@ class DocumentTest < Test::Unit::TestCase
194
194
  include MongoMapper::Document
195
195
  set_collection_name 'test'
196
196
  end
197
- @document.collection.clear
197
+ @document.collection.remove
198
198
  end
199
199
 
200
200
  should "create the document" do
@@ -569,13 +569,13 @@ class DocumentTest < Test::Unit::TestCase
569
569
  class ::Property
570
570
  include MongoMapper::Document
571
571
  end
572
- Property.collection.clear
572
+ Property.collection.remove
573
573
 
574
574
  class ::Thing
575
575
  include MongoMapper::Document
576
576
  key :name, String
577
577
  end
578
- Thing.collection.clear
578
+ Thing.collection.remove
579
579
  end
580
580
 
581
581
  teardown do
@@ -701,7 +701,7 @@ class DocumentTest < Test::Unit::TestCase
701
701
  include MongoMapper::Document
702
702
  set_collection_name 'foobarbazwickdoesnotexist'
703
703
  end
704
- @document.collection.clear
704
+ @document.collection.remove
705
705
 
706
706
  klass.count.should == 0
707
707
  end
@@ -952,7 +952,7 @@ class DocumentTest < Test::Unit::TestCase
952
952
  key :_type, String
953
953
  key :name, String
954
954
  end
955
- DocParent.collection.clear
955
+ DocParent.collection.remove
956
956
 
957
957
  class ::DocDaughter < ::DocParent; end
958
958
  class ::DocSon < ::DocParent; end
@@ -10,7 +10,7 @@ class EmbeddedDocumentTest < Test::Unit::TestCase
10
10
  key :first_name, String
11
11
  key :last_name, String
12
12
  end
13
- @document.collection.clear
13
+ @document.collection.remove
14
14
  end
15
15
 
16
16
  context "Saving a document with an embedded document" do
@@ -13,7 +13,7 @@ class PaginationTest < Test::Unit::TestCase
13
13
 
14
14
  def self.per_page; 1 end
15
15
  end
16
- @document.collection.clear
16
+ @document.collection.remove
17
17
 
18
18
  @doc1 = @document.create({:first_name => 'John', :last_name => 'Nunemaker', :age => '27'})
19
19
  @doc2 = @document.create({:first_name => 'Steve', :last_name => 'Smith', :age => '28'})
@@ -14,7 +14,7 @@ class TestRailsCompatibility < Test::Unit::TestCase
14
14
 
15
15
  context "Document" do
16
16
  setup do
17
- Order.collection.clear
17
+ Order.collection.remove
18
18
  end
19
19
 
20
20
  should "alias new to new_record?" do
@@ -8,7 +8,7 @@ class ValidationsTest < Test::Unit::TestCase
8
8
  set_collection_name 'test'
9
9
  key :name, String, :required => true
10
10
  end
11
- @document.collection.clear
11
+ @document.collection.remove
12
12
  end
13
13
 
14
14
  should "not insert document" do
@@ -32,7 +32,7 @@ class ValidationsTest < Test::Unit::TestCase
32
32
  set_collection_name 'test'
33
33
  key :name, String, :required => true
34
34
  end
35
- @document.collection.clear
35
+ @document.collection.remove
36
36
  end
37
37
 
38
38
  should "raise error" do
@@ -48,7 +48,7 @@ class ValidationsTest < Test::Unit::TestCase
48
48
  set_collection_name 'test'
49
49
  key :name, String, :required => true
50
50
  end
51
- @document.collection.clear
51
+ @document.collection.remove
52
52
  end
53
53
 
54
54
  should "raise error" do
@@ -68,7 +68,7 @@ class ValidationsTest < Test::Unit::TestCase
68
68
  set_collection_name 'test'
69
69
  key :name, String, :required => true
70
70
  end
71
- @document.collection.clear
71
+ @document.collection.remove
72
72
 
73
73
  @doc = @document.create(:name => 'John Nunemaker')
74
74
  end
@@ -97,7 +97,7 @@ class ValidationsTest < Test::Unit::TestCase
97
97
  errors.add(:action, 'is invalid') if action.blank?
98
98
  end
99
99
  end
100
- @document.collection.clear
100
+ @document.collection.remove
101
101
  end
102
102
 
103
103
  should "work with validate_on_create callback" do
@@ -140,7 +140,7 @@ class ValidationsTest < Test::Unit::TestCase
140
140
  key :name, String
141
141
  validates_uniqueness_of :name
142
142
  end
143
- @document.collection.clear
143
+ @document.collection.remove
144
144
  end
145
145
 
146
146
  should "not fail if object is new" do
@@ -223,7 +223,7 @@ class ValidationsTest < Test::Unit::TestCase
223
223
  key :scope, String
224
224
  validates_uniqueness_of :name, :scope => :scope
225
225
  end
226
- @document.collection.clear
226
+ @document.collection.remove
227
227
  end
228
228
 
229
229
  should "fail if the same name exists in the scope" do
@@ -264,7 +264,7 @@ class ValidationsTest < Test::Unit::TestCase
264
264
  key :second_scope, String
265
265
  validates_uniqueness_of :name, :scope => [:first_scope, :second_scope]
266
266
  end
267
- @document.collection.clear
267
+ @document.collection.remove
268
268
  end
269
269
 
270
270
  should "fail if the same name exists in the scope" do
@@ -303,7 +303,7 @@ class ValidationsTest < Test::Unit::TestCase
303
303
 
304
304
  key :name, String, :unique => true
305
305
  end
306
- @document.collection.clear
306
+ @document.collection.remove
307
307
 
308
308
  doc = @document.create(:name => 'John')
309
309
  doc.should_not have_error_on(:name)
@@ -109,23 +109,24 @@ class Answer
109
109
  key :body, String
110
110
  end
111
111
 
112
+ module PeopleExtensions
113
+ def find_by_name(name)
114
+ detect { |p| p.name == name }
115
+ end
116
+ end
117
+
118
+ module CollaboratorsExtensions
119
+ def top
120
+ first
121
+ end
122
+ end
123
+
112
124
  class Project
113
125
  include MongoMapper::Document
114
126
 
115
127
  key :name, String
116
128
 
117
- module PeopleExtensions
118
- def find_by_name(name)
119
- detect { |p| p.name == name }
120
- end
121
- end
122
129
  many :people, :extend => PeopleExtensions
123
-
124
- module CollaboratorsExtensions
125
- def top
126
- first
127
- end
128
- end
129
130
  many :collaborators, :extend => CollaboratorsExtensions
130
131
 
131
132
  many :statuses, :order => 'position' do
@@ -155,7 +156,7 @@ class Status
155
156
  key :project_id, String
156
157
  key :target_id, String
157
158
  key :target_type, String
158
- key :name, String
159
+ key :name, String, :required => true
159
160
  key :position, Integer
160
161
 
161
162
  belongs_to :project
@@ -8,7 +8,7 @@ class DocumentTest < Test::Unit::TestCase
8
8
  include MongoMapper::Document
9
9
  set_collection_name 'test'
10
10
  end
11
- @document.collection.clear
11
+ @document.collection.remove
12
12
  end
13
13
 
14
14
  should "have logger method" do
@@ -102,7 +102,7 @@ class DocumentTest < Test::Unit::TestCase
102
102
  key :name, String
103
103
  key :age, Integer
104
104
  end
105
- @document.collection.clear
105
+ @document.collection.remove
106
106
  end
107
107
 
108
108
  should "have access to logger" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongo_mapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.7
4
+ version: 0.5.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Nunemaker
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-28 00:00:00 -04:00
12
+ date: 2009-10-29 00:00:00 -04:00
13
13
  default_executable: mmconsole
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -30,7 +30,7 @@ dependencies:
30
30
  requirements:
31
31
  - - "="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.15.1
33
+ version: "0.16"
34
34
  version:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: jnunemaker-validatable
@@ -82,7 +82,7 @@ dependencies:
82
82
  - !ruby/object:Gem::Version
83
83
  version: 0.9.4
84
84
  version:
85
- description: Awesome gem for modeling your domain and storing it in mongo
85
+ description:
86
86
  email: nunemaker@gmail.com
87
87
  executables:
88
88
  - mmconsole