class Hollaback::Chain

Attributes

callbacks[R]

Public Class Methods

new() click to toggle source
# File lib/hollaback/chain.rb, line 5
def initialize
  @callbacks = []
end

Public Instance Methods

+(other) click to toggle source
# File lib/hollaback/chain.rb, line 9
def +(other)
  @callbacks += other.callbacks
  self
end
after(execute = nil, &block) click to toggle source
# File lib/hollaback/chain.rb, line 18
def after(execute = nil, &block)
  build(:after, execute, &block)
end
around(execute = nil, &block) click to toggle source
# File lib/hollaback/chain.rb, line 22
def around(execute = nil, &block)
  build(:around, execute, &block)
end
before(execute = nil, &block) click to toggle source
# File lib/hollaback/chain.rb, line 14
def before(execute = nil, &block)
  build(:before, execute, &block)
end
compile(&block) click to toggle source
# File lib/hollaback/chain.rb, line 30
def compile(&block)
  if empty?
    block
  else
    callbacks.inject(Sequence.new(&block)) do |sequence, callback|
      sequence.send(callback.type, &callback.build)
    end
  end
end
empty?() click to toggle source
# File lib/hollaback/chain.rb, line 26
def empty?
  callbacks.empty?
end

Private Instance Methods

build(type, execute, &block) click to toggle source
# File lib/hollaback/chain.rb, line 42
def build(type, execute, &block)
  callbacks << Callback.new(type, execute, &block)
end