The dead simple services object oriented layer for Ruby applications to give robustness and cohesion back to your code.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Build Status


Nifty Services comes to solve your Ruby applications(including but not limited to Rails, Grape, Sinatra, and plain Ruby) code mess with simplicity in mind!

NiftyServices provides a very nifty, simple & clear API to organize and reuse your application domain logic in plain Ruby Services Objects turning your codebase in a very extensible, standardized and reusable components.

Most important: You and your team win what I consider the best benefit when using Nifty Services: Easily and scalable maintained code. Believe me, you'll fall in 😍 with this small piece of code, keep reading!

This gem was designed and conventioned to be used specially with Web API applications, but this is just a convention, you can use it even with shoes (for desktop apps) applications if you want, for example.

πŸ“– I know, this README is very huge

As you can see, this README needs some time to be full read, but is very difficulty to explain all things, concepts and philosophy of this gem without writing a lot, we can't escape this :(

But remember one thing: This is a tecnical documentation, not a blog post, I'm pretty sure you can take about 30 minutes + some cups of β˜•οΈ to better understand all NiftyServices can do for you and your project. Good reading, and if you have some question, please let me know.

Update: Now the documentation was separated in Wiki format. So it's a lot easier for reading.


Below, some very importants things about conventions for this cute πŸ’Ž :)

βœ… Single responsibility

Each service class is responsible for perform exactly one single task, say goodbye for code (most important: logic) duplication in your code. Beside this, one of the aim of NiftyServices is to provide a very standardized code architecture, allowing developers to quickly develop and implement new features keeping the application codebase organized and stable.

πŸ”¨ Common and single-run execution method

Each service object must respond to #execute instance method, which is allowed to be called just one time per instance. #execute method is responsible to perform code validation(parameter validation, access level control), execution(send mail, register users) and fire callbacks so you can execute hooks actions after/before success or execution fail.

πŸ“¦ Rich Service Objects

When dealing with services objects, you will get a very rich objects to work with, forgot about getting only true or false return values, one of the main purpose of objects it's to keep your code domain logic accessible and reusable, so your application can really take the best approach when responding to actions.

πŸ”’ Security - Access Control Level

Think and implement security rules from the first minutes of live in your applications! NiftyServices strongly rely on Access Control Level(ACL) to perform actions, in other words, you will only allow authorized users to read, create, update or delete records in your database!

Now you know the basic concepts and philosophy of NiftyServices, lets start working with this candy library?

Table of Contents


Add this line to your application's Gemfile:

gem 'nifty_services', '~> 0.0.5'

And then execute:

$ bundle

Or install it yourself as:

$ gem install nifty_services

πŸ“† Roadmap

  • ◽️ Create CLI Generators
  • ◽️ Beter documentation for BaseActionService
  • ◽️ Write Sample Applications
  • ◽️ Write better tests for all Crud Services
  • ◽️ Write better tests for BaseActionServices
  • ◽️ Write tests for Configuration
  • ◽️ Write tests for Callbacks

πŸ’» Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake rspec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem(πŸ’Ž) onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to

πŸ‘ Contributing

Bug reports and pull requests are welcome on GitHub at This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

πŸ“ License

The gem is available as open source under the terms of the MIT License.