mongoid-fixture_set 1.1.0 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mongoid/fixture_set/fixture.rb +1 -1
- data/lib/mongoid/fixture_set/version.rb +1 -1
- data/lib/mongoid/fixture_set.rb +43 -30
- data/test/fixtures/users.yml +1 -0
- metadata +10 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 08d28904367b1439b40eff8c368b9e2fbc0a685a
|
4
|
+
data.tar.gz: 29794db7719e71e7a33c0daf552c421beb912684
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7836135a9f31c0c09b063e572521be6d8c3d06e828acdeec5a507b6398832daae12c87a5cee77189aafdca3e24b5ff0853845dd8cdd07e446d1880dcddc439d4
|
7
|
+
data.tar.gz: b4a989ce4acb13cf16f816bc27565b8f68bf06a3b2bc7d8806ab2439ee901e590649a4f19182c0156080c3cb71365bbf1fb80a88c35d4ee8d2a833491c2f0e06
|
@@ -29,7 +29,7 @@ module Mongoid
|
|
29
29
|
def find
|
30
30
|
if model_class
|
31
31
|
model_class.unscoped do
|
32
|
-
model_class.
|
32
|
+
model_class.find_by('__fixture_name' => name)
|
33
33
|
end
|
34
34
|
else
|
35
35
|
raise FixtureClassNotFound, "No class attached to find."
|
data/lib/mongoid/fixture_set.rb
CHANGED
@@ -3,8 +3,6 @@ require 'mongoid/fixture_set/file'
|
|
3
3
|
require 'mongoid/fixture_set/class_cache'
|
4
4
|
require 'mongoid/fixture_set/test_helper'
|
5
5
|
|
6
|
-
require 'active_support/core_ext/digest/uuid'
|
7
|
-
|
8
6
|
module Mongoid
|
9
7
|
class FixtureSet
|
10
8
|
@@cached_fixtures = Hash.new
|
@@ -89,24 +87,37 @@ module Mongoid
|
|
89
87
|
end
|
90
88
|
|
91
89
|
def create_or_update_document(model, attributes)
|
92
|
-
|
90
|
+
model = model.constantize if model.is_a? String
|
91
|
+
|
92
|
+
document = find_or_create_document(model, attributes['__fixture_name'])
|
93
|
+
update_document(document, attributes)
|
94
|
+
end
|
95
|
+
|
96
|
+
def update_document(document, attributes)
|
97
|
+
attributes.delete('_id') if document.attributes.has_key?('_id')
|
98
|
+
|
93
99
|
keys = (attributes.keys + document.attributes.keys).uniq
|
94
|
-
|
95
|
-
if attributes[key].is_a?(Array) || document
|
96
|
-
|
100
|
+
keys.each do |key|
|
101
|
+
if attributes[key].is_a?(Array) || document[key].is_a?(Array)
|
102
|
+
document[key] = Array(attributes[key]) + Array(document[key])
|
97
103
|
else
|
98
|
-
|
104
|
+
document[key] = attributes[key] || document[key]
|
99
105
|
end
|
100
|
-
|
101
|
-
end]
|
102
|
-
document.assign_attributes(attrs)
|
106
|
+
end
|
103
107
|
document.save(validate: false)
|
108
|
+
return document
|
104
109
|
end
|
105
110
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
111
|
+
def find_or_create_document(model, fixture_name)
|
112
|
+
model = model.constantize if model.is_a? String
|
113
|
+
|
114
|
+
document = model.where('__fixture_name' => fixture_name).first
|
115
|
+
if document.nil?
|
116
|
+
document = model.new
|
117
|
+
document['__fixture_name'] = fixture_name
|
118
|
+
document.save(validate: false)
|
119
|
+
end
|
120
|
+
return document
|
110
121
|
end
|
111
122
|
end
|
112
123
|
|
@@ -146,8 +157,15 @@ module Mongoid
|
|
146
157
|
documents[class_name] = fixtures.map do |label, fixture|
|
147
158
|
attributes = fixture.to_hash
|
148
159
|
|
160
|
+
attributes['__fixture_name'] = label
|
161
|
+
|
149
162
|
next attributes if model_class.nil?
|
150
163
|
|
164
|
+
if !attributes.has_key?('_id')
|
165
|
+
document = self.class.find_or_create_document(model_class, label)
|
166
|
+
attributes['_id'] = document.id
|
167
|
+
end
|
168
|
+
|
151
169
|
set_attributes_timestamps(attributes, model_class)
|
152
170
|
|
153
171
|
# interpolate the fixture label
|
@@ -155,34 +173,30 @@ module Mongoid
|
|
155
173
|
attributes[key] = value.gsub("$LABEL", label) if value.is_a?(String)
|
156
174
|
end
|
157
175
|
|
158
|
-
attributes['_id'] = self.class.identify(class_name, label)
|
159
|
-
|
160
176
|
model_class.relations.each do |name, relation|
|
161
177
|
case relation.macro
|
162
178
|
when :belongs_to
|
163
179
|
if value = attributes.delete(relation.name.to_s)
|
164
|
-
id = self.class.identify(relation.class_name, value)
|
165
180
|
if relation.polymorphic? && value.sub!(/\s*\(([^)]*)\)\s*/, '')
|
166
181
|
type = $1
|
167
182
|
attributes[relation.foreign_key.sub(/_id$/, '_type')] = type
|
168
|
-
|
183
|
+
attributes[relation.foreign_key] = self.class.find_or_create_document(type, value).id
|
184
|
+
else
|
185
|
+
attributes[relation.foreign_key] = self.class.find_or_create_document(relation.class_name, value).id
|
169
186
|
end
|
170
|
-
attributes[relation.foreign_key] = id
|
171
187
|
end
|
172
188
|
when :has_many
|
173
189
|
if values = attributes.delete(relation.name.to_s)
|
174
190
|
values.each do |value|
|
175
|
-
|
191
|
+
document = self.class.find_or_create_document(relation.class_name, value)
|
176
192
|
if relation.polymorphic?
|
177
|
-
self.class.
|
178
|
-
'_id' => id,
|
193
|
+
self.class.update_document(document, {
|
179
194
|
"#{relation.as}_id" => attributes['_id'],
|
180
195
|
"#{relation.as}_type" => model_class.name,
|
181
196
|
})
|
182
197
|
else
|
183
|
-
self.class.
|
184
|
-
'_id'
|
185
|
-
relation.foreign_key => attributes['_id'],
|
198
|
+
self.class.update_document(document, {
|
199
|
+
relation.foreign_key => attributes['_id']
|
186
200
|
})
|
187
201
|
end
|
188
202
|
end
|
@@ -193,12 +207,11 @@ module Mongoid
|
|
193
207
|
attributes[key] = []
|
194
208
|
|
195
209
|
values.each do |value|
|
196
|
-
|
197
|
-
attributes[key] << id
|
210
|
+
document = self.class.find_or_create_document(relation.class_name, value)
|
211
|
+
attributes[key] << document.id
|
198
212
|
|
199
|
-
self.class.
|
200
|
-
'_id'
|
201
|
-
relation.inverse_foreign_key => [attributes['_id']]
|
213
|
+
self.class.update_document(document, {
|
214
|
+
relation.inverse_foreign_key => Array(attributes['_id'])
|
202
215
|
})
|
203
216
|
end
|
204
217
|
end
|
data/test/fixtures/users.yml
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-fixture_set
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Geoffroy Planquart
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '4.
|
33
|
+
version: '4.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '4.
|
40
|
+
version: '4.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -62,28 +62,28 @@ files:
|
|
62
62
|
- lib/mongoid/fixture_set/errors.rb
|
63
63
|
- lib/mongoid/fixture_set/file.rb
|
64
64
|
- lib/mongoid/fixture_set/class_cache.rb
|
65
|
+
- lib/mongoid/fixture_set/test_helper.rb
|
65
66
|
- lib/mongoid/fixture_set/fixture.rb
|
66
67
|
- lib/mongoid/fixture_set/version.rb
|
67
|
-
- lib/mongoid/fixture_set/test_helper.rb
|
68
68
|
- lib/mongoid/fixture_set.rb
|
69
69
|
- lib/mongoid-fixture_set.rb
|
70
70
|
- MIT-LICENSE
|
71
71
|
- Rakefile
|
72
72
|
- test/mongoid/fixtures_test.rb
|
73
|
-
- test/mongoid/fixture_set_test.rb
|
74
73
|
- test/mongoid/load_once_test.rb
|
74
|
+
- test/mongoid/fixture_set_test.rb
|
75
75
|
- test/models/group.rb
|
76
76
|
- test/models/organisation.rb
|
77
77
|
- test/models/school.rb
|
78
78
|
- test/models/user.rb
|
79
79
|
- test/models/test.rb
|
80
80
|
- test/mongoid.yml
|
81
|
-
- test/fixtures/users.yml
|
82
81
|
- test/fixtures/groups.yml
|
83
82
|
- test/fixtures/schools.yml
|
84
83
|
- test/fixtures/organisations.yml
|
85
84
|
- test/fixtures/users/family.yml
|
86
85
|
- test/fixtures/not_models.yml
|
86
|
+
- test/fixtures/users.yml
|
87
87
|
- test/test_helper.rb
|
88
88
|
- test/load_once_fixtures/tests.yml
|
89
89
|
homepage: https://github.com/Aethelflaed/mongoid-fixture_set
|
@@ -112,20 +112,20 @@ specification_version: 4
|
|
112
112
|
summary: Fixtures for Mongoid
|
113
113
|
test_files:
|
114
114
|
- test/mongoid/fixtures_test.rb
|
115
|
-
- test/mongoid/fixture_set_test.rb
|
116
115
|
- test/mongoid/load_once_test.rb
|
116
|
+
- test/mongoid/fixture_set_test.rb
|
117
117
|
- test/models/group.rb
|
118
118
|
- test/models/organisation.rb
|
119
119
|
- test/models/school.rb
|
120
120
|
- test/models/user.rb
|
121
121
|
- test/models/test.rb
|
122
122
|
- test/mongoid.yml
|
123
|
-
- test/fixtures/users.yml
|
124
123
|
- test/fixtures/groups.yml
|
125
124
|
- test/fixtures/schools.yml
|
126
125
|
- test/fixtures/organisations.yml
|
127
126
|
- test/fixtures/users/family.yml
|
128
127
|
- test/fixtures/not_models.yml
|
128
|
+
- test/fixtures/users.yml
|
129
129
|
- test/test_helper.rb
|
130
130
|
- test/load_once_fixtures/tests.yml
|
131
131
|
has_rdoc:
|