NiftyServices
Introduction
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.
Conventions
Below, some very importants things about conventions for this cute 💎 :)
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
- Dafuck is this gem
- Conventions
- Single Responsability
- Method execution
- Rich Service Objects
- Security & Access Level Control
- Installation
- Usage
- Services Objects API
- CRUD Services
- I18n Setup
- Callbacks
- Configuration
- Web Frameworks integration
- Base Services Class Markups
- CLI Generators
- Roadmap
- Development
- Contributing
- License - MIT
Installation
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
- ◽ 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(: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 rubygems.org.
👍 Contributing
Bug reports and pull requests are welcome on GitHub at http://github.com/fidelisrafael/nifty_services. 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.