- From: Christoph Badura <bad@bsd.de>
- Date: Fri, 20 May 2011 00:07:55 +0200
- To: public-rdf-ruby@w3.org
While trying ot use Spira resources as models in Rails 3 I have hit a
snag. Instantiating a Spira::Resource with a has_many property pointing
to another resource from a repository produces objects that are unsuable
for my purposes.
My immediate problem is that obj.has_many_relation.first.some_method
fails to invoke the instance method that is defined by
obj.has_many_relation.first.class instead it ends up going through
promise's method_missing and possibly invoking the wrong method.
Run the following example in irb to see what is happening. While
writing that test case I also discovered that
SomeModel.for('123', :has_many_property => other_model_instance)
messes up the subject of the object recoded in the has_many_property.
Any ideas?
--chris
require 'rubygems'
require 'spira'
EX = RDF::Vocabulary.new 'http://example.com/ns'
class Object
def to_zorch
"boom!"
end
end
class A
include Spira::Resource
base_uri 'http://example.com/a/'
type URI.new 'http://example.com/types#B'
property :foo, :predicate => EX.foo
def to_zorch
subject.to_s
end
end
class B
include Spira::Resource
base_uri 'http://example.com/b/'
type URI.new 'http://example.com/types#B'
property :foo, :predicate => EX.foo
has_many :bar, :predicate => EX.bar, :type => :A
end
Spira.add_repository(:default, RDF::Repository.new)
x = A.for('123', :foo => 'a foo').save!
B.for('456', :foo => 'b foo', :bar => x).save!
a = A.for '123'
a.attributes
b = B.for '456'
b.attributes
ab = b.bar.first
puts 'boom!' if a.subject != ab.subject # XXX @subject wrong
c = B.for '789'
c.foo = 'c foo'
c.bar << x
c.save!
c.attributes
c.bar.first.super
c.bar.first.to_zorch
c.reload
c.bar.first.super
c.bar.first.to_zorch # XXX fails
From: Christoph Badura <bad@k.bsd.de>
To: public-rdf-ruby@w3.org
Cc:
Bcc:
Subject: Spira: method resolution of has_many resources not working
sometimes
Reply-To:
While trying ot use Spira resources as models in Rails 3 I have hit a
snag. Instantiating a Spira::Resource with a has_many property pointing
to another resource from a repository produces objects that are unsuable
for my purposes.
My immediate problem is that obj.has_many_relation.first.some_method fails
to invoke the instance method that is defined by
obj.has_many_relation.first.class instead it ends up going through
promise's method_missing and possibly invoking the wrong method.
Run the following example in irb to see what is happening.
While writing that test case I also discovered that
SomeModel.for('123', :has_many_property => other_model_instance)
messes up the subject of the object recoded in the has_many_property.
Any ideas?
Received on Thursday, 19 May 2011 22:08:21 UTC