Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/markets/serviz
📐 Command object Interface for Ruby
https://github.com/markets/serviz
command-pattern minimal ruby service-object
Last synced: 10 days ago
JSON representation
📐 Command object Interface for Ruby
- Host: GitHub
- URL: https://github.com/markets/serviz
- Owner: markets
- License: mit
- Created: 2019-10-04T13:19:42.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2024-05-05T17:01:23.000Z (8 months ago)
- Last Synced: 2024-11-25T16:23:48.774Z (27 days ago)
- Topics: command-pattern, minimal, ruby, service-object
- Language: Ruby
- Homepage: https://rubygems.org/gems/serviz
- Size: 23.4 KB
- Stars: 29
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Serviz
[![Gem](https://img.shields.io/gem/v/serviz.svg?style=flat-square)](https://rubygems.org/gems/serviz)
[![Build Status](https://github.com/markets/serviz/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/markets/serviz/actions)
[![Maintainability](https://api.codeclimate.com/v1/badges/871bdafe6ca410b4b64a/maintainability)](https://codeclimate.com/github/markets/serviz/maintainability)> Minimalistic Service Class Interface for Ruby
`Serviz` provides a minimal interface to unify and homogenize your *Service* or *Command* objects in your Ruby code.
## Installation
Add this line to your application's Gemfile:
```ruby
gem 'serviz'
```And then execute:
> bundle install
Or install it yourself as:
> gem install serviz
## Usage
- 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<<`
- Check the status via the provided `#success?` or `#failure?` methods### Example
First, you should create a _Serviz_ class:
```ruby
class RegisterUser < Serviz::Base
def initialize(user)
@user = user
enddef call
if @user.valid?
@user.register_and_notifyself.result = @user
else
self.errors << 'Invalid user'
end
end
end
```Now, you can run it by using the `call` method:
```ruby
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?`):
```ruby
if operation.failure?
puts "Error! Please try again ..."
return
end
```### Block syntax
You may like to use the _block_ syntax:
```ruby
RegisterUser.call(user) do |operation|
puts "Success!" if operation.ok?
end
```## Development
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
## License
Copyright (c) Marc Anguera. `Serviz` is released under the [MIT](LICENSE) License.