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.
