Helps to refactor complex data processing
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib
spec
.gitignore
Gemfile
LICENSE.txt
README.md
Rakefile
chain_flow.gemspec

README.md

ChainFlow

Helps to refactor data processing with functions composition.

Installation

Add this line to your application's Gemfile:

gem chain_flow

Or install it yourself as:

$ gem install chain_flow

Usage

Interface

Including ChainFlow adds two methods: flow and chain. flow accepts initial data as an argument and all the processing functions go in a block.

chain receives initial data in a block and returns and object that can be further chained with processing functions. Call fetch to obtain the final result.

Processing functions should accept at least one parameter - the data. When calling these functions inside flow or chaining them with chain this first parameter should be ommitted.

Example

require 'chain_flow'

class Worker
  include ChainFlow

  def flow_process
    flow(Array.new) do
      add_answer
      multiple_by(3)
    end
  end

  def chain_process
    chain { Array.new }.add_answer.multiple_by(3).fetch
  end

  private

  # first processing function
  def add_answer(data)
    data << 42
  end

  # second processing function
  def multiple_by(data, count)
    data * count
  end
end

Worker.new.flow_process  #=> [42, 42, 42]
Worker.new.chain_process #=> [42, 42, 42]

How does it work?

Notice that both flow and chain capture the caller context with closure. Calls to processing fuctions with ommitted first data parameter are intercepted with method_missing and called in captured caller context instead with initial data pipelined through them one-by-one.