Sha256: 436d1cb428f33c441e0608a154a21116a544dfb9fa568593812438ce4ba59793
Contents?: true
Size: 1.78 KB
Versions: 1
Compression:
Stored size: 1.78 KB
Contents
# Operatic [](https://github.com/benpickles/operatic) ## Installation Add Operatic to your application's Gemfile and run `bundle install`. ```ruby gem 'operatic' ``` ## Usage An Operatic class encapsulates an operation and communicates the status of the operation via its result object. As well as being either a `#success?` or a `#failure?` further data can be attached via `#success!`, `#failure!` or convenience accessors. ```ruby class SayHello include Operatic # Readers for attributes passed via `.call`. attr_reader :name # Declare convenience accessors on the result. result :message def call # Exit the method and mark the result as a failure. return failure! unless name # Mark the result as a success and attach further data. success!(message: "Hello #{name}") end end result = SayHello.call(name: 'Dave') result.success? # => true result.message # => "Hello Dave" result.to_hash # => {:message=>"Hello Dave"} result = SayHello.call result.failure? # => true result.success? # => false result.message # => nil result.to_hash # => {} ``` A Rails controller might use Operatic like this: ```ruby class HellosController < ApplicationController def create result = SayHello.call(name: params[:name]) if result.success? render plain: result.message else render :new end end end ``` ## License The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT). ## Code of Conduct Everyone interacting in the Operatic project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/benpickles/operatic/blob/master/CODE_OF_CONDUCT.md).
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
operatic-0.2.0 | README.md |