Minimalistic Service Class Interface for Ruby
Serviz
provides a minimal interface to unify and homogenize your Service or Command objects in your Ruby code.
Add this line to your application's Gemfile:
gem 'serviz'
And then execute:
> bundle install
Or install it yourself as:
> gem install serviz
- Your class should inherit from
Serviz::Base
class - Your class should implement
#call
method:- Add results via
self.result=
- Add errors via
self.errors=
- Add results via
Example:
class RegisterUser < Serviz::Base
def initialize(user)
@user = user
end
def call
if @user.valid?
@user.register_and_notify
self.result = @user
else
self.errors << 'Invalid user'
end
end
end
operation = RegisterUser.call(user)
if operation.success?
puts "[SUCCESS] #{operation.result.name} registered!"
else
puts "[ERROR] #{operation.errors.join(', ')}"
end
You can also use the #failure?
method:
if operation.failure?
puts "Error! Please try again ..."
return
end
Any kind of feedback, bug report or enhancement are really welcome!
To contribute, just fork the repo, hack on it and send a pull request. Don't forget to add specs for behaviour changes and run the test suite:
> bundle exec rspec
Copyright (c) Marc Anguera. Serviz
is released under the MIT License.