Commit 5a1dc11d59128b26b410961dcbac88c3b7be7d1f

Initial Meta#implements implementation has been added [#8 state:resolved]

Commit diff

lib/strokedb/document/meta.rb

 
8888
8989 end
9090
91 def implements(another_meta)
92 values = @args.select{|a| a.is_a?(Hash) }.first
93 values.merge!(another_meta.document.to_raw.delete_if {|k,v| ['name','uuid','version','previous_version','meta'].member?(k) })
94 include(another_meta)
95 self
96 end
97
9198 def +(meta)
9299 if is_a?(Module) && meta.is_a?(Module)
93100 new_meta = Module.new
toggle raw diff

spec/lib/strokedb/document/meta_spec.rb

 
286286 end
287287
288288end
289
290describe "ImplementsSomeName with implements SomeName meta" do
291
292 before(:each) do
293 setup_default_store
294 setup_index
295
296 Object.send!(:remove_const,'SomeName') if defined?(SomeName)
297 SomeName = Meta.new(:some_slot => 'some_value') do
298 def some_name_meta
299 end
300 end
301 Object.send!(:remove_const,'ImplementsSomeName') if defined?(ImplementsSomeName)
302 ImplementsSomeName = Meta.new(:some_another_slot => 'some_another_value') do
303 def implements_some_name_meta
304 end
305 implements SomeName
306 end
307 end
308
309 it "should create a document which is both SomeName and ImplementsSomeName" do
310 doc = ImplementsSomeName.create!.reload
311 doc.should be_a_kind_of(SomeName)
312 doc.should be_a_kind_of(ImplementsSomeName)
313 end
314
315 it "should have SomeName's slots merged in" do
316 ImplementsSomeName.document.slotnames.should include('some_another_slot')
317 ImplementsSomeName.document.some_another_slot.should == "some_another_value"
318 ImplementsSomeName.document.slotnames.should include('some_slot')
319 ImplementsSomeName.document.some_slot.should == "some_value"
320 end
321
322 it "should not share the same uuid with SomeName" do
323 ImplementsSomeName.document.uuid.should_not == SomeName.document.uuid
324 end
325
326 it "should create document that responds both to #some_name_meta and #implements_some_name_meta" do
327 doc = ImplementsSomeName.create!.reload
328 doc.should respond_to(:some_name_meta)
329 doc.should respond_to(:implements_some_name_meta)
330 end
331
332 it "should preserve its name" do
333 ImplementsSomeName.name.should == "ImplementsSomeName"
334 end
335
336
337end
toggle raw diff