An open API service indexing awesome lists of open source software.

https://github.com/rubyrider/clomp

Clomp gem provides a smooth, lightweight, productive and reusable way to build an operation using Railway oriented programing paradigm
https://github.com/rubyrider/clomp

framework-agnostic railway-oriented-programming ruby serviceobject

Last synced: about 1 year ago
JSON representation

Clomp gem provides a smooth, lightweight, productive and reusable way to build an operation using Railway oriented programing paradigm

Awesome Lists containing this project

README

          

# Clomp
[![CircleCI](https://circleci.com/gh/rubyrider/clomp.svg?style=svg)](https://circleci.com/gh/rubyrider/clomp) [![Issues](http://img.shields.io/github/issues/rubyrider/clomp.svg)]( https://github.com/rubyrider/clomp/issues ) [![Gem Version](https://badge.fury.io/rb/clomp.svg)](https://badge.fury.io/rb/clomp) [![MIT license](http://img.shields.io/badge/license-MIT-brightgreen.svg)](http://opensource.org/licenses/MIT) [![Maintainability](https://api.codeclimate.com/v1/badges/a7edc252626bdf40d389/maintainability)](https://codeclimate.com/github/rubyrider/clomp/maintainability) [![Chat](https://img.shields.io/badge/gitter.im-rubyrider/clomp-green.svg)]( https://gitter.im/clomp-ruby/Lobby ) [![Code Triagers Badge](https://www.codetriage.com/rubyrider/clomp/badges/users.svg)](https://www.codetriage.com/rubyrider/clomp)

**Clomp gem provides a smooth, lightweight, productive and reusable way to build an operation using Railway oriented programing paradigm.**
Clomp will give you an easy interface to complete your service operation. You can use it with any framework
or plain ruby object.
## Installation

Add this line to your application's Gemfile:

```ruby
gem 'clomp'
```

And then execute:

$ bundle

Or install it yourself as:

$ gem install clomp

## Usage
Build any service with the track! Add as many tracks as you want.
tracks will be loaded sequentially. You can control success and failure state of any
specific step.

### Example application
You may check the following rails project for basic understanding.
[Clomp Usage Example](https://github.com/rubyrider/clomp-example)

Clomp is completely framework independent agnostic framework. You can use it with any ruby frameworks
and even with your raw ruby code.

Consider the following class:
```ruby
class AnotherOperation < Clomp::Operation
track :track_from_another_operation

def track_from_another_operation(options)
options[:hello_from_another_operation] = true
end
end

class SingingOperation < Clomp::Operation
# this block only executes on failure step!
# pass options to receive the operation states!
add_track :get_lyrics do |options|
# we call this a failure state based block!
options[:do_some_thing] = 10
end

add_track :get_instruments_ready

add_track :start_signing

# We can now share specific step from
# outsider operation
share :track_from_another_operation, from: AnotherOperation # Or 'AnotherOperation'

finally :receive_price #final step, wont execute after this step!

def get_instruments_ready(options, params: , **)
# do anything!
end

def get_lyrics(options, params: , **)
params[:singer_name] = 'James' #mutate
end

def start_signing(options)
puts options[:params]
end

def receive_price(options)
puts "I am honored for this awesome price!"
end
end
```

```ruby
@result = SingingOperation[singer_name: 'Bass Baba']
@result.success? # => true
@result.failure? # => false
```

Trace the steps:
```ruby
@result = SingingOperation[singer_name: 'Bass Baba']
@result.executed_tracks
"first_track:track:success --> track_from_another_operation:track:success --> call_something:track:success"

@result.to_s
"Clomp::Result > Successful: first_track:track:success --> track_from_another_operation:track:success --> call_something:track:success"
```

## Configuration
You can set custom step name(s), custom fail, pass flow configuration globally and operation wise!

```ruby
Clomp::Configuration.setup do |config|
# You can set as many step name as you want
config.custom_step_names =+ [:my_own_step_name]
end
```

## Development

After checking out the repo, run `bin/setup` to install dependencies. 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](https://rubygems.org).

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/rubyrider/clomp. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.

## 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 TheRailway project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/rubyrider/clomp/blob/master/CODE_OF_CONDUCT.md).