ElmerFudd 0.0.16 → 0.0.17

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b0a9e56b47b2a3224efee44e0894318ff7cb50db
4
- data.tar.gz: 4c8376e193f1c4ed12520de23e62413e2c209d09
3
+ metadata.gz: f89c5aa3e2803b6edc3e45dd83d5ffc802cf9383
4
+ data.tar.gz: 6cd2713cfe25845a75b0ad6753d51eee8ce499e7
5
5
  SHA512:
6
- metadata.gz: f322698221ab861fa282c3f1ab6067b2ac573d69c99f483385156917eb89d6bab5d6b3c239e0a3cac84268dc8891a37680ce9509384448bb4dd4a0b7d44d91d4
7
- data.tar.gz: c2380012566f40b60988ea0051ff7626263fd05c4553f277f263415013bfa976517bb374ef73c1495e64e8e06ea34f88b752f7d0488b8962cf514d4798393e94
6
+ metadata.gz: 7009b94e28241492449ba49498c5e01f6cb6d55f2d3839cdd966cfcbfd976fe5e01bcea606a76ece1490fdd6139afaf3bad93794e562050a6687b2d9c699c48c
7
+ data.tar.gz: d4761b1312202cbe4359e980c3334fbdf4643cca6e0e16549cd03ad374f81a13a754584e95283c5f42aa8c677a93cab1e19e2327a7e61fc58a053e2dc6ba1d04
data/ElmerFudd.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "bunny"
21
+ spec.add_dependency "bunny", '>= 1.6.3'
22
22
  spec.add_development_dependency "bundler", "~> 1.5"
23
23
  spec.add_development_dependency "rake"
24
24
  spec.add_development_dependency "rspec"
data/README.md CHANGED
@@ -22,7 +22,83 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- TODO: Write usage instructions here
25
+ ### Consumer
26
+
27
+ ```ruby
28
+ #!/usr/bin/env ruby
29
+ # Example app/worker/test_worker.rb in rails
30
+
31
+ require_relative "../../config/environment"
32
+
33
+ class TestLogger
34
+ def initialize(stream)
35
+ @stream = stream
36
+ end
37
+
38
+ def call(_env, message)
39
+ @stream.puts "[#{Time.now}] received on #{message.delivery_info.routing_key} payload: #{message.payload.inspect}"
40
+ end
41
+ end
42
+
43
+ class TestWorker < ElmerFudd::Worker
44
+ default_filters(ElmerFudd::JsonFilter)
45
+
46
+ handle_cast(Route('test.print')) do |env, message|
47
+ puts "message: #{message.payload["text"]"
48
+ end
49
+
50
+ handle_call(Route('test.ping')) do |env, message|
51
+ "pong: #{message.payload["text"]"
52
+ end
53
+
54
+ handle_call(Route('test.ping')) do |env, message|
55
+ "pong: #{message.payload["text"]"
56
+ end
57
+
58
+ handle_event(Route('test.log', 'a_topic_exchange' => 'test.#'),
59
+ handler: TestLogger.new($stdout))
60
+ end
61
+
62
+ if $PROGRAM_NAME == __FILE__
63
+ trap("TERM", "DEFAULT") { exit 0 }
64
+ $connection = Bunny.new
65
+ TestWorker.new($connection, concurrency: 4).start
66
+ loop { sleep(1) }
67
+ end
68
+ ```
69
+
70
+ ### Producer
71
+
72
+ ```ruby
73
+ $connection = Bunny.new
74
+ $rabbit = ElmerFudd::JsonPublisher.new($connection)
75
+
76
+ $rabbit.cast('test.print', text: 'hello') # will print "message: hello"
77
+
78
+ $rabbit.call('test.ping', text: 'echo') #=> "pong: echo"
79
+
80
+ $rabbit.notify('a_topic_exchange', 'test.log.some.event', count: 1) # will print "[current time here] received on test.log.some.event payload: {count: 1}"
81
+ ```
82
+
83
+ ### Filters
84
+
85
+ Filters allow to mutate an incoming message in consumer before it hits appropiate handler or to modify return value (or handle errors) after the handler finishes its job. You can define default filters which will be applied to all handlers in consumer or activate them on handler level by passing filters list as a param, i.e.:
86
+
87
+ ```ruby
88
+ handle_cast(Route('math.divide')
89
+ filter: [DropFailedFilter.new(exception: ZeroDivisionError)]) do |env, message|
90
+ puts "#{payload['a'] / payload['b']}"
91
+ end
92
+ ```
93
+
94
+ #### Available filters
95
+
96
+ * `JsonFilter` - deserializes incoming messages using json and serializes call responses to json
97
+ * `DropFailedFilter.new(exception: Exception, exception_message_matches: /.*/)` - ignore the message if handler raises matching exception
98
+ * `AirbrakeFilter` - notify airbrake if handler raises exception and reraises it in filter chain
99
+ * `ActiveRecordConnectionPoolFilter` - allows to use worker with higher concurrency (takes a connection from pool for each message)
100
+ * `RetryFilter.new(2, exception: Exception, exception_message_matches: /.*/)` - retries 2 times if handler raises a matching exception
101
+
26
102
 
27
103
  ## Contributing
28
104
 
@@ -1,3 +1,3 @@
1
1
  module ElmerFudd
2
- VERSION = "0.0.16"
2
+ VERSION = "0.0.17"
3
3
  end
data/lib/ElmerFudd.rb CHANGED
@@ -95,7 +95,7 @@ module ElmerFudd
95
95
 
96
96
  def start
97
97
  self.class.handlers.each do |handler|
98
- handler.queue(@env).subscribe(ack: true, block: false) do |delivery_info, properties, payload|
98
+ handler.queue(@env).subscribe(manual_ack: true, block: false) do |delivery_info, properties, payload|
99
99
  message = Message.new(delivery_info, properties, payload, handler.route)
100
100
  begin
101
101
  handler.call(@env, message)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ElmerFudd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.16
4
+ version: 0.0.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrzej Sliwa
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-08-04 00:00:00.000000000 Z
12
+ date: 2014-12-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bunny
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - '>='
19
19
  - !ruby/object:Gem::Version
20
- version: '0'
20
+ version: 1.6.3
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - '>='
26
26
  - !ruby/object:Gem::Version
27
- version: '0'
27
+ version: 1.6.3
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: bundler
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -109,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
109
  version: '0'
110
110
  requirements: []
111
111
  rubyforge_project:
112
- rubygems_version: 2.2.2
112
+ rubygems_version: 2.4.2
113
113
  signing_key:
114
114
  specification_version: 4
115
115
  summary: RabbitMQ in OTP way