waterdrop 0.1.13 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/.travis.yml +1 -0
- data/CHANGELOG.md +6 -0
- data/Gemfile.lock +7 -9
- data/README.md +5 -75
- data/lib/water_drop/version.rb +1 -1
- data/lib/waterdrop.rb +0 -6
- data/waterdrop.gemspec +2 -3
- metadata +5 -24
- data/lib/water_drop/aspects/after_aspect.rb +0 -19
- data/lib/water_drop/aspects/around_aspect.rb +0 -22
- data/lib/water_drop/aspects/base_aspect.rb +0 -37
- data/lib/water_drop/aspects/before_aspect.rb +0 -18
- data/lib/water_drop/aspects/formatter.rb +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f15e7e19f6c653cae48eed591c3036b9813c6de
|
4
|
+
data.tar.gz: 7faded565baae3e1dc796d7e87b5591181a450d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f4f66bad01e5e24102130f5c7fbd30bf256480f57e4dc4764f9093949c94c8c1fac0b1f4259dedafb38e76e46d1b1ca78efa4550e54964b3928ab6a60fed929
|
7
|
+
data.tar.gz: b254e0081368a53e68cf0c12648ec7d6db4596f2735f4c1cfcdebad0323f11b99722adb6845a0953ef68b1330b77e85a3a1969304fb8712ec11719ddcf786bf2
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.3.0
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# WaterDrop changelog
|
2
2
|
|
3
|
+
## 0.2.0
|
4
|
+
- Version dump - this WaterDrop version no longer relies on Aspector to work
|
5
|
+
- #17 - Logger for Aspector - WaterDrop no longer depends on Aspector
|
6
|
+
- #8 - add send date as a default value added to a message - wontfix. Should be implemented on a message level since WaterDrop just transports messages without adding additional stuff.
|
7
|
+
- #11 - same as above
|
8
|
+
|
3
9
|
## 0.1.13
|
4
10
|
- Resolved bug #15. When you use waterdrop in aspect way, message will be automatically parse to JSON.
|
5
11
|
|
data/Gemfile.lock
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
waterdrop (0.
|
5
|
-
aspector
|
4
|
+
waterdrop (0.2.0)
|
6
5
|
bundler
|
7
6
|
connection_pool
|
8
7
|
null-logger
|
@@ -25,15 +24,14 @@ GEM
|
|
25
24
|
adamantium (0.2.0)
|
26
25
|
ice_nine (~> 0.11.0)
|
27
26
|
memoizable (~> 0.4.0)
|
28
|
-
|
29
|
-
ast (2.1.0)
|
27
|
+
ast (2.2.0)
|
30
28
|
astrolabe (1.3.1)
|
31
29
|
parser (~> 2.2)
|
32
30
|
axiom-types (0.1.1)
|
33
31
|
descendants_tracker (~> 0.0.4)
|
34
32
|
ice_nine (~> 0.11.0)
|
35
33
|
thread_safe (~> 0.3, >= 0.3.1)
|
36
|
-
brakeman (3.1.
|
34
|
+
brakeman (3.1.4)
|
37
35
|
erubis (~> 2.6)
|
38
36
|
fastercsv (~> 1.5)
|
39
37
|
haml (>= 3.0, < 5.0)
|
@@ -85,9 +83,9 @@ GEM
|
|
85
83
|
thread_safe (~> 0.3, >= 0.3.1)
|
86
84
|
method_source (0.8.2)
|
87
85
|
minitest (5.8.3)
|
88
|
-
mongo (2.2.
|
86
|
+
mongo (2.2.1)
|
89
87
|
bson (~> 4.0)
|
90
|
-
mongoid (5.0.
|
88
|
+
mongoid (5.0.2)
|
91
89
|
activemodel (~> 4.0)
|
92
90
|
mongo (~> 2.1)
|
93
91
|
origin (~> 2.1)
|
@@ -156,7 +154,7 @@ GEM
|
|
156
154
|
sexp_processor (~> 4.0)
|
157
155
|
ruby_parser (3.7.2)
|
158
156
|
sexp_processor (~> 4.1)
|
159
|
-
rubycritic (2.
|
157
|
+
rubycritic (2.4.0)
|
160
158
|
flay (= 2.6.1)
|
161
159
|
flog (= 4.3.2)
|
162
160
|
parser (>= 2.2.0, < 3.0)
|
@@ -212,4 +210,4 @@ DEPENDENCIES
|
|
212
210
|
waterdrop!
|
213
211
|
|
214
212
|
BUNDLED WITH
|
215
|
-
1.
|
213
|
+
1.11.2
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
[![Code Climate](https://codeclimate.com/github/karafka/waterdrop/badges/gpa.svg)](https://codeclimate.com/github/karafka/waterdrop)
|
5
5
|
[![Gem Version](https://badge.fury.io/rb/waterdrop.svg)](http://badge.fury.io/rb/waterdrop)
|
6
6
|
|
7
|
-
Gem used to send messages to Kafka in
|
7
|
+
Gem used to send messages to Kafka in an easy way.
|
8
8
|
|
9
9
|
## Installation
|
10
10
|
|
@@ -64,7 +64,7 @@ end
|
|
64
64
|
|
65
65
|
### Creating and sending standard messages
|
66
66
|
|
67
|
-
To send Kafka messages,
|
67
|
+
To send Kafka messages, just create and send messages directly:
|
68
68
|
|
69
69
|
```ruby
|
70
70
|
message = WaterDrop::Message.new('topic', 'message')
|
@@ -78,86 +78,16 @@ message that you want to send should be either binary or stringified (to_s, to_j
|
|
78
78
|
|
79
79
|
### Using aspects to handle messages
|
80
80
|
|
81
|
-
WaterDrop
|
82
|
-
|
83
|
-
In general aspects allows adding additional behavior to existing code without modifying the code itself. This way we can create and send messages, without "polluting" the business logic with it.
|
84
|
-
|
85
|
-
All the WaterDrop aspects accept following parameters:
|
86
|
-
|
87
|
-
| Option | Value type | Description |
|
88
|
-
|-------------------------|-----------------------|------------------------------------------------|
|
89
|
-
| ClassName | Class | Class to which we want to hook |
|
90
|
-
| method: :method_name | Symbol, Array<Symbol> | Method (or methods) to which we want to hook |
|
91
|
-
| topic: 'karafka_topic' | String, Symbol | Kafka topic to which we will send the message |
|
92
|
-
|
93
|
-
There also a *message*, *after_message* and *before_message* proc parameter that will be evaluated in the methods object context.
|
94
|
-
|
95
|
-
**Note**: If you use waterdrop in aspect way, the message will be parsed to JSON as default. If you want to change this behaviour, you must override WaterDrop::Aspects::Formatter class.
|
96
|
-
#### Before aspects hookup
|
97
|
-
|
98
|
-
```ruby
|
99
|
-
WaterDrop::Aspects::BeforeAspect.apply(
|
100
|
-
ClassName,
|
101
|
-
method: :run,
|
102
|
-
topic: 'karafka_topic',
|
103
|
-
message: -> { any_class_name_instance_method }
|
104
|
-
)
|
105
|
-
```
|
106
|
-
|
107
|
-
now each time before you run:
|
108
|
-
|
109
|
-
```ruby
|
110
|
-
ClassName.new.run
|
111
|
-
```
|
112
|
-
|
113
|
-
a message with the given message will be send to Kafka.
|
114
|
-
|
115
|
-
#### After aspects hookup
|
116
|
-
|
117
|
-
```ruby
|
118
|
-
WaterDrop::Aspects::AfterAspect.apply(
|
119
|
-
ClassName,
|
120
|
-
method: :run,
|
121
|
-
topic: 'karafka_topic',
|
122
|
-
message: ->(result) { "This is result of method run: #{result}" }
|
123
|
-
)
|
124
|
-
```
|
125
|
-
|
126
|
-
now each time after you run:
|
127
|
-
|
128
|
-
```ruby
|
129
|
-
ClassName.new.run
|
130
|
-
```
|
131
|
-
|
132
|
-
a message with the given message will be send to Kafka.
|
133
|
-
|
134
|
-
#### Around aspects hookup
|
135
|
-
|
136
|
-
```ruby
|
137
|
-
WaterDrop::Aspects::AroundAspect.apply(
|
138
|
-
ClassName,
|
139
|
-
method: :run,
|
140
|
-
topic: 'karafka_topic',
|
141
|
-
before_message: -> { any_class_name_instance_method },
|
142
|
-
after_message: ->(result) { "This is result of method run: #{result}" }
|
143
|
-
)
|
144
|
-
```
|
145
|
-
|
146
|
-
now each time you run:
|
147
|
-
|
148
|
-
```ruby
|
149
|
-
ClassName.new.run
|
150
|
-
```
|
151
|
-
|
152
|
-
a message with the given message will be send before and after the method execution.
|
81
|
+
WaterDrop no longer depends on [Aspector](https://github.com/gcao/aspector). Please refer to [Aspector](https://github.com/gcao/aspector) documentation if you want to handle messaging in an aspect way.
|
153
82
|
|
154
83
|
## References
|
155
84
|
|
156
85
|
* [Karafka framework](https://github.com/karafka/karafka)
|
157
86
|
* [Waterdrop](https://github.com/karafka/waterdrop)
|
158
|
-
* [
|
87
|
+
* [Worker Glass](https://github.com/karafka/worker-glass)
|
159
88
|
* [Envlogic](https://github.com/karafka/envlogic)
|
160
89
|
* [Null Logger](https://github.com/karafka/null-logger)
|
90
|
+
* [Aspector](https://github.com/gcao/aspector)
|
161
91
|
* [WaterDrop Travis CI](https://travis-ci.org/karafka/waterdrop)
|
162
92
|
* [WaterDrop Code Climate](https://codeclimate.com/github/karafka/waterdrop)
|
163
93
|
|
data/lib/water_drop/version.rb
CHANGED
data/lib/waterdrop.rb
CHANGED
@@ -7,7 +7,6 @@
|
|
7
7
|
pathname
|
8
8
|
json
|
9
9
|
poseidon
|
10
|
-
aspector
|
11
10
|
forwardable
|
12
11
|
connection_pool
|
13
12
|
null_logger
|
@@ -22,11 +21,6 @@ base_path = File.dirname(__FILE__) + '/water_drop'
|
|
22
21
|
pool
|
23
22
|
config
|
24
23
|
message
|
25
|
-
aspects/base_aspect
|
26
|
-
aspects/formatter
|
27
|
-
aspects/after_aspect
|
28
|
-
aspects/around_aspect
|
29
|
-
aspects/before_aspect
|
30
24
|
).each { |lib| require "#{base_path}/#{lib}" }
|
31
25
|
|
32
26
|
# WaterDrop library
|
data/waterdrop.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
lib = File.expand_path('../lib', __FILE__)
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
-
|
3
|
+
|
4
4
|
require 'water_drop/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
@@ -10,13 +10,12 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.authors = ['Maciej Mensfeld', 'Pavlo Vavruk']
|
11
11
|
spec.email = %w( maciej@mensfeld.pl pavlo.vavruk@gmail.com )
|
12
12
|
spec.homepage = 'https://github.com/karafka/waterdrop'
|
13
|
-
spec.summary = %q{ Kafka
|
13
|
+
spec.summary = %q{ Kafka messaging made easy! }
|
14
14
|
spec.description = spec.summary
|
15
15
|
spec.license = 'MIT'
|
16
16
|
|
17
17
|
spec.add_dependency 'bundler', '>= 0'
|
18
18
|
spec.add_dependency 'rake', '>= 0'
|
19
|
-
spec.add_dependency 'aspector', '>= 0'
|
20
19
|
spec.add_dependency 'poseidon', '>= 0'
|
21
20
|
spec.add_dependency 'connection_pool', '>= 0'
|
22
21
|
spec.add_dependency 'null-logger'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: waterdrop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maciej Mensfeld
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-12-
|
12
|
+
date: 2015-12-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -39,20 +39,6 @@ dependencies:
|
|
39
39
|
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
|
-
- !ruby/object:Gem::Dependency
|
43
|
-
name: aspector
|
44
|
-
requirement: !ruby/object:Gem::Requirement
|
45
|
-
requirements:
|
46
|
-
- - ">="
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: '0'
|
49
|
-
type: :runtime
|
50
|
-
prerelease: false
|
51
|
-
version_requirements: !ruby/object:Gem::Requirement
|
52
|
-
requirements:
|
53
|
-
- - ">="
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: '0'
|
56
42
|
- !ruby/object:Gem::Dependency
|
57
43
|
name: poseidon
|
58
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,7 +81,7 @@ dependencies:
|
|
95
81
|
- - ">="
|
96
82
|
- !ruby/object:Gem::Version
|
97
83
|
version: '0'
|
98
|
-
description: Kafka
|
84
|
+
description: Kafka messaging made easy!
|
99
85
|
email:
|
100
86
|
- maciej@mensfeld.pl
|
101
87
|
- pavlo.vavruk@gmail.com
|
@@ -113,11 +99,6 @@ files:
|
|
113
99
|
- MIT-LICENCE
|
114
100
|
- README.md
|
115
101
|
- Rakefile
|
116
|
-
- lib/water_drop/aspects/after_aspect.rb
|
117
|
-
- lib/water_drop/aspects/around_aspect.rb
|
118
|
-
- lib/water_drop/aspects/base_aspect.rb
|
119
|
-
- lib/water_drop/aspects/before_aspect.rb
|
120
|
-
- lib/water_drop/aspects/formatter.rb
|
121
102
|
- lib/water_drop/config.rb
|
122
103
|
- lib/water_drop/message.rb
|
123
104
|
- lib/water_drop/pool.rb
|
@@ -145,9 +126,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
126
|
version: '0'
|
146
127
|
requirements: []
|
147
128
|
rubyforge_project:
|
148
|
-
rubygems_version: 2.
|
129
|
+
rubygems_version: 2.5.1
|
149
130
|
signing_key:
|
150
131
|
specification_version: 4
|
151
|
-
summary: Kafka
|
132
|
+
summary: Kafka messaging made easy!
|
152
133
|
test_files: []
|
153
134
|
has_rdoc:
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module WaterDrop
|
2
|
-
module Aspects
|
3
|
-
# After method execution aspect
|
4
|
-
# @example Apply after aspect to a method
|
5
|
-
# WaterDrop::Aspects::AfterAspect.apply(
|
6
|
-
# ClassName,
|
7
|
-
# method: :run,
|
8
|
-
# topic: 'karafka_topic',
|
9
|
-
# message: ->(result) { "This is result of method run: #{result}" }
|
10
|
-
# )
|
11
|
-
class AfterAspect < BaseAspect
|
12
|
-
after options[:method], interception_arg: true do |interception, result, *args|
|
13
|
-
options = interception.options
|
14
|
-
interception.aspect.handle(self, options, args, options[:message], result)
|
15
|
-
result
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
module WaterDrop
|
2
|
-
module Aspects
|
3
|
-
# Around method execution aspect
|
4
|
-
# @example Apply around aspect to a method
|
5
|
-
# WaterDrop::Aspects::AroundAspect.apply(
|
6
|
-
# ClassName,
|
7
|
-
# method: :run,
|
8
|
-
# topic: 'karafka_topic',
|
9
|
-
# before_message: -> { any_class_name_instance_method },
|
10
|
-
# after_message: ->(result) { "This is result of method run: #{result}" }
|
11
|
-
# )
|
12
|
-
class AroundAspect < BaseAspect
|
13
|
-
around options[:method], interception_arg: true do |interception, proxy, *args, &block|
|
14
|
-
options = interception.options
|
15
|
-
interception.aspect.handle(self, options, args, options[:before_message])
|
16
|
-
result = proxy.call(*args, &block)
|
17
|
-
interception.aspect.handle(self, options, args, options[:after_message], result)
|
18
|
-
result
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
module WaterDrop
|
2
|
-
# Aspects module which include all available aspects
|
3
|
-
module Aspects
|
4
|
-
# Base class for all aspects
|
5
|
-
class BaseAspect < ::Aspector::Base
|
6
|
-
default private_methods: true
|
7
|
-
|
8
|
-
# @param this is an instance on which we execute aspect (original method caller)
|
9
|
-
# @param [Hash] options aspect options
|
10
|
-
# @param [Array] args original method arguments
|
11
|
-
# @param [Block] message block which we evaluate to get a message that we will send
|
12
|
-
# @param result original method result
|
13
|
-
def handle(this, options, args, message, *result)
|
14
|
-
formatter = Formatter.new(
|
15
|
-
options,
|
16
|
-
args,
|
17
|
-
instance_run(this, result, message)
|
18
|
-
)
|
19
|
-
|
20
|
-
Message.new(options[:topic], formatter.message).send!
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
# Method used to change message block binding, so it will be evaluated
|
26
|
-
# in the caller instance context
|
27
|
-
# @param this is an instance on which we execute aspect (original method caller)
|
28
|
-
# @param result original method call result
|
29
|
-
# @param [Block] message block
|
30
|
-
def instance_run(this, result, message)
|
31
|
-
return this.instance_eval(&message) if message.parameters.empty?
|
32
|
-
|
33
|
-
this.instance_exec(result, message) { |res, block| block.call(res.first) }
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module WaterDrop
|
2
|
-
module Aspects
|
3
|
-
# Before method execution aspect
|
4
|
-
# @example Apply before aspect to a method
|
5
|
-
# WaterDrop::Aspects::BeforeAspect.apply(
|
6
|
-
# ClassName,
|
7
|
-
# method: :run,
|
8
|
-
# topic: 'karafka_topic',
|
9
|
-
# message: -> { any_class_name_instance_method }
|
10
|
-
# )
|
11
|
-
class BeforeAspect < BaseAspect
|
12
|
-
before options[:method], interception_arg: true do |interception, *args|
|
13
|
-
options = interception.options
|
14
|
-
interception.aspect.handle(self, options, args, options[:message])
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
module WaterDrop
|
2
|
-
module Aspects
|
3
|
-
# Class used to format message that will be send from an aspect
|
4
|
-
class Formatter
|
5
|
-
# @param [Hash] options from an aspect
|
6
|
-
# @param [Array] args original method arguments
|
7
|
-
# @param result of execution of the method
|
8
|
-
def initialize(options, args, result)
|
9
|
-
@options = options
|
10
|
-
@args = args
|
11
|
-
@result = result
|
12
|
-
end
|
13
|
-
|
14
|
-
# @return [JSON] with formatted message that can be send
|
15
|
-
def message
|
16
|
-
{
|
17
|
-
topic: @options[:topic],
|
18
|
-
method: @options[:method],
|
19
|
-
message: @result,
|
20
|
-
args: @args
|
21
|
-
}.to_json
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|