waterdrop 0.1.13 → 0.2.0
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.
- 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
|
[](https://codeclimate.com/github/karafka/waterdrop)
|
5
5
|
[](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
|