batsir 0.1.0 → 0.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.travis.yml +9 -1
- data/CHANGES.md +54 -0
- data/Gemfile +7 -10
- data/README.md +49 -5
- data/Rakefile +23 -16
- data/batsir.gemspec +43 -15
- data/lib/batsir/acceptors/acceptor.rb +31 -5
- data/lib/batsir/acceptors/amqp_acceptor.rb +36 -8
- data/lib/batsir/amqp.rb +35 -7
- data/lib/batsir/amqp_consumer.rb +8 -0
- data/lib/batsir/compiler/stage_worker_compiler.rb +86 -0
- data/lib/batsir/config.rb +208 -24
- data/lib/batsir/dsl/conditional_notifier_declaration.rb +31 -0
- data/lib/batsir/dsl/dsl_mappings.rb +27 -2
- data/lib/batsir/errors.rb +18 -0
- data/lib/batsir/filter.rb +5 -0
- data/lib/batsir/log.rb +7 -0
- data/lib/batsir/logger.rb +37 -0
- data/lib/batsir/logo.rb +3 -8
- data/lib/batsir/notifiers/amqp_notifier.rb +14 -4
- data/lib/batsir/notifiers/conditional_notifier.rb +29 -0
- data/lib/batsir/notifiers/notifier.rb +6 -5
- data/lib/batsir/registry.rb +6 -2
- data/lib/batsir/stage.rb +9 -4
- data/lib/batsir/stage_worker.rb +3 -56
- data/lib/batsir/strategies/retry_strategy.rb +35 -0
- data/lib/batsir/strategies/strategy.rb +20 -0
- data/lib/batsir/transformers/field_transformer.rb +2 -3
- data/lib/batsir/transformers/json_input_transformer.rb +6 -2
- data/lib/batsir/transformers/json_output_transformer.rb +6 -2
- data/lib/batsir/transformers/transformer.rb +5 -1
- data/lib/batsir/version.rb +10 -0
- data/lib/batsir.rb +31 -13
- data/spec/batsir/acceptors/acceptor_spec.rb +7 -78
- data/spec/batsir/acceptors/amqp_acceptor_spec.rb +55 -66
- data/spec/batsir/acceptors/shared_examples.rb +102 -0
- data/spec/batsir/amqp_spec.rb +58 -0
- data/spec/batsir/chain_spec.rb +4 -4
- data/spec/batsir/config_spec.rb +97 -0
- data/spec/batsir/dsl/chain_mapping_spec.rb +5 -6
- data/spec/batsir/dsl/conditional_notifier_mapping_spec.rb +80 -0
- data/spec/batsir/dsl/stage_mapping_spec.rb +38 -20
- data/spec/batsir/filter_queue_spec.rb +9 -15
- data/spec/batsir/filter_spec.rb +4 -5
- data/spec/batsir/log_spec.rb +10 -0
- data/spec/batsir/logger_spec.rb +46 -0
- data/spec/batsir/notifiers/amqp_notifier_spec.rb +43 -22
- data/spec/batsir/notifiers/conditional_notifier_spec.rb +62 -0
- data/spec/batsir/notifiers/notifier_spec.rb +4 -66
- data/spec/batsir/notifiers/shared_examples.rb +100 -0
- data/spec/batsir/registry_spec.rb +48 -0
- data/spec/batsir/stage_spec.rb +91 -85
- data/spec/batsir/stage_worker_spec.rb +13 -13
- data/spec/batsir/strategies/retry_strategy_spec.rb +58 -0
- data/spec/batsir/strategies/strategy_spec.rb +28 -0
- data/spec/batsir/support/bunny_mocks.rb +78 -5
- data/spec/batsir/transformers/field_transformer_spec.rb +22 -22
- data/spec/batsir/transformers/json_input_transformer_spec.rb +8 -3
- data/spec/batsir/transformers/json_output_transformer_spec.rb +2 -2
- data/spec/batsir/transformers/transformer_spec.rb +18 -4
- data/spec/spec_helper.rb +6 -2
- metadata +78 -23
- data/VERSION +0 -1
@@ -0,0 +1,28 @@
|
|
1
|
+
require File.join( File.dirname(__FILE__), "..", "..", "spec_helper" )
|
2
|
+
|
3
|
+
describe Batsir::Strategies::Strategy do
|
4
|
+
let( :strategy_class ) {
|
5
|
+
Batsir::Strategies::Strategy
|
6
|
+
}
|
7
|
+
|
8
|
+
class MockContext
|
9
|
+
def execute(message)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class DefunctMockContext; end
|
14
|
+
|
15
|
+
it 'has an #execute method' do
|
16
|
+
strategy_class.instance_methods.map{|im| im.to_s}.should include "execute"
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'has an accessable context' do
|
20
|
+
c = MockContext.new
|
21
|
+
strategy_class.new(c).context.should == c
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'detects an incorrect context object being passed' do
|
25
|
+
c = DefunctMockContext.new
|
26
|
+
lambda{strategy_class.new(c)}.should raise_error Batsir::Errors::ExecuteMethodNotImplementedError
|
27
|
+
end
|
28
|
+
end
|
@@ -8,9 +8,22 @@ module Bunny
|
|
8
8
|
yield @instance
|
9
9
|
end
|
10
10
|
|
11
|
+
def self.new(options = {})
|
12
|
+
@instance = BunnyInstance.new(options)
|
13
|
+
@instance
|
14
|
+
end
|
15
|
+
|
16
|
+
class Consumer
|
17
|
+
def initialize(channel, queue, consumer_tag = 'test', no_ack = true, exclusive = false, arguments = {})
|
18
|
+
@channel = channel
|
19
|
+
@queue = queue
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
11
23
|
class BunnyInstance
|
12
24
|
attr_accessor :queues
|
13
25
|
attr_accessor :options
|
26
|
+
attr_accessor :channel
|
14
27
|
attr_accessor :exchange
|
15
28
|
|
16
29
|
def initialize(options = {})
|
@@ -18,27 +31,66 @@ module Bunny
|
|
18
31
|
@queues = {}
|
19
32
|
end
|
20
33
|
|
34
|
+
def start
|
35
|
+
@channel = create_channel
|
36
|
+
self
|
37
|
+
end
|
38
|
+
|
21
39
|
def exchange(exchange = nil)
|
22
|
-
@exchange = BunnyExchange.new(exchange) if exchange
|
40
|
+
@exchange = BunnyExchange.new(self, exchange) if exchange
|
23
41
|
@exchange
|
24
42
|
end
|
25
43
|
|
26
|
-
def queue(queue)
|
44
|
+
def queue(queue, options = {})
|
27
45
|
@queues[queue] = BunnyQueue.new
|
28
46
|
end
|
47
|
+
|
48
|
+
def create_channel
|
49
|
+
self
|
50
|
+
end
|
51
|
+
|
52
|
+
def connection
|
53
|
+
self
|
54
|
+
end
|
55
|
+
|
56
|
+
def host
|
57
|
+
@options[:host]
|
58
|
+
end
|
59
|
+
|
60
|
+
def port
|
61
|
+
@options[:port]
|
62
|
+
end
|
63
|
+
|
64
|
+
def user
|
65
|
+
@options[:user]
|
66
|
+
end
|
67
|
+
|
68
|
+
def pass
|
69
|
+
@options[:pass]
|
70
|
+
end
|
71
|
+
|
72
|
+
def vhost
|
73
|
+
@options[:vhost]
|
74
|
+
end
|
75
|
+
|
76
|
+
def number
|
77
|
+
1
|
78
|
+
end
|
29
79
|
end
|
30
80
|
|
31
81
|
class BunnyExchange
|
32
82
|
attr_accessor :name
|
33
83
|
attr_accessor :key
|
34
84
|
attr_accessor :message
|
85
|
+
attr_accessor :channel
|
35
86
|
|
36
|
-
def initialize(name)
|
87
|
+
def initialize(channel, name)
|
88
|
+
@channel = channel
|
37
89
|
@name = name
|
38
90
|
end
|
39
91
|
|
40
92
|
def publish(message, options = {})
|
41
|
-
@key = options[:key]
|
93
|
+
@key = options[:routing_key] || options[:key]
|
42
94
|
@message = message
|
43
95
|
end
|
44
96
|
end
|
@@ -48,15 +100,36 @@ module Bunny
|
|
48
100
|
attr_accessor :block
|
49
101
|
attr_accessor :bound_exchange
|
50
102
|
attr_accessor :bound_key
|
103
|
+
attr_accessor :consumer
|
104
|
+
|
105
|
+
def initialize
|
106
|
+
@bindings = []
|
107
|
+
end
|
51
108
|
|
52
109
|
def bind(exchange, options)
|
53
110
|
@bound_exchange = exchange
|
54
|
-
|
111
|
+
|
112
|
+
@bound_key = options[:routing_key] || options[:key]
|
113
|
+
@bindings << {:exchange => @bound_exchange.name, :routing_key => @bound_key}
|
55
114
|
end
|
56
115
|
|
57
116
|
def subscribe(*args, &block)
|
58
117
|
@arguments = *args
|
59
118
|
@block = block
|
60
119
|
end
|
120
|
+
|
121
|
+
def subscribe_with(consumer, opts = {:block => false})
|
122
|
+
@block ||= opts[:block]
|
123
|
+
@consumer = consumer
|
124
|
+
@consumer
|
125
|
+
end
|
126
|
+
|
127
|
+
def name
|
128
|
+
@bound_key
|
129
|
+
end
|
130
|
+
|
131
|
+
def channel
|
132
|
+
@bound_exchange.channel
|
133
|
+
end
|
61
134
|
end
|
62
135
|
end
|
@@ -5,51 +5,52 @@ describe Batsir::Transformers::FieldTransformer do
|
|
5
5
|
Batsir::Transformers::FieldTransformer
|
6
6
|
end
|
7
7
|
|
8
|
-
it "
|
8
|
+
it "accepts an options hash in its initializer" do
|
9
9
|
transformer_instance = transformer_class.new( {} )
|
10
10
|
transformer_instance.should_not be_nil
|
11
11
|
transformer_instance.should be_a transformer_class
|
12
12
|
end
|
13
13
|
|
14
|
-
it "
|
14
|
+
it "can set a field mapping using the 'fields' option" do
|
15
15
|
field_mapping = {:foo => :bar}
|
16
16
|
transformer = transformer_class.new( :fields => field_mapping )
|
17
17
|
transformer.fields.should == field_mapping
|
18
18
|
end
|
19
19
|
|
20
|
-
it "
|
21
|
-
field_mapping = {:foo =>
|
20
|
+
it "uses the fields mapping given in an options hash to transform the message using #transform" do
|
21
|
+
field_mapping = {:foo => 'bar'}
|
22
22
|
transformer = transformer_class.new( :fields => field_mapping )
|
23
23
|
|
24
|
-
message = {
|
24
|
+
message = {'bar' => 123}
|
25
25
|
transformed_message = transformer.transform(message)
|
26
|
-
transformed_message.should have_key
|
27
|
-
transformed_message.should_not have_key :
|
28
|
-
transformed_message
|
26
|
+
transformed_message.should have_key 'foo'
|
27
|
+
transformed_message.should_not have_key :foo
|
28
|
+
transformed_message.should_not have_key 'bar'
|
29
|
+
transformed_message['foo'].should == 123
|
29
30
|
end
|
30
31
|
|
31
|
-
it "
|
32
|
+
it "can use symbols and string based keys and values all the same" do
|
32
33
|
field_mapping = {:foo => "bar", "john" => :doe}
|
33
34
|
transformer = transformer_class.new( :fields => field_mapping )
|
34
35
|
|
35
36
|
message = {:bar => "foo", "doe" => :john}
|
36
37
|
transformed_message = transformer.transform(message)
|
37
|
-
transformed_message[
|
38
|
-
transformed_message[
|
38
|
+
transformed_message['foo'].should == 'foo'
|
39
|
+
transformed_message['john'].should == :john
|
39
40
|
end
|
40
41
|
|
41
|
-
it "
|
42
|
+
it "removes options not in the fields option when a fields option is given" do
|
42
43
|
field_mapping = {:foo => :bar}
|
43
44
|
transformer = transformer_class.new( :fields => field_mapping )
|
44
45
|
|
45
|
-
message = {
|
46
|
+
message = {'bar' => "bar", 'john' => :doe}
|
46
47
|
transformed_message = transformer.transform(message)
|
47
|
-
transformed_message.should have_key
|
48
|
-
transformed_message.should_not have_key
|
49
|
-
transformed_message.should_not have_key
|
48
|
+
transformed_message.should have_key 'foo'
|
49
|
+
transformed_message.should_not have_key 'bar'
|
50
|
+
transformed_message.should_not have_key 'john'
|
50
51
|
end
|
51
52
|
|
52
|
-
it "
|
53
|
+
it "does not remove fields when no mapping is given, but enforces the no_symbol_keys principle" do
|
53
54
|
transformer = transformer_class.new
|
54
55
|
|
55
56
|
message = {:bar => "bar", :john => :doe}
|
@@ -58,16 +59,15 @@ describe Batsir::Transformers::FieldTransformer do
|
|
58
59
|
transformed_message.should have_key :john
|
59
60
|
end
|
60
61
|
|
61
|
-
it "
|
62
|
+
it "correctly handles more complex field mapping" do
|
62
63
|
field_mapping = {:id => :old_id}
|
63
64
|
transformer = transformer_class.new( :fields => field_mapping )
|
64
65
|
|
65
66
|
message = {:id => 2, :old_id => 1, :john => :doe}
|
66
67
|
transformed_message = transformer.transform(message)
|
67
68
|
|
68
|
-
transformed_message.should have_key
|
69
|
-
transformed_message.should_not have_key
|
70
|
-
transformed_message.should_not have_key
|
69
|
+
transformed_message.should have_key 'id'
|
70
|
+
transformed_message.should_not have_key 'old_id'
|
71
|
+
transformed_message.should_not have_key 'john'
|
71
72
|
end
|
72
|
-
|
73
73
|
end
|
@@ -1,17 +1,17 @@
|
|
1
1
|
require File.join( File.dirname(__FILE__), "..", "..", "spec_helper" )
|
2
2
|
|
3
3
|
describe Batsir::Transformers::JSONInputTransformer do
|
4
|
-
it "
|
4
|
+
it "is a Batsir::Transformers::Transformer" do
|
5
5
|
subject.should be_a Batsir::Transformers::Transformer
|
6
6
|
end
|
7
7
|
|
8
|
-
it "
|
8
|
+
it "transforms the input to a ruby object" do
|
9
9
|
some_json = '{"foo" : "bar"}'
|
10
10
|
result = subject.transform(some_json)
|
11
11
|
result.should be_a Hash
|
12
12
|
end
|
13
13
|
|
14
|
-
it "
|
14
|
+
it "transforms the input using string names" do
|
15
15
|
some_json = '{"foo" : "bar"}'
|
16
16
|
result = subject.transform(some_json)
|
17
17
|
|
@@ -19,4 +19,9 @@ describe Batsir::Transformers::JSONInputTransformer do
|
|
19
19
|
result["foo"].should_not be_nil
|
20
20
|
result["foo"].should == "bar"
|
21
21
|
end
|
22
|
+
|
23
|
+
it "should throw a TransformError when the input is malformed" do
|
24
|
+
test = Batsir::Transformers::JSONInputTransformer.new
|
25
|
+
expect{ test.transform("1") }.to raise_error Batsir::Errors::TransformError
|
26
|
+
end
|
22
27
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
require File.join( File.dirname(__FILE__), "..", "..", "spec_helper" )
|
2
2
|
|
3
3
|
describe Batsir::Transformers::JSONOutputTransformer do
|
4
|
-
it "
|
4
|
+
it "is a Batsir::Transformers::Transformer" do
|
5
5
|
subject.should be_a Batsir::Transformers::Transformer
|
6
6
|
end
|
7
7
|
|
8
|
-
it "
|
8
|
+
it "transforms a hash to a valid json hash" do
|
9
9
|
some_hash = {:foo => :bar}
|
10
10
|
some_hash.should be_a Hash
|
11
11
|
|
@@ -5,18 +5,32 @@ describe Batsir::Transformers::Transformer do
|
|
5
5
|
Batsir::Transformers::Transformer
|
6
6
|
end
|
7
7
|
|
8
|
-
it "
|
8
|
+
it "accepts an options hash in its initialiser" do
|
9
9
|
transformer_instance = transformer_class.new( {} )
|
10
10
|
transformer_instance.should_not be_nil
|
11
11
|
transformer_instance.should be_a transformer_class
|
12
12
|
end
|
13
13
|
|
14
|
-
it "
|
14
|
+
it "has a #transform method" do
|
15
15
|
transformer_class.instance_methods.map{|m| m.to_s}.should include "transform"
|
16
16
|
end
|
17
17
|
|
18
|
-
it "
|
18
|
+
it "has an #execute method" do
|
19
|
+
transformer_class.instance_methods.map{|m| m.to_s}.should include "execute"
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'raises an error when the #execute method is not implemented' do
|
23
|
+
message = {:foo => :bar}
|
24
|
+
lambda{transformer_class.new.transform(message)}.should raise_error NotImplementedError
|
25
|
+
end
|
26
|
+
|
27
|
+
it "can transform the message" do
|
28
|
+
class Autobot < Batsir::Transformers::Transformer
|
29
|
+
def execute(message)
|
30
|
+
message = "transform"
|
31
|
+
end
|
32
|
+
end
|
19
33
|
message = {:foo => :bar}
|
20
|
-
|
34
|
+
Autobot.new.transform(message).should == "transform"
|
21
35
|
end
|
22
36
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -11,12 +11,16 @@ require 'rspec/core'
|
|
11
11
|
|
12
12
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
13
13
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
14
|
+
|
14
15
|
require 'batsir'
|
15
16
|
require 'batsir/support/mock_filters'
|
16
17
|
require 'batsir/support/bunny_mocks'
|
17
18
|
Celluloid.logger.level = Logger::ERROR
|
18
19
|
RSpec.configure do |config|
|
19
|
-
config.
|
20
|
-
Celluloid.
|
20
|
+
config.before(:each) do
|
21
|
+
Celluloid.boot
|
21
22
|
end
|
23
|
+
# config.after(:each) do
|
24
|
+
# Celluloid.shutdown
|
25
|
+
# end
|
22
26
|
end
|
metadata
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: batsir
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- J.W. Koelewijn
|
9
|
+
- Bram de Vries
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date:
|
13
|
+
date: 2013-10-24 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: bundler
|
@@ -43,12 +44,28 @@ dependencies:
|
|
43
44
|
- - ! '>='
|
44
45
|
- !ruby/object:Gem::Version
|
45
46
|
version: '0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rdoc
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
46
63
|
- !ruby/object:Gem::Dependency
|
47
64
|
name: blockenspiel
|
48
65
|
requirement: !ruby/object:Gem::Requirement
|
49
66
|
none: false
|
50
67
|
requirements:
|
51
|
-
- -
|
68
|
+
- - ! '>='
|
52
69
|
- !ruby/object:Gem::Version
|
53
70
|
version: 0.4.3
|
54
71
|
type: :runtime
|
@@ -56,17 +73,33 @@ dependencies:
|
|
56
73
|
version_requirements: !ruby/object:Gem::Requirement
|
57
74
|
none: false
|
58
75
|
requirements:
|
59
|
-
- -
|
76
|
+
- - ! '>='
|
60
77
|
- !ruby/object:Gem::Version
|
61
78
|
version: 0.4.3
|
62
79
|
- !ruby/object:Gem::Dependency
|
63
80
|
name: celluloid
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ~>
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: 0.14.1
|
87
|
+
type: :runtime
|
88
|
+
prerelease: false
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ~>
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: 0.14.1
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: sidekiq
|
64
97
|
requirement: !ruby/object:Gem::Requirement
|
65
98
|
none: false
|
66
99
|
requirements:
|
67
100
|
- - ! '>='
|
68
101
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
102
|
+
version: 2.5.4
|
70
103
|
type: :runtime
|
71
104
|
prerelease: false
|
72
105
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -74,9 +107,9 @@ dependencies:
|
|
74
107
|
requirements:
|
75
108
|
- - ! '>='
|
76
109
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
110
|
+
version: 2.5.4
|
78
111
|
- !ruby/object:Gem::Dependency
|
79
|
-
name:
|
112
|
+
name: bunny
|
80
113
|
requirement: !ruby/object:Gem::Requirement
|
81
114
|
none: false
|
82
115
|
requirements:
|
@@ -92,7 +125,7 @@ dependencies:
|
|
92
125
|
- !ruby/object:Gem::Version
|
93
126
|
version: '0'
|
94
127
|
- !ruby/object:Gem::Dependency
|
95
|
-
name:
|
128
|
+
name: json
|
96
129
|
requirement: !ruby/object:Gem::Requirement
|
97
130
|
none: false
|
98
131
|
requirements:
|
@@ -108,7 +141,7 @@ dependencies:
|
|
108
141
|
- !ruby/object:Gem::Version
|
109
142
|
version: '0'
|
110
143
|
- !ruby/object:Gem::Dependency
|
111
|
-
name:
|
144
|
+
name: log4r
|
112
145
|
requirement: !ruby/object:Gem::Requirement
|
113
146
|
none: false
|
114
147
|
requirements:
|
@@ -124,64 +157,86 @@ dependencies:
|
|
124
157
|
- !ruby/object:Gem::Version
|
125
158
|
version: '0'
|
126
159
|
description: ! "Batsir uses so called stages to define operation queues. These operation
|
127
|
-
|
128
|
-
Each stage\n
|
129
|
-
a message is received\n
|
130
|
-
thread that will pass the message\n
|
131
|
-
Operation queues can have 4 different operations, 1 common operation type, and
|
132
|
-
special
|
133
|
-
all other operations),\n
|
134
|
-
the common operations, but before the\n
|
135
|
-
operations (which will always be executed last)\n
|
136
|
-
chains of stages to perform tasks that depend on each\n
|
137
|
-
a low coupling"
|
160
|
+
queues\n consist of several operations that will be executed one after the other.
|
161
|
+
Each stage\n is defined by its name and the queue on which it will listen. Once
|
162
|
+
a message is received\n on the queue, it is dispatched to a worker in a seperate
|
163
|
+
thread that will pass the message\n to each operation in the operation queue.\n
|
164
|
+
\ Operation queues can have 4 different operations, 1 common operation type, and
|
165
|
+
3 special\n purpose operations: retrieval operations (which are always executed
|
166
|
+
before all other operations),\n persistence operations (which are always executed
|
167
|
+
after the common operations, but before the\n notification operations) and notification
|
168
|
+
operations (which will always be executed last)\n This makes it possible to create
|
169
|
+
chains of stages to perform tasks that depend on each\n other, but otherwise
|
170
|
+
have a low coupling"
|
138
171
|
email: jwkoelewijn@gmail.com
|
139
172
|
executables: []
|
140
173
|
extensions: []
|
141
174
|
extra_rdoc_files:
|
175
|
+
- CHANGES.md
|
142
176
|
- LICENSE.txt
|
143
177
|
- README.md
|
144
178
|
files:
|
145
179
|
- .document
|
146
180
|
- .rspec
|
147
181
|
- .travis.yml
|
182
|
+
- CHANGES.md
|
148
183
|
- Gemfile
|
149
184
|
- LICENSE.txt
|
150
185
|
- README.md
|
151
186
|
- Rakefile
|
152
|
-
- VERSION
|
153
187
|
- batsir.gemspec
|
154
188
|
- batsir.png
|
155
189
|
- lib/batsir.rb
|
156
190
|
- lib/batsir/acceptors/acceptor.rb
|
157
191
|
- lib/batsir/acceptors/amqp_acceptor.rb
|
158
192
|
- lib/batsir/amqp.rb
|
193
|
+
- lib/batsir/amqp_consumer.rb
|
159
194
|
- lib/batsir/chain.rb
|
195
|
+
- lib/batsir/compiler/stage_worker_compiler.rb
|
160
196
|
- lib/batsir/config.rb
|
197
|
+
- lib/batsir/dsl/conditional_notifier_declaration.rb
|
161
198
|
- lib/batsir/dsl/dsl_mappings.rb
|
199
|
+
- lib/batsir/errors.rb
|
162
200
|
- lib/batsir/filter.rb
|
163
201
|
- lib/batsir/filter_queue.rb
|
202
|
+
- lib/batsir/log.rb
|
203
|
+
- lib/batsir/logger.rb
|
164
204
|
- lib/batsir/logo.rb
|
165
205
|
- lib/batsir/notifiers/amqp_notifier.rb
|
206
|
+
- lib/batsir/notifiers/conditional_notifier.rb
|
166
207
|
- lib/batsir/notifiers/notifier.rb
|
167
208
|
- lib/batsir/registry.rb
|
168
209
|
- lib/batsir/stage.rb
|
169
210
|
- lib/batsir/stage_worker.rb
|
211
|
+
- lib/batsir/strategies/retry_strategy.rb
|
212
|
+
- lib/batsir/strategies/strategy.rb
|
170
213
|
- lib/batsir/transformers/field_transformer.rb
|
171
214
|
- lib/batsir/transformers/json_input_transformer.rb
|
172
215
|
- lib/batsir/transformers/json_output_transformer.rb
|
173
216
|
- lib/batsir/transformers/transformer.rb
|
217
|
+
- lib/batsir/version.rb
|
174
218
|
- spec/batsir/acceptors/acceptor_spec.rb
|
175
219
|
- spec/batsir/acceptors/amqp_acceptor_spec.rb
|
220
|
+
- spec/batsir/acceptors/shared_examples.rb
|
221
|
+
- spec/batsir/amqp_spec.rb
|
176
222
|
- spec/batsir/chain_spec.rb
|
223
|
+
- spec/batsir/config_spec.rb
|
177
224
|
- spec/batsir/dsl/chain_mapping_spec.rb
|
225
|
+
- spec/batsir/dsl/conditional_notifier_mapping_spec.rb
|
178
226
|
- spec/batsir/dsl/stage_mapping_spec.rb
|
179
227
|
- spec/batsir/filter_queue_spec.rb
|
180
228
|
- spec/batsir/filter_spec.rb
|
229
|
+
- spec/batsir/log_spec.rb
|
230
|
+
- spec/batsir/logger_spec.rb
|
181
231
|
- spec/batsir/notifiers/amqp_notifier_spec.rb
|
232
|
+
- spec/batsir/notifiers/conditional_notifier_spec.rb
|
182
233
|
- spec/batsir/notifiers/notifier_spec.rb
|
234
|
+
- spec/batsir/notifiers/shared_examples.rb
|
235
|
+
- spec/batsir/registry_spec.rb
|
183
236
|
- spec/batsir/stage_spec.rb
|
184
237
|
- spec/batsir/stage_worker_spec.rb
|
238
|
+
- spec/batsir/strategies/retry_strategy_spec.rb
|
239
|
+
- spec/batsir/strategies/strategy_spec.rb
|
185
240
|
- spec/batsir/support/bunny_mocks.rb
|
186
241
|
- spec/batsir/support/mock_filters.rb
|
187
242
|
- spec/batsir/transformers/field_transformer_spec.rb
|
@@ -204,7 +259,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
204
259
|
version: '0'
|
205
260
|
segments:
|
206
261
|
- 0
|
207
|
-
hash:
|
262
|
+
hash: 3965214533793542389
|
208
263
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
209
264
|
none: false
|
210
265
|
requirements:
|
@@ -213,7 +268,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
213
268
|
version: '0'
|
214
269
|
requirements: []
|
215
270
|
rubyforge_project:
|
216
|
-
rubygems_version: 1.8.
|
271
|
+
rubygems_version: 1.8.25
|
217
272
|
signing_key:
|
218
273
|
specification_version: 3
|
219
274
|
summary: Batsir is an execution platform for stage based operation queue execution
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.1.0
|