pheromone 0.1.0 → 0.1.1
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/README.md +35 -19
- data/lib/pheromone/version.rb +1 -1
- data/lib/pheromone.rb +1 -1
- metadata +24 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1bc0ae4ecb429df63bc40406f5cce6cff3a00fe1
|
4
|
+
data.tar.gz: a459c5422e13328a2301345fd54dc6269b27faee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2cc5100938018080e908b82f8168d1f92fea428572148422a036fb7fe2e40fde9d1603993cb761c3624fe9f1f26162209946680bdbe862908c976b8fda30976e
|
7
|
+
data.tar.gz: 00c32581b39cf273e9ffe702fc1ec4cdc20de5217e4c335b9c8a6c2463a12aaee80b4928a0449ad26409431c1d75fe953ce9fb0907aa1421b77573fc18ce646e
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Pheromones are chemical substances secreted from glands and used as a means of communication.
|
4
4
|
|
5
|
-
`pheromone`
|
5
|
+
`pheromone` allows setting up producers that publish `ActiveRecord` updates to Kafka whenever there is a model update and/or create.
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
@@ -57,7 +57,7 @@ WaterDrop.setup do |config|
|
|
57
57
|
config.raise_on_failure = Rails.env.production?
|
58
58
|
end
|
59
59
|
```
|
60
|
-
|
60
|
+
|
61
61
|
## Usage
|
62
62
|
|
63
63
|
### 1. Supported events
|
@@ -66,7 +66,7 @@ end
|
|
66
66
|
```
|
67
67
|
class PublishableModel < ActiveRecord::Base
|
68
68
|
include Pheromone
|
69
|
-
publish
|
69
|
+
publish [
|
70
70
|
{
|
71
71
|
event_types: [:create],
|
72
72
|
topic: :topic1,
|
@@ -81,7 +81,7 @@ end
|
|
81
81
|
```
|
82
82
|
class PublishableModel < ActiveRecord::Base
|
83
83
|
include Pheromone
|
84
|
-
publish
|
84
|
+
publish [
|
85
85
|
{
|
86
86
|
event_types: [:update],
|
87
87
|
topic: :topic1,
|
@@ -89,18 +89,18 @@ class PublishableModel < ActiveRecord::Base
|
|
89
89
|
}
|
90
90
|
]
|
91
91
|
end
|
92
|
-
```
|
92
|
+
```
|
93
93
|
|
94
94
|
Messages can be published for multiple event types by defining `events_types: [:create, :update]`.
|
95
95
|
|
96
96
|
### 2. Supported message formats
|
97
97
|
|
98
|
-
#### 2.a. Using a proc in `message`
|
98
|
+
#### 2.a. Using a proc in `message`
|
99
99
|
|
100
100
|
```
|
101
101
|
class PublishableModel < ActiveRecord::Base
|
102
102
|
include Pheromone
|
103
|
-
publish
|
103
|
+
publish [
|
104
104
|
{
|
105
105
|
event_types: [:create],
|
106
106
|
topic: :topic1,
|
@@ -110,25 +110,41 @@ class PublishableModel < ActiveRecord::Base
|
|
110
110
|
end
|
111
111
|
```
|
112
112
|
|
113
|
-
#### 2.
|
113
|
+
#### 2.b. Using a defined function in `message`
|
114
114
|
|
115
115
|
```
|
116
116
|
class PublishableModel < ActiveRecord::Base
|
117
117
|
include Pheromone
|
118
|
-
publish
|
118
|
+
publish [
|
119
119
|
{
|
120
120
|
event_types: [:update],
|
121
121
|
topic: :topic1,
|
122
|
-
message: message
|
122
|
+
message: message
|
123
123
|
}
|
124
124
|
]
|
125
|
-
|
125
|
+
|
126
126
|
def message
|
127
127
|
{ name: self.name }
|
128
128
|
end
|
129
129
|
end
|
130
130
|
```
|
131
131
|
|
132
|
+
#### 2.c. Using a serializer in `message`
|
133
|
+
|
134
|
+
```
|
135
|
+
class PublishableModel < ActiveRecord::Base
|
136
|
+
include Pheromone
|
137
|
+
publish [
|
138
|
+
{
|
139
|
+
event_types: [:create],
|
140
|
+
topic: :topic1,
|
141
|
+
serializer: Class.new(BaseSerializer) { attributes :name, :type }
|
142
|
+
}
|
143
|
+
]
|
144
|
+
end
|
145
|
+
```
|
146
|
+
|
147
|
+
|
132
148
|
### 3. Sending messages conditionally
|
133
149
|
|
134
150
|
#### 3.a. Using a proc in `if`
|
@@ -136,15 +152,15 @@ end
|
|
136
152
|
```
|
137
153
|
class PublishableModel < ActiveRecord::Base
|
138
154
|
include Pheromone
|
139
|
-
publish
|
155
|
+
publish [
|
140
156
|
{
|
141
157
|
event_types: [:update],
|
142
158
|
topic: :topic1,
|
143
159
|
message: message,
|
144
160
|
if: ->(data) { data.condition },
|
145
161
|
}
|
146
|
-
]
|
147
|
-
|
162
|
+
]
|
163
|
+
|
148
164
|
def message
|
149
165
|
{ name: self.name }
|
150
166
|
end
|
@@ -155,19 +171,19 @@ end
|
|
155
171
|
```
|
156
172
|
class PublishableModel < ActiveRecord::Base
|
157
173
|
include Pheromone
|
158
|
-
publish
|
174
|
+
publish [
|
159
175
|
{
|
160
176
|
event_types: [:update],
|
161
177
|
topic: :topic1,
|
162
178
|
message: message,
|
163
179
|
if: pre_condition
|
164
180
|
}
|
165
|
-
]
|
166
|
-
|
181
|
+
]
|
182
|
+
|
167
183
|
def pre_condition
|
168
184
|
name.present?
|
169
185
|
end
|
170
|
-
|
186
|
+
|
171
187
|
def message
|
172
188
|
{ name: self.name }
|
173
189
|
end
|
@@ -182,7 +198,7 @@ The kafka topic can be specified in the `topic` option to `publish`. To publish
|
|
182
198
|
```
|
183
199
|
class PublishableModel < ActiveRecord::Base
|
184
200
|
include Pheromone
|
185
|
-
publish
|
201
|
+
publish [
|
186
202
|
{
|
187
203
|
event_types: [:create],
|
188
204
|
topic: :topic_test,
|
data/lib/pheromone/version.rb
CHANGED
data/lib/pheromone.rb
CHANGED
metadata
CHANGED
@@ -1,43 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pheromone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ankita Gupta
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: sqlite3
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: activesupport
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
|
-
- - "
|
31
|
+
- - ">="
|
18
32
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
33
|
+
version: 4.2.5
|
20
34
|
type: :runtime
|
21
35
|
prerelease: false
|
22
36
|
version_requirements: !ruby/object:Gem::Requirement
|
23
37
|
requirements:
|
24
|
-
- - "
|
38
|
+
- - ">="
|
25
39
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
40
|
+
version: 4.2.5
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: activerecord
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
|
-
- - "
|
45
|
+
- - ">="
|
32
46
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
47
|
+
version: 4.2.5
|
34
48
|
type: :runtime
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
|
-
- - "
|
52
|
+
- - ">="
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
54
|
+
version: 4.2.5
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: active_model_serializers
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|