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