Class: Batsir::Stage

Inherits:
Object
  • Object
show all
Includes:
Celluloid
Defined in:
lib/batsir/stage.rb

Defined Under Namespace

Classes: FilterDeclaration, TransformerDeclaration

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Stage

Returns a new instance of Stage.



19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/batsir/stage.rb', line 19

def initialize(options = {})
  options.each do |attr, value|
    self.send("#{attr.to_s}=", value)
  end
  @cancellators           = []
  @acceptor_transformers  = []
  @running_acceptors      = []
  @acceptors              = {}
  @filter_declarations    = []
  @notifiers              = {}
  @conditional_notifiers  = []
  @notifier_transformers  = []
  @built                  = false
end

Instance Attribute Details

#acceptor_transformersObject (readonly)

Returns the value of attribute acceptor_transformers.



17
18
19
# File 'lib/batsir/stage.rb', line 17

def acceptor_transformers
  @acceptor_transformers
end

#acceptorsObject (readonly)

Returns the value of attribute acceptors.



14
15
16
# File 'lib/batsir/stage.rb', line 14

def acceptors
  @acceptors
end

#cancellatorsObject

Returns the value of attribute cancellators.



10
11
12
# File 'lib/batsir/stage.rb', line 10

def cancellators
  @cancellators
end

#chainObject

Returns the value of attribute chain.



9
10
11
# File 'lib/batsir/stage.rb', line 9

def chain
  @chain
end

#conditional_notifiersObject (readonly)

Returns the value of attribute conditional_notifiers.



13
14
15
# File 'lib/batsir/stage.rb', line 13

def conditional_notifiers
  @conditional_notifiers
end

#filter_declarationsObject (readonly)

Returns the value of attribute filter_declarations.



11
12
13
# File 'lib/batsir/stage.rb', line 11

def filter_declarations
  @filter_declarations
end

#nameObject

Returns the value of attribute name.



8
9
10
# File 'lib/batsir/stage.rb', line 8

def name
  @name
end

#notifier_transformersObject (readonly)

Returns the value of attribute notifier_transformers.



16
17
18
# File 'lib/batsir/stage.rb', line 16

def notifier_transformers
  @notifier_transformers
end

#notifiersObject (readonly)

Returns the value of attribute notifiers.



12
13
14
# File 'lib/batsir/stage.rb', line 12

def notifiers
  @notifiers
end

#running_acceptorsObject (readonly)

Returns the value of attribute running_acceptors.



15
16
17
# File 'lib/batsir/stage.rb', line 15

def running_acceptors
  @running_acceptors
end

Instance Method Details

#add_acceptor(acceptor, options = {}) ⇒ Object



42
43
44
45
# File 'lib/batsir/stage.rb', line 42

def add_acceptor(acceptor, options = {})
  @acceptors[acceptor] ||= Set.new
  @acceptors[acceptor] << options
end

#add_acceptor_transformer(transformer, options = {}) ⇒ Object



38
39
40
# File 'lib/batsir/stage.rb', line 38

def add_acceptor_transformer(transformer, options = {})
  @acceptor_transformers << TransformerDeclaration.new(transformer, options)
end

#add_conditional_notifier(notifier_declaration) ⇒ Object



55
56
57
# File 'lib/batsir/stage.rb', line 55

def add_conditional_notifier(notifier_declaration)
  @conditional_notifiers << notifier_declaration
end

#add_filter(filter, options = {}) ⇒ Object



47
48
49
# File 'lib/batsir/stage.rb', line 47

def add_filter(filter, options = {})
  @filter_declarations << FilterDeclaration.new(filter, options)
end

#add_notifier(notifier, options = {}) ⇒ Object



59
60
61
62
# File 'lib/batsir/stage.rb', line 59

def add_notifier(notifier, options = {})
  @notifiers[notifier] ||= Set.new
  @notifiers[notifier] << options
end

#add_notifier_transformer(transformer, options = {}) ⇒ Object



64
65
66
# File 'lib/batsir/stage.rb', line 64

def add_notifier_transformer(transformer, options = {})
  @notifier_transformers << TransformerDeclaration.new(transformer, options)
end

#built?Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/batsir/stage.rb', line 34

def built?
  @built
end

#compileObject



68
69
70
# File 'lib/batsir/stage.rb', line 68

def compile
  Batsir::StageWorker.compile_from(self)
end

#filtersObject



51
52
53
# File 'lib/batsir/stage.rb', line 51

def filters
  @filter_declarations.map{ |filter_declaration| filter_declaration.filter }
end

#finalizeObject



72
73
74
75
76
# File 'lib/batsir/stage.rb', line 72

def finalize
  @cancellators.each do |cancellator|
    cancellator.write "STOP"
  end
end

#startObject



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/batsir/stage.rb', line 78

def start
  acceptors.each do |acceptor_class, options|
    options.each do |acceptor_options|
      acceptor_options.merge!(:stage_name => self.name)
      acceptor = acceptor_class.new(acceptor_options)

      if acceptor_transformers.any?
        acceptor_transformers.each do |transformer_declaration|
          transformer = transformer_declaration.transformer.new(transformer_declaration.options)
          acceptor.add_transformer(transformer)
        end
      else
        acceptor.add_transformer(Batsir::Transformers::JSONInputTransformer.new)
      end
      @running_acceptors << acceptor
      acceptor.async.start
    end
  end
  true
end