DEV Community

Iago Silva
Iago Silva

Posted on

Developing a GEM for use of Service Objects

Service objects helps to keep your controllers and models slim and readable

Simple example

  • Before
# app/controllers/post_releases_controller.rb class PostReleasesController < ApplicationController # [...] def update @post.prepare_to_release # <-- if @post.update(released_at: Date.current) # <-- redirect_to root_path else render :edit end end # [...] end 
  • After
# app/controllers/post_releases_controller.rb class PostReleasesController < ApplicationController # [...] def update if ReleasePost.call(post: @post) # <-- redirect_to root_path else render :edit end end # [...] end 
# app/services/release_post.rb class ReleasePost < ServiceIt::Base def perform @post.prepare_to_release @post.update(released_at: Date.current) end end 

Feedbacks are most welcome!

Here's its Github: https://github.com/iago-silva/service_it

Top comments (0)