class Citrus::Common::Service::FilterService

FilterService

Public Class Methods

new() click to toggle source

Initialize the service

# File lib/citrus/common/service/filter_service.rb, line 19
def initialize
  @befores = []
  @afters = []
end

Public Instance Methods

after(filter) click to toggle source

Add after filter into the filter chain

@param [#call] filter

# File lib/citrus/common/service/filter_service.rb, line 34
def after filter
  @afters.unshift filter
end
after_filter(err, msg, session, resp) { |err| ... } click to toggle source

Do the after filter chain

@param [Object] err @param [Hash] msg @param [Object] session @param [Hash] resp

# File lib/citrus/common/service/filter_service.rb, line 69
def after_filter err, msg, session, resp, &block
  index = 0

  next_p = Proc.new { |err|
    if index >= @afters.length
      block_given? and yield err
      return
    end

    handler = @afters[index]
    index += 1

    if handler.respond_to? :call
      handler.call err, msg, session, resp, &next_p
    else
      next_p.call Exception.new 'invalid after filter'
    end
  }
  next_p.call err
end
before(filter) click to toggle source

Add before filter into the filter chain

@param [#call] filter

# File lib/citrus/common/service/filter_service.rb, line 27
def before filter
  @befores << filter
end
before_filter(msg, session) { |err, resp, args| ... } click to toggle source

Do the before filter chain

@param [Hash] msg @param [Object] session

# File lib/citrus/common/service/filter_service.rb, line 42
def before_filter msg, session, &block
  index = 0

  next_p = Proc.new { |err, resp, args|
    if err || index >= @befores.length
      block_given? and yield err, resp, args
      return
    end

    handler = @befores[index]
    index += 1

    if handler.respond_to? :call
      handler.call msg, session, &next_p
    else
      next_p.call Exception.new 'invalid before filter'
    end
  }
  next_p.call
end