class Core::Pipeline::Callable

public

Calls a pipeline on a pipelined object.

Attributes

actions[R]
skipped[R]

Public Class Methods

new(object) click to toggle source
# File lib/core/pipeline/callable.rb, line 16
def initialize(object)
  @object = object
  @mutex = Mutex.new
  @actions = []
  @skipped = []
end

Public Instance Methods

action(*args, before: nil, after: nil, context: nil, &block) click to toggle source
public

Defines a pipeline action.

# File lib/core/pipeline/callable.rb, line 34
def action(*args, before: nil, after: nil, context: nil, &block)
  @actions << Action.build(*args, before: before, after: after, context: context, &block)
end
any?() click to toggle source
public

Returns true if the pipeline will call any actions.

# File lib/core/pipeline/callable.rb, line 28
def any?
  (@actions.map(&:name) - @skipped).any?
end
call(object, ...) click to toggle source
public

Calls the pipeline in context of an object with the given arguments.

# File lib/core/pipeline/callable.rb, line 81
def call(object, ...)
  compile.call(object, ...)
end
exclude(pipeline) click to toggle source
public

Excludes actions from the given pipeline.

# File lib/core/pipeline/callable.rb, line 69
def exclude(pipeline)
  if (pipeline.is_a?(Class) || pipeline.is_a?(Module)) && pipeline.ancestors.include?(Is::Pipeline)
    pipeline.pipeline.actions.each do |action|
      @actions.delete(action)
    end
  else
    raise ArgumentError, "expected a pipeline"
  end
end
include(pipeline) click to toggle source
public

Includes actions from the given pipeline.

# File lib/core/pipeline/callable.rb, line 59
def include(pipeline)
  if (pipeline.is_a?(Class) || pipeline.is_a?(Module)) && pipeline.ancestors.include?(Is::Pipeline)
    @actions.concat(pipeline.pipeline.actions)
  else
    raise ArgumentError, "expected a pipeline"
  end
end
skip(name) click to toggle source
public

Skips the given action.

# File lib/core/pipeline/callable.rb, line 40
def skip(name)
  @skipped << name.to_sym
end
use(pipeline) click to toggle source
public

Replaces existing actions with actions from the given pipeline.

# File lib/core/pipeline/callable.rb, line 46
def use(pipeline)
  if (pipeline.is_a?(Class) || pipeline.is_a?(Module)) && pipeline.ancestors.include?(Is::Pipeline)
    @mutex.synchronize do
      @actions.clear
      @actions.concat(pipeline.pipeline.actions)
    end
  else
    raise ArgumentError, "expected a pipeline"
  end
end

Private Instance Methods

compile() click to toggle source
# File lib/core/pipeline/callable.rb, line 85
        def compile
  instance_eval(Compiler.compile(self, @object), __FILE__, __LINE__ - 1)

  self
end