hydra_attribute 0.3.2 → 0.4.0.rc1
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/CHANGELOG.md +1 -1
- data/README.md +7 -0
- data/features/entity/create.feature +128 -0
- data/features/entity/destroy.feature +111 -0
- data/features/entity/new.feature +121 -0
- data/features/entity/update.feature +147 -0
- data/features/{attributes → hydra_attribute}/create.feature +7 -7
- data/features/{attributes → hydra_attribute}/destroy.feature +2 -4
- data/features/{attributes → hydra_attribute}/update.feature +10 -10
- data/features/hydra_set/destroy.feature +31 -0
- data/features/migrations/create_and_drop.feature +165 -0
- data/features/migrations/migrate_and_rollback.feature +211 -0
- data/features/relation/query_methods/group.feature +42 -0
- data/features/relation/query_methods/order.feature +67 -0
- data/features/relation/query_methods/reorder.feature +29 -0
- data/features/relation/query_methods/reverse_order.feature +29 -0
- data/features/relation/query_methods/select.feature +50 -0
- data/features/relation/query_methods/where.feature +70 -0
- data/features/step_definitions/connections.rb +65 -0
- data/features/step_definitions/model_steps.rb +79 -6
- data/features/step_definitions/query_methods.rb +3 -3
- data/features/step_definitions/record_steps.rb +3 -4
- data/features/support/env.rb +17 -3
- data/features/support/world.rb +15 -10
- data/gemfiles/3.1.gemfile.lock +15 -15
- data/gemfiles/3.2.gemfile.lock +15 -15
- data/lib/hydra_attribute/active_record/association.rb +74 -38
- data/lib/hydra_attribute/active_record/association_preloader.rb +49 -49
- data/lib/hydra_attribute/active_record/attribute_methods.rb +37 -85
- data/lib/hydra_attribute/active_record/migration.rb +2 -2
- data/lib/hydra_attribute/active_record/reflection.rb +1 -1
- data/lib/hydra_attribute/active_record/relation/query_methods.rb +8 -7
- data/lib/hydra_attribute/active_record/relation.rb +1 -0
- data/lib/hydra_attribute/active_record.rb +20 -12
- data/lib/hydra_attribute/association_builder.rb +1 -2
- data/lib/hydra_attribute/builder.rb +7 -8
- data/lib/hydra_attribute/entity_callbacks.rb +12 -32
- data/lib/hydra_attribute/hydra_attribute.rb +25 -16
- data/lib/hydra_attribute/hydra_attribute_methods.rb +85 -0
- data/lib/hydra_attribute/hydra_methods.rb +123 -0
- data/lib/hydra_attribute/hydra_set.rb +36 -0
- data/lib/hydra_attribute/hydra_set_methods.rb +39 -0
- data/lib/hydra_attribute/hydra_value_methods.rb +14 -0
- data/lib/hydra_attribute/memoize.rb +37 -0
- data/lib/hydra_attribute/migrator.rb +100 -51
- data/lib/hydra_attribute/railtie.rb +1 -3
- data/lib/hydra_attribute/version.rb +1 -1
- data/lib/hydra_attribute.rb +7 -1
- data/spec/hydra_attribute_methods_spec.rb +458 -0
- data/spec/hydra_attribute_spec.rb +19 -0
- data/spec/hydra_methods_spec.rb +457 -0
- data/spec/hydra_set_methods_spec.rb +203 -0
- data/spec/hydra_set_spec.rb +19 -0
- data/spec/memoize_spec.rb +95 -0
- data/spec/spec_helper.rb +42 -2
- metadata +71 -43
- data/features/create.feature +0 -47
- data/features/define.feature +0 -38
- data/features/destroy.feature +0 -102
- data/features/query_methods/group.feature +0 -42
- data/features/query_methods/order.feature +0 -99
- data/features/query_methods/select.feature +0 -50
- data/features/query_methods/where.feature +0 -70
- data/features/support/schema.rb +0 -79
- data/features/update.feature +0 -114
@@ -0,0 +1,458 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe HydraAttribute::HydraAttributeMethods do
|
4
|
+
describe '.hydra_attributes' do
|
5
|
+
it 'should return blank array if there are not any hydra attributes for entity' do
|
6
|
+
Product.hydra_attributes.should be_blank
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should return all hydra attributes for entity' do
|
10
|
+
one = Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
11
|
+
two = Product.hydra_attributes.create(name: 'two', backend_type: 'string')
|
12
|
+
|
13
|
+
Product.should have(2).hydra_attributes
|
14
|
+
Product.hydra_attributes.first.should == one
|
15
|
+
Product.hydra_attributes.last.should == two
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should cache result' do
|
19
|
+
# hydra_attributes method is called for generation hydra methods
|
20
|
+
# so this method is already cached and this cache should be removed manually
|
21
|
+
Product.send(:remove_instance_variable, :@hydra_attributes) if Product.instance_variable_defined?(:@hydra_attributes)
|
22
|
+
|
23
|
+
Product.should_receive(:unmemoized_hydra_attributes).once
|
24
|
+
2.times { Product.hydra_attributes }
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should reset method cache after creating hydra attribute' do
|
28
|
+
hydra_attributes = Product.hydra_attributes
|
29
|
+
Product.should_receive(:unmemoized_hydra_attributes).once
|
30
|
+
|
31
|
+
hydra_attributes.create(name: 'one', backend_type: 'string')
|
32
|
+
2.times { Product.hydra_attributes }
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should reset method cache after updating hydra attribute' do
|
36
|
+
hydra_attribute = Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
37
|
+
Product.should_receive(:unmemoized_hydra_attributes).once
|
38
|
+
|
39
|
+
hydra_attribute.update_attributes(name: 'two')
|
40
|
+
2.times { Product.hydra_attributes }
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should reset method cache after removing hydra attribute' do
|
44
|
+
hydra_attribute = Product.hydra_attributes.create(name: 'once', backend_type: 'string')
|
45
|
+
Product.should_receive(:unmemoized_hydra_attributes).once
|
46
|
+
|
47
|
+
hydra_attribute.destroy
|
48
|
+
2.times { Product.hydra_attributes }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe '.hydra_attribute' do
|
53
|
+
it 'should return hydra attribute by id' do
|
54
|
+
one = Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
55
|
+
two = Product.hydra_attributes.create(name: 'two', backend_type: 'string')
|
56
|
+
|
57
|
+
Product.hydra_attribute(one.id).should == one
|
58
|
+
Product.hydra_attribute(two.id).should == two
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should return hydra attribute by name' do
|
62
|
+
one = Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
63
|
+
two = Product.hydra_attributes.create(name: 'two', backend_type: 'string')
|
64
|
+
|
65
|
+
Product.hydra_attribute(one.name).should == one
|
66
|
+
Product.hydra_attribute(two.name).should == two
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'should cache result' do
|
70
|
+
Product.should_receive(:unmemoized_hydra_attribute).once
|
71
|
+
2.times { Product.hydra_attribute('name') }
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'should reset method cache after creating hydra attribute' do
|
75
|
+
hydra_attributes = Product.hydra_attributes
|
76
|
+
Product.should_receive(:unmemoized_hydra_attribute).twice
|
77
|
+
|
78
|
+
Product.hydra_attribute('one')
|
79
|
+
hydra_attributes.create(name: 'one', backend_type: 'string')
|
80
|
+
Product.hydra_attribute('one')
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'should reset method cache after updating hydra attribute' do
|
84
|
+
hydra_attribute = Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
85
|
+
Product.should_receive(:unmemoized_hydra_attribute).twice
|
86
|
+
|
87
|
+
Product.hydra_attribute('one')
|
88
|
+
hydra_attribute.update_attributes(name: 'two')
|
89
|
+
Product.hydra_attribute('one')
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'should reset method cache after removing hydra attribute' do
|
93
|
+
hydra_attribute = Product.hydra_attributes.create(name: 'once', backend_type: 'string')
|
94
|
+
Product.should_receive(:unmemoized_hydra_attribute).twice
|
95
|
+
|
96
|
+
Product.hydra_attribute('one')
|
97
|
+
hydra_attribute.destroy
|
98
|
+
Product.hydra_attribute('one')
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe '.hydra_attribute_backend_types' do
|
103
|
+
it 'should return all backend types' do
|
104
|
+
Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
105
|
+
Product.hydra_attributes.create(name: 'two', backend_type: 'string')
|
106
|
+
Product.hydra_attributes.create(name: 'three', backend_type: 'integer')
|
107
|
+
|
108
|
+
Product.hydra_attribute_backend_types.should =~ %w(string integer)
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'should cache result' do
|
112
|
+
Product.should_receive(:unmemoized_hydra_attribute_backend_types).once
|
113
|
+
2.times { Product.hydra_attribute_backend_types }
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'should reset method cache after creating hydra attribute' do
|
117
|
+
hydra_attributes = Product.hydra_attributes
|
118
|
+
Product.should_receive(:unmemoized_hydra_attribute_backend_types).twice
|
119
|
+
|
120
|
+
Product.hydra_attribute_backend_types
|
121
|
+
hydra_attributes.create(name: 'one', backend_type: 'string')
|
122
|
+
Product.hydra_attribute_backend_types
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'should reset method cache after updating hydra attribute' do
|
126
|
+
hydra_attribute = Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
127
|
+
Product.should_receive(:unmemoized_hydra_attribute_backend_types).twice
|
128
|
+
|
129
|
+
Product.hydra_attribute_backend_types
|
130
|
+
hydra_attribute.update_attributes(name: 'two')
|
131
|
+
Product.hydra_attribute_backend_types
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'should reset method cache after removing hydra attribute' do
|
135
|
+
hydra_attribute = Product.hydra_attributes.create(name: 'once', backend_type: 'string')
|
136
|
+
Product.should_receive(:unmemoized_hydra_attribute_backend_types).twice
|
137
|
+
|
138
|
+
Product.hydra_attribute_backend_types
|
139
|
+
hydra_attribute.destroy
|
140
|
+
Product.hydra_attribute_backend_types
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
describe '.hydra_attribute_ids' do
|
145
|
+
it 'should return all ids' do
|
146
|
+
one = Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
147
|
+
two = Product.hydra_attributes.create(name: 'two', backend_type: 'string')
|
148
|
+
three = Product.hydra_attributes.create(name: 'three', backend_type: 'integer')
|
149
|
+
|
150
|
+
Product.hydra_attribute_ids.should =~ [one.id, two.id, three.id]
|
151
|
+
end
|
152
|
+
|
153
|
+
it 'should cache result' do
|
154
|
+
Product.should_receive(:unmemoized_hydra_attribute_ids).once
|
155
|
+
2.times { Product.hydra_attribute_ids }
|
156
|
+
end
|
157
|
+
|
158
|
+
it 'should reset method cache after creating hydra attribute' do
|
159
|
+
hydra_attributes = Product.hydra_attributes
|
160
|
+
Product.should_receive(:unmemoized_hydra_attribute_ids).twice
|
161
|
+
|
162
|
+
Product.hydra_attribute_ids
|
163
|
+
hydra_attributes.create(name: 'one', backend_type: 'string')
|
164
|
+
Product.hydra_attribute_ids
|
165
|
+
end
|
166
|
+
|
167
|
+
it 'should reset method cache after updating hydra attribute' do
|
168
|
+
hydra_attribute = Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
169
|
+
Product.should_receive(:unmemoized_hydra_attribute_ids).twice
|
170
|
+
|
171
|
+
Product.hydra_attribute_ids
|
172
|
+
hydra_attribute.update_attributes(name: 'two')
|
173
|
+
Product.hydra_attribute_ids
|
174
|
+
end
|
175
|
+
|
176
|
+
it 'should reset method cache after removing hydra attribute' do
|
177
|
+
hydra_attribute = Product.hydra_attributes.create(name: 'once', backend_type: 'string')
|
178
|
+
Product.should_receive(:unmemoized_hydra_attribute_ids).twice
|
179
|
+
|
180
|
+
Product.hydra_attribute_ids
|
181
|
+
hydra_attribute.destroy
|
182
|
+
Product.hydra_attribute_ids
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
describe '.hydra_attribute_names' do
|
187
|
+
it 'should return names' do
|
188
|
+
Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
189
|
+
Product.hydra_attributes.create(name: 'two', backend_type: 'string')
|
190
|
+
Product.hydra_attributes.create(name: 'three', backend_type: 'integer')
|
191
|
+
|
192
|
+
Product.hydra_attribute_names.should =~ %w(one two three)
|
193
|
+
end
|
194
|
+
|
195
|
+
it 'should cache result' do
|
196
|
+
Product.should_receive(:unmemoized_hydra_attribute_names).once
|
197
|
+
2.times { Product.hydra_attribute_names }
|
198
|
+
end
|
199
|
+
|
200
|
+
it 'should reset method cache after creating hydra attribute' do
|
201
|
+
hydra_attributes = Product.hydra_attributes
|
202
|
+
Product.should_receive(:unmemoized_hydra_attribute_names).twice
|
203
|
+
|
204
|
+
Product.hydra_attribute_names
|
205
|
+
hydra_attributes.create(name: 'one', backend_type: 'string')
|
206
|
+
Product.hydra_attribute_names
|
207
|
+
end
|
208
|
+
|
209
|
+
it 'should reset method cache after updating hydra attribute' do
|
210
|
+
hydra_attribute = Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
211
|
+
Product.should_receive(:unmemoized_hydra_attribute_names).twice
|
212
|
+
|
213
|
+
Product.hydra_attribute_names
|
214
|
+
hydra_attribute.update_attributes(name: 'two')
|
215
|
+
Product.hydra_attribute_names
|
216
|
+
end
|
217
|
+
|
218
|
+
it 'should reset method cache after removing hydra attribute' do
|
219
|
+
hydra_attribute = Product.hydra_attributes.create(name: 'once', backend_type: 'string')
|
220
|
+
Product.should_receive(:unmemoized_hydra_attribute_names).twice
|
221
|
+
|
222
|
+
Product.hydra_attribute_names
|
223
|
+
hydra_attribute.destroy
|
224
|
+
Product.hydra_attribute_names
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
describe '.hydra_attributes_by_backend_type' do
|
229
|
+
it 'should group attributes by backend type' do
|
230
|
+
one = Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
231
|
+
two = Product.hydra_attributes.create(name: 'two', backend_type: 'string')
|
232
|
+
three = Product.hydra_attributes.create(name: 'three', backend_type: 'integer')
|
233
|
+
four = Product.hydra_attributes.create(name: 'four', backend_type: 'float')
|
234
|
+
|
235
|
+
attributes = Product.hydra_attributes_by_backend_type
|
236
|
+
attributes['string'].should =~ [one, two]
|
237
|
+
attributes['integer'].should == [three]
|
238
|
+
attributes['float'].should == [four]
|
239
|
+
end
|
240
|
+
|
241
|
+
it 'should return blank hash if there are not any attributes' do
|
242
|
+
Product.hydra_attributes_by_backend_type.should == {}
|
243
|
+
end
|
244
|
+
|
245
|
+
it 'should cache result' do
|
246
|
+
Product.should_receive(:unmemoized_hydra_attributes_by_backend_type).once
|
247
|
+
2.times { Product.hydra_attributes_by_backend_type }
|
248
|
+
end
|
249
|
+
|
250
|
+
it 'should reset method cache after creating hydra attribute' do
|
251
|
+
Product.should_receive(:unmemoized_hydra_attributes_by_backend_type).twice
|
252
|
+
|
253
|
+
Product.hydra_attributes_by_backend_type
|
254
|
+
Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
255
|
+
Product.hydra_attributes_by_backend_type
|
256
|
+
end
|
257
|
+
|
258
|
+
it 'should reset method cache after updating hydra attribute' do
|
259
|
+
one = Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
260
|
+
Product.should_receive(:unmemoized_hydra_attributes_by_backend_type).twice
|
261
|
+
|
262
|
+
Product.hydra_attributes_by_backend_type
|
263
|
+
one.update_attributes(name: 'two')
|
264
|
+
Product.hydra_attributes_by_backend_type
|
265
|
+
end
|
266
|
+
|
267
|
+
it 'should reset method cache after removing hydra attribute' do
|
268
|
+
one = Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
269
|
+
Product.should_receive(:unmemoized_hydra_attributes_by_backend_type).twice
|
270
|
+
|
271
|
+
Product.hydra_attributes_by_backend_type
|
272
|
+
one.destroy
|
273
|
+
Product.hydra_attributes_by_backend_type
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
describe '.hydra_attribute_ids_by_backend_type' do
|
278
|
+
it 'should group attribute ids by backend type' do
|
279
|
+
one = Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
280
|
+
two = Product.hydra_attributes.create(name: 'two', backend_type: 'string')
|
281
|
+
three = Product.hydra_attributes.create(name: 'three', backend_type: 'integer')
|
282
|
+
four = Product.hydra_attributes.create(name: 'four', backend_type: 'float')
|
283
|
+
|
284
|
+
attributes = Product.hydra_attribute_ids_by_backend_type
|
285
|
+
attributes['string'].should =~ [one.id, two.id]
|
286
|
+
attributes['integer'].should == [three.id]
|
287
|
+
attributes['float'].should == [four.id]
|
288
|
+
end
|
289
|
+
|
290
|
+
it 'should return blank hash if there are not any attributes' do
|
291
|
+
Product.hydra_attribute_ids_by_backend_type.should == {}
|
292
|
+
end
|
293
|
+
|
294
|
+
it 'should cache result' do
|
295
|
+
Product.should_receive(:unmemoized_hydra_attribute_ids_by_backend_type).once
|
296
|
+
2.times { Product.hydra_attribute_ids_by_backend_type }
|
297
|
+
end
|
298
|
+
|
299
|
+
it 'should reset method cache after creating hydra attribute' do
|
300
|
+
Product.should_receive(:unmemoized_hydra_attribute_ids_by_backend_type).twice
|
301
|
+
|
302
|
+
Product.hydra_attribute_ids_by_backend_type
|
303
|
+
Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
304
|
+
Product.hydra_attribute_ids_by_backend_type
|
305
|
+
end
|
306
|
+
|
307
|
+
it 'should reset method cache after updating hydra attribute' do
|
308
|
+
hydra_attribute = Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
309
|
+
Product.should_receive(:unmemoized_hydra_attribute_ids_by_backend_type).twice
|
310
|
+
|
311
|
+
Product.hydra_attribute_ids_by_backend_type
|
312
|
+
hydra_attribute.update_attributes(name: 'two')
|
313
|
+
Product.hydra_attribute_ids_by_backend_type
|
314
|
+
end
|
315
|
+
|
316
|
+
it 'should reset method cache after removing hydra attribute' do
|
317
|
+
hydra_attribute = Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
318
|
+
Product.should_receive(:unmemoized_hydra_attribute_ids_by_backend_type).twice
|
319
|
+
|
320
|
+
Product.hydra_attribute_ids_by_backend_type
|
321
|
+
hydra_attribute.destroy
|
322
|
+
Product.hydra_attribute_ids_by_backend_type
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
326
|
+
describe '.hydra_attribute_names_by_backend_type' do
|
327
|
+
it 'should group attribute names by backend type' do
|
328
|
+
one = Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
329
|
+
two = Product.hydra_attributes.create(name: 'two', backend_type: 'string')
|
330
|
+
three = Product.hydra_attributes.create(name: 'three', backend_type: 'integer')
|
331
|
+
four = Product.hydra_attributes.create(name: 'four', backend_type: 'float')
|
332
|
+
|
333
|
+
attributes = Product.hydra_attribute_names_by_backend_type
|
334
|
+
attributes['string'].should =~ [one.name, two.name]
|
335
|
+
attributes['integer'].should == [three.name]
|
336
|
+
attributes['float'].should == [four.name]
|
337
|
+
end
|
338
|
+
|
339
|
+
it 'should return blank hash if there are not any attributes' do
|
340
|
+
Product.hydra_attribute_names_by_backend_type.should == {}
|
341
|
+
end
|
342
|
+
|
343
|
+
it 'should cache result' do
|
344
|
+
Product.should_receive(:unmemoized_hydra_attribute_names_by_backend_type).once
|
345
|
+
2.times { Product.hydra_attribute_names_by_backend_type }
|
346
|
+
end
|
347
|
+
|
348
|
+
it 'should reset method cache after creating hydra attribute' do
|
349
|
+
Product.should_receive(:unmemoized_hydra_attribute_names_by_backend_type).twice
|
350
|
+
|
351
|
+
Product.hydra_attribute_names_by_backend_type
|
352
|
+
Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
353
|
+
Product.hydra_attribute_names_by_backend_type
|
354
|
+
end
|
355
|
+
|
356
|
+
it 'should reset method cache after updating hydra attribute' do
|
357
|
+
hydra_attribute = Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
358
|
+
Product.should_receive(:unmemoized_hydra_attribute_names_by_backend_type).twice
|
359
|
+
|
360
|
+
Product.hydra_attribute_names_by_backend_type
|
361
|
+
hydra_attribute.update_attributes(name: 'two')
|
362
|
+
Product.hydra_attribute_names_by_backend_type
|
363
|
+
end
|
364
|
+
|
365
|
+
it 'should reset method cache after removing hydra attribute' do
|
366
|
+
hydra_attribute = Product.hydra_attributes.create(name: 'one', backend_type: 'string')
|
367
|
+
Product.should_receive(:unmemoized_hydra_attribute_names_by_backend_type).twice
|
368
|
+
|
369
|
+
Product.hydra_attribute_names_by_backend_type
|
370
|
+
hydra_attribute.destroy
|
371
|
+
Product.hydra_attribute_names_by_backend_type
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
375
|
+
describe '.hydra_attributes_for_backend_type' do
|
376
|
+
it 'should return hydra attributes for specific backend type' do
|
377
|
+
a1 = Product.hydra_attributes.create(name: 'a1', backend_type: 'string')
|
378
|
+
a2 = Product.hydra_attributes.create(name: 'a2', backend_type: 'string')
|
379
|
+
a3 = Product.hydra_attributes.create(name: 'a3', backend_type: 'integer')
|
380
|
+
a4 = Product.hydra_attributes.create(name: 'a4', backend_type: 'integer')
|
381
|
+
|
382
|
+
Product.hydra_attributes_for_backend_type('string').should =~ [a1, a2]
|
383
|
+
Product.hydra_attributes_for_backend_type('integer').should =~ [a3, a4]
|
384
|
+
end
|
385
|
+
|
386
|
+
it 'should return blank array if there are not any hydra attributes' do
|
387
|
+
Product.hydra_attributes_for_backend_type('string').should == []
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
describe '.hydra_attribute_ids_for_backend_type' do
|
392
|
+
it 'should return hydra attribute ids for specific backend type' do
|
393
|
+
a1 = Product.hydra_attributes.create(name: 'a1', backend_type: 'string')
|
394
|
+
a2 = Product.hydra_attributes.create(name: 'a2', backend_type: 'string')
|
395
|
+
a3 = Product.hydra_attributes.create(name: 'a3', backend_type: 'integer')
|
396
|
+
a4 = Product.hydra_attributes.create(name: 'a4', backend_type: 'integer')
|
397
|
+
|
398
|
+
Product.hydra_attribute_ids_for_backend_type('string').should =~ [a1.id, a2.id]
|
399
|
+
Product.hydra_attribute_ids_for_backend_type('integer').should =~ [a3.id, a4.id]
|
400
|
+
end
|
401
|
+
|
402
|
+
it 'should return blank array if there are not any hydra attributes' do
|
403
|
+
Product.hydra_attribute_ids_for_backend_type('string').should == []
|
404
|
+
end
|
405
|
+
end
|
406
|
+
|
407
|
+
describe '.hydra_attribute_names_for_backend_type' do
|
408
|
+
it 'should return hydra attribute names for specific backend type' do
|
409
|
+
a1 = Product.hydra_attributes.create(name: 'a1', backend_type: 'string')
|
410
|
+
a2 = Product.hydra_attributes.create(name: 'a2', backend_type: 'string')
|
411
|
+
a3 = Product.hydra_attributes.create(name: 'a3', backend_type: 'integer')
|
412
|
+
a4 = Product.hydra_attributes.create(name: 'a4', backend_type: 'integer')
|
413
|
+
|
414
|
+
Product.hydra_attribute_names_for_backend_type('string').should =~ [a1.name, a2.name]
|
415
|
+
Product.hydra_attribute_names_for_backend_type('integer').should =~ [a3.name, a4.name]
|
416
|
+
end
|
417
|
+
|
418
|
+
it 'should return blank array if there are not any hydra attributes' do
|
419
|
+
Product.hydra_attribute_names_for_backend_type('string').should == []
|
420
|
+
end
|
421
|
+
end
|
422
|
+
|
423
|
+
describe '.clear_hydra_attribute_cache!' do
|
424
|
+
it 'should reset cache for all methods' do
|
425
|
+
# Force clear cache because some methods
|
426
|
+
# can be already cached during initialization hydra_attribute gem
|
427
|
+
Product.clear_hydra_attribute_cache!
|
428
|
+
|
429
|
+
[
|
430
|
+
:unmemoized_hydra_attributes,
|
431
|
+
:unmemoized_hydra_attribute,
|
432
|
+
:unmemoized_hydra_attribute_backend_types,
|
433
|
+
:unmemoized_hydra_attribute_ids,
|
434
|
+
:unmemoized_hydra_attribute_names,
|
435
|
+
:unmemoized_hydra_attributes_by_backend_type,
|
436
|
+
:unmemoized_hydra_attribute_ids_by_backend_type,
|
437
|
+
:unmemoized_hydra_attribute_names_by_backend_type
|
438
|
+
].each do |symbol|
|
439
|
+
Product.should_receive(symbol).twice.and_return([])
|
440
|
+
end
|
441
|
+
|
442
|
+
block = lambda do
|
443
|
+
Product.hydra_attributes
|
444
|
+
Product.hydra_attribute(1)
|
445
|
+
Product.hydra_attribute_backend_types
|
446
|
+
Product.hydra_attribute_ids
|
447
|
+
Product.hydra_attribute_names
|
448
|
+
Product.hydra_attributes_by_backend_type
|
449
|
+
Product.hydra_attribute_ids_by_backend_type
|
450
|
+
Product.hydra_attribute_names_by_backend_type
|
451
|
+
end
|
452
|
+
|
453
|
+
block.call
|
454
|
+
Product.clear_hydra_attribute_cache!
|
455
|
+
block.call
|
456
|
+
end
|
457
|
+
end
|
458
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe HydraAttribute::HydraAttribute do
|
4
|
+
describe '#hydra_sets=' do
|
5
|
+
let!(:hydra_attribute) { Product.hydra_attributes.create(name: 'one', backend_type: 'string') }
|
6
|
+
|
7
|
+
it 'should clear entity cache if assign hydra sets collection' do
|
8
|
+
hydra_set = Product.hydra_sets.create(name: 'Default')
|
9
|
+
Product.should_receive(:clear_hydra_method_cache!)
|
10
|
+
hydra_attribute.hydra_sets = [hydra_set]
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should clear entity cache if assign blank collection' do
|
14
|
+
hydra_attribute.hydra_sets.create(name: 'Default')
|
15
|
+
Product.should_receive(:clear_hydra_method_cache!)
|
16
|
+
hydra_attribute.hydra_sets = []
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|