class Pyper::Pipeline

Attributes

pipes[R]

Public Class Methods

create(&block) click to toggle source

Provides an interface for creating a pipeline. The provided block will be called in the context of a newly-created pipeline, to which pipes can be added using add. @return [Pyper::Pipeline] The created pipeline.

# File lib/pyper/pipeline.rb, line 13
def create(&block)
  new.tap do |pipeline|
    if block_given?
      original_self = eval('self', block.binding)
      pipeline.instance_variable_set(:@original_self, original_self)
      pipeline.instance_eval(&block)
      pipeline.remove_instance_variable(:@original_self)
    end
  end
end
new(pipes = []) click to toggle source
# File lib/pyper/pipeline.rb, line 27
def initialize(pipes = [])
  @pipes = pipes
end

Public Instance Methods

<<(pipe) click to toggle source

@param pipe [#pipe|#call] A pipe to append to the pipeline

# File lib/pyper/pipeline.rb, line 32
def <<(pipe)
  pipes << pipe
  self
end
Also aliased as: add
add(pipe)
Alias for: <<
method_missing(sym, *args, &block) click to toggle source
Calls superclass method
# File lib/pyper/pipeline.rb, line 55
def method_missing(sym, *args, &block)
  @original_self ? @original_self.send(sym, *args, &block) : super
end
push(input) click to toggle source

Insert something into the pipeline to be processed @param input [Object] The original input data to enter the pipeline. This may be mutated by each pipe in the pipeline. @return [PipeStatus] the pipe status, containing both the value and a status hash.

# File lib/pyper/pipeline.rb, line 42
def push(input)
  status = {}
  value = pipes.inject(input) do |attributes, p|
    if p.respond_to?(:call)
      p.call(attributes, status)
    else
      p.pipe(attributes, status)
    end
  end

  PipeStatus.new(value, status)
end
respond_to_missing?(sym, include_all = false) click to toggle source
Calls superclass method
# File lib/pyper/pipeline.rb, line 59
def respond_to_missing?(sym, include_all = false)
  @original_self ? @original_self.respond_to?(sym, include_all) : super
end