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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5c735c271b3d680d047c20a0c3d8c5b812400a96
4
- data.tar.gz: 8c1ea2816a7ed80d3d8b20defb89396ab5be8b1e
3
+ metadata.gz: 1bc0ae4ecb429df63bc40406f5cce6cff3a00fe1
4
+ data.tar.gz: a459c5422e13328a2301345fd54dc6269b27faee
5
5
  SHA512:
6
- metadata.gz: 8e1bdd606fdb35a7870a68a18bdb494196c6d1ac0047d9c1e93ede7e15e1a93033a960ad27bbc1274282dad08f63dd7abdc1684017f488d7cff200f5dbea8400
7
- data.tar.gz: f7e6085d96d6f55d19cbbd93958e8c6f4ea0cb23cedc3618b1f55550c3ee4397644eb7bc8bc2e8a383b1d588de7c938ecfdd1c1ec7cfd012bc9ef7b4932b4e40
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` is a mixin to easily send `ActiveRecord` updates to Kafka whenever there is a model update and/or create.
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 message_options: [
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 message_options: [
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 message_options: [
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.a. Using a defined function in `message`
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 message_options: [
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 message_options: [
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 message_options: [
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 message_options: [
201
+ publish [
186
202
  {
187
203
  event_types: [:create],
188
204
  topic: :topic_test,
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Pheromone
3
- VERSION = '0.1.0'.freeze
3
+ VERSION = '0.1.1'.freeze
4
4
  end
data/lib/pheromone.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'pheromone/version'
2
2
  require 'pheromone/options_validator'
3
3
  require 'active_support'
4
-
4
+ require 'waterdrop'
5
5
  # Usage: For publishing messages to kafka, include this concern
6
6
  # in the model and then add
7
7
  #
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.0
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-06-13 00:00:00.000000000 Z
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: '5.0'
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: '5.0'
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: '5.0'
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: '5.0'
54
+ version: 4.2.5
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: active_model_serializers
43
57
  requirement: !ruby/object:Gem::Requirement