Closed nhinze closed 8 years ago
Hey @nhinze, I did some work on namespacing against ASM v0.10.0+ in this pull. The changes in the pull should address your issue.
Grape-ASM tries to send a namespace key to ActiveModel::Serializer.serializer_for
here, but support for that key is no longer supported by ASM as described here. So, grape-ASM has to handle serializer lookup by version explicitly.
@drn, thanks. I'll wait until its merged into master to try it out.
In my signup.rb above, I use "resource", how do I namespace it? Just namespace right around the "get"? I was trying to get it to work with ams .9.5, but it's giving me the same error.
Namespacing is based off of the version
option, which is v1
in your example in signup.rb. Looking at it, it looks like the surrounding Mobile
module might cause issues as namespacing is being based off the version option exclusively. However, constant resolution might handle it fine if you don't have another top-level namespace with another V1::SignupsSerializer somewhere in it.
I'll get that v0.10 support pull merged onto master today. If it doesn't solve your issue, let me know and we'll work on adding some specs and a fix for your use case.
@nhinze can you try your project against master?
Using grape-active_model_serializers 1.4.0 from https://github.com/ruby-grape/grape-active_model_serializers.git (at master@a48d57c)
I still get this error:
The API structure above is inspired from http://codetunes.com/2014/introduction-to-building-apis-with-grape/ . I also named my first API "Mobile", because this one will interact with my mobile app. There will be a separate API for another backend.
This is my first time building an API and maybe my setup is not quite correct. I'll gladly take any recommendations.
@nhinze would you be able to give me access to the project you're experiencing this error with? If so, I can dig into the error. If not, would you be able to write a spec that covers this issue?
Re: the Mobile
name, if there won't be another api in the rails application, you can get rid of the mobile
namespace. the folders within the api namespace should be used for versioning as described in the README where an file hierarchy is displayed.
The "mobile" api used to be called " api" and the folder structure was /app/api/api/v1 . I plan to have a second API for another service. The api would not work in /app/api/v1.
I have the project on GitLab. I'll PM you.
@nhinze - you can try https://github.com/ruby-grape/grape-active_model_serializers/pull/58 out. I tested it against your project. Thanks for giving me access to it.
@drn this works well. Thank You!
Great! I'll let you know when a fix is merged after I get back from vacation on Thursday. I'll close this issue then
@nhinze https://github.com/ruby-grape/grape-active_model_serializers/pull/60 has been merged which includes a fix for your issue, so you can point your project to master until v1.5.0 is released
@drn tried to use the master branch, but it doesn't work. I get the same error as before. The namespace-inferred-serializer branch works fine.
Hey @nhinze - I forgot to include handling for collections in that last pull. https://github.com/ruby-grape/grape-active_model_serializers/pull/61 should fix it after it's merged in. I'll let you know as soon as that's merged in and will do a v1.5.0 after you confirm it's working
Okay @nhinze - https://github.com/ruby-grape/grape-active_model_serializers/pull/61 is merged. I tested it successfully against your project. Note that you'll need to add the Mobile::
namespace to V2::SignupSerializer
-> Mobile::V2::SignupSerializer
for it to work.
Thanks. It works now.
Perfect, thanks for following up
I'm building an API with:
My JSON serializers work well until I try to introduce API Versioning as described here: https://github.com/ruby-grape/grape-active_model_serializers
Unversioned serializer:
Versioned serializer:
The error message is:
API Organization:
base.rb:
v1/root.rb:
api/v1/signup.rb:
Any ideas?