I'm working on dm-rest-adapter so that we can get it to a point where our 
JSON-based commerce system will work with it.  Issues were:

  * [FIXED] The current version is XML-only; our API is JSON
  * [FIXED] The current version always adds an extension; our URLs are 
extensionless
  * [WIP] The current version assumes everything is a top-level resource; many 
of our resources are nested
  * [FIXED] We consider ObjectNotFoundError to be the logical outcome of 
calling #get!, or nil with calling #get on resources that produce a 404; the 
current adapter raises some undocumented exception type in both cases
  * [TODO] The current version reads :field options when fetching a resource, 
but does not read them when saving a resource!; we use :field, as this is a 
legacy API.

So I set out to update dm-rest-adapter to fit our needs.  It has more or less 
turned into a rewrite due to the amount of work that needed doing.

I have swapped out the home-brewed Connection class to use RestClient instead.  
I have so far fixed a number of issues (without breaking backwards 
compatibility) and I am just now working on support for nested resources.... 
which leads me into my question(s):

I thought for quite a while about what would be the simplest way for a user to 
describe their associations as being nested or not, in a way that is not 
all-or-nothing (as is the case with us), and decided that this was the logical 
approach:

class Post
  include DataMapper::Resource
  
  property :id, Serial
  ....
  has n, :comments, :nested => true
end

So:

post = Post.get!(7)  # => /posts/7.json
comments = post.comments # => # /posts/7/comments.json

First question.  In order to make that work, I had to add a value to the 
OPTIONS set in Relationship, like this:

DataMapper::Associations::Relationship::OPTIONS << :nested

Is this a viable option (I was surprised it wasn't frozen, as many things are), 
or is there a cleaner way to do this?

Second question:

With only the "has n, :comments" side of the relationship defined, the query 
(post.comments) contains this relationship, so I can check for :nested and 
everything works.  But as soon as I define "belongs_to :post" in the Comment 
model, DataMapper gives me that relationship instead (still when using 
post.comments) and thus I'm unable to reliably check if I should be fetching a 
nested resource or just using the top-level URL.  Is there a way to reliably 
get the association from the parent side of the relationship, since that's 
logically where :nested should be set?

If anybody has tried/used the REST adapter and dropped it due to issues that I 
haven't mentioned above, please let me know and I'll try to include fixes for 
them (depending on the complexity).  Dan mentioned using the Accept: header, 
for example, so that has been added, because it required only a minor code 
change.

-- 
You received this message because you are subscribed to the Google Groups 
"DataMapper" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/datamapper?hl=en.

Reply via email to