jsonapi-suite / jsonapi_compliable

MIT License
20 stars 35 forks source link

Teach `jsonapi:resource` generator to respect namespaced models and controllers #141

Open alsemyonov opened 5 years ago

alsemyonov commented 5 years ago

Fixes the issue with namespaced models.

rails generate jsonapi:resource Blog::Post

Before

  1. generates app/serializables/blog/serializable_post.rb file with SerializableBlog::Post class inside (💣 breaks autoloading).
  2. generated controller is app/controllers/blog/posts_controller.rb, but config/routes.rb includes:
    resources :blog/posts

    (💣 and breaks everything with Syntax Error)

  3. Factory generated by rails generate factory_bot:model Blog::Post is called :blog_post, but API request specs try to create(:post) (💣 Factory not registered! )
  4. API request specs files put into spec/api/v1/posts/blog/{create,destroy,index,show,update}_spec.rb (← posts/blog? what is that?)
  5. API request specs try to send jsonapi_{get,delete,post,put} '/api/v1/posts' (💣 which nothing can handle)

After:

  1. generates app/serializables/blog/serializable_post.rb file with Blog::SerializablePost class inside.
  2. generated controller is app/controllers/blog/posts_controller.rb, and config/routes.rb includes
    namespace :blog do
      resources :posts
    end
  3. Factory generated by rails generate factory_bot:model Blog::Post is called :blog_post, and API requests specs try to create(:blog_post)
  4. API request specs files put into spec/api/v1/blog/posts/{create,destroy,index,show,update}_spec.rb (← blog/posts, according to generated controller)
  5. API request specs try to send jsonapi_{get,delete,post,put} '/api/v1/blog/posts' (which is handled by generated Blog::PostsController