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
- Your class should implement a
#call
method - Return the result via
self.result=
- Add errors via
self.errors<<
Example:
First, you should create a Serviz class:
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
Now, you can run it by using the call
method:
operation = RegisterUser.call(user)
if operation.success?
user = operation.result
puts "Success! #{user.name} registered!"
else
puts "Error! #{operation.error_messages}"
end
As you can see in the example above, you can use the success?
method to check if your operation succeed. You can also use the ok?
alias.
In case you want to check if the run failed, you can use the failure?
method (or the alias error?
):
if operation.failure?
puts "Error! Please try again ..."
return
end
You may want to use the block syntax:
RegisterUser.call(user) do |operation|
puts "Success!" if operation.ok?
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.