Rung
Rung is service object/business operation/Railway DSL.
This is a lightweight, independent alternative to Trailblazer Operation and dry-transaction.
Installation
Add this line to your application’s Gemfile:
gem 'rung'
And then execute:
$ bundle
Or install it yourself as:
$ gem install rung
Example Usage
Example:
class CreateOrder < Rung::Operation
step do |state|
state[:order_id] = "order-#{SecureRandom.uuid }"
end
step ValidateMagazineState
step :log_start
step WithBenchmark do
step CreateTemporaryOrder
step :place_order
end
step :log_success
failure :log_failure
def log_start(state)
state[:logger].log("Creating order #{state[:order_id]}")
end
def log_success(state)
state[:logger].log("Order #{state[:order_id]} created successfully")
end
def log_failure(state)
state[:logger].log("Order #{state[:order_id]} not created")
end
def place_order(state)
status = OrdersRepository.create(state[:order_id])
# Step return value is important.
# If step returns falsy value then the operation is considered as a failure.
status == :success
end
end
result = CreateOrder.call(logger: Rails.logger)
if result.success?
print "Created order #{result[:order_id]}"
end
Docs
Docs: https://gogiel.github.io/rung/ Generated from Cucumber specifications using Cukedoctor.
YARD docs: https://www.rubydoc.info/github/gogiel/rung.
Cucumber docs can be generated locally using $ rake docker_generate_docs
. It requires Docker.
Development
After checking out the repo, run bundle
to install dependencies. Then,
run rake
to run the tests. You can also run bin/console
for an
interactive prompt that will allow you to experiment.
To install this 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 https://github.com/gogiel/rung.
License
The gem is available as open source under the terms of the MIT License.