Class: Pipelined::Pipeline

Inherits:
Object
  • Object
show all
Defined in:
lib/pipelined/pipeline.rb

Instance Method Summary collapse

Constructor Details

#initialize(*middlewares) ⇒ Pipeline

Returns a new instance of Pipeline.



5
6
7
8
# File 'lib/pipelined/pipeline.rb', line 5

def initialize(*middlewares)
  @middlewares = Array.new(middlewares).flatten
  @uniqed = false
end

Instance Method Details

#call(env, &final) ⇒ Object



15
16
17
18
19
20
21
# File 'lib/pipelined/pipeline.rb', line 15

def call(env, &final)
  final ||= ->(mod_env) { mod_env }

  uniq_middlewares!.reverse
                   .reduce(final) { |acc, elem| ->(mod_env) { elem.new(acc, mod_env).call } }
                   .call(env)
end

#delete(middleware) ⇒ Object



63
64
65
# File 'lib/pipelined/pipeline.rb', line 63

def delete(middleware)
  @middlewares.delete(middleware)
end

#index(middleware) ⇒ Object



27
28
29
# File 'lib/pipelined/pipeline.rb', line 27

def index(middleware)
  @middlewares.index(middleware)
end

#index!(middleware) ⇒ Object

Raises:

  • (ArgumentError)


31
32
33
34
35
36
# File 'lib/pipelined/pipeline.rb', line 31

def index!(middleware)
  idx = index(middleware)
  return idx if idx

  raise(ArgumentError)
end

#insert(index, middleware) ⇒ Object



38
39
40
41
# File 'lib/pipelined/pipeline.rb', line 38

def insert(index, middleware)
  @uniqed = false
  @middlewares.insert(index, middleware)
end

#insert_after(after, middleware) ⇒ Object



47
48
49
# File 'lib/pipelined/pipeline.rb', line 47

def insert_after(after, middleware)
  insert(index!(after) + 1, middleware)
end

#insert_before(before, middleware) ⇒ Object



43
44
45
# File 'lib/pipelined/pipeline.rb', line 43

def insert_before(before, middleware)
  insert(index!(before), middleware)
end

#replace(replaced, middleware) ⇒ Object



51
52
53
54
# File 'lib/pipelined/pipeline.rb', line 51

def replace(replaced, middleware)
  @uniqed = false
  @middlewares[index!(replaced)] = middleware
end

#sizeObject



23
24
25
# File 'lib/pipelined/pipeline.rb', line 23

def size
  uniq_middlewares!.size
end

#swap(first, second) ⇒ Object



56
57
58
59
60
61
# File 'lib/pipelined/pipeline.rb', line 56

def swap(first, second)
  first_idx = index!(first)
  second_idx = index!(second)
  @middlewares[first_idx] = second
  @middlewares[second_idx] = first
end

#use(middleware) ⇒ Object



10
11
12
13
# File 'lib/pipelined/pipeline.rb', line 10

def use(middleware)
  @uniqed = false
  @middlewares << middleware
end