knockapi 0.4.0 → 0.4.3

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
  SHA256:
3
- metadata.gz: 4565e1e9c707c9edcb5fad6fbe69c90dfabce8362507b7a1b817c1bf6440e094
4
- data.tar.gz: cdf934876f3e28a57ac42e8f6af8746f1ff9114987f692d1d419ff2cdec2cf49
3
+ metadata.gz: 1bb4aabec2c7c629eb81d5471e1c1be91af2183336a751e212cf536299b2fd7e
4
+ data.tar.gz: 50f6206a65e9ffa3c7d2cf99692ad5acb6fd3d7c337304b6f4a814fa2ba756f6
5
5
  SHA512:
6
- metadata.gz: c3e4cbf5daa9efb7c4c4ab1742ee403e2a3e7bd628c2b5540e93bfe6702dd99e4aae7a8748ced4bd5bd31942c454964ede695eceacf978e89ec608d39cc72520
7
- data.tar.gz: 04d8e14f0c4244897f0a5f8083fd993a2aa306506c755f81163bc739f5b357b5a621cb10b2493c3b9a6916269f1eed710a9823798cf4c1292550363bdd327083
6
+ metadata.gz: 72a821d5baf5e43d50054f44193052e3eab317f59506a675085b481fec8490bec453ea2eaa01ff6b2a16df4aa7955f5f46544d93d193771e448915c520186b16
7
+ data.tar.gz: 94df91c57a491f60a2dd5a122b4b6d3cf37cda6a3f63e639b489b8d182c60dab4ed138dc9a48e8fab1be21a0ff10ab06b5bbd8edad393e8c297793bc1275770c
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- knockapi (0.4.0)
4
+ knockapi (0.4.3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/lib/knock/client.rb CHANGED
@@ -18,7 +18,9 @@ module Knock
18
18
  http_status = response.code.to_i
19
19
  handle_error_response(response: response) if http_status >= 400
20
20
 
21
- JSON.parse(response.body)
21
+ if response.body and response.body != "" do
22
+ JSON.parse(response.body)
23
+ end
22
24
  end
23
25
 
24
26
  def get_request(path:, auth: false, params: {}, access_token: nil)
@@ -0,0 +1,88 @@
1
+ require "net/http"
2
+ require "uri"
3
+
4
+ module Knock
5
+ # Methods for interacting with messages in Knock
6
+ module Messages
7
+ class << self
8
+ include Base
9
+ include Client
10
+
11
+ # Retrieves a paginated list of messages for the provided environment
12
+ #
13
+ # @param [Hash] options Options to pass to the messages endpoint query
14
+ #
15
+ # @return [Hash] Paginated list of Message records
16
+ def list(options: {})
17
+ request = get_request(
18
+ auth: true,
19
+ path: "/v1/messages",
20
+ params: options
21
+ )
22
+
23
+ execute_request(request: request)
24
+ end
25
+
26
+ # Retrieves a Message
27
+ #
28
+ # @param [String] id The message id
29
+ #
30
+ # @return [Hash] The Message
31
+ def get(id:)
32
+ request = get_request(
33
+ auth: true,
34
+ path: "/v1/messages/#{id}"
35
+ )
36
+
37
+ execute_request(request: request)
38
+ end
39
+
40
+ # Get a Message's content
41
+ #
42
+ # @param [String] id The message id
43
+ #
44
+ # @return [Hash] The Message content
45
+ def get_content(id:)
46
+ request = get_request(
47
+ auth: true,
48
+ path: "/v1/messages/#{id}/content"
49
+ )
50
+
51
+ execute_request(request: request)
52
+ end
53
+
54
+ # Get a Message's activities
55
+ #
56
+ # @param [String] id The message id
57
+ # @param [Hash] options Options to pass to the paginated activities endpoint query
58
+ #
59
+ # @return [Hash] Paginated Message's activities
60
+ def get_activities(id:, options: {})
61
+ request = get_request(
62
+ auth: true,
63
+ path: "/v1/messages/#{id}/activities",
64
+ params: options
65
+ )
66
+
67
+ execute_request(request: request)
68
+ end
69
+
70
+ # Get a Message's events
71
+ #
72
+ # @param [String] id The message id
73
+ # @param [Hash] options Options to pass to the paginated events endpoint query
74
+ #
75
+ # @return [Hash] Paginated Message's events
76
+ def get_events(id:, options: {})
77
+ request = get_request(
78
+ auth: true,
79
+ path: "/v1/messages/#{id}/events",
80
+ params: options
81
+ )
82
+
83
+ execute_request(request: request)
84
+ end
85
+ end
86
+ end
87
+ end
88
+
data/lib/knock/objects.rb CHANGED
@@ -8,6 +8,8 @@ module Knock
8
8
  include Base
9
9
  include Client
10
10
 
11
+ DEFAULT_PREFERENCE_SET_ID = "default"
12
+
11
13
  # Retrieves an Object in a collection
12
14
  #
13
15
  # @param [String] collection The collection the object is in
@@ -111,7 +113,7 @@ module Knock
111
113
  # @param [Hash] channel_data channel data
112
114
  #
113
115
  # @return [Hash] channel data
114
- def set_channel_data(id:, channel_id:, channel_data:)
116
+ def set_channel_data(collection:, id:, channel_id:, channel_data:)
115
117
  request = put_request(
116
118
  auth: true,
117
119
  path: "/v1/objects/#{collection}/#{id}/channel_data/#{channel_id}",
@@ -120,6 +122,179 @@ module Knock
120
122
 
121
123
  execute_request(request: request)
122
124
  end
125
+
126
+ # Unsets object channel data for the given channel id
127
+ #
128
+ # @param [String] collection The collection the object is in
129
+ # @param [String] id The object id
130
+ # @param [String] channel_id target channel ID
131
+ #
132
+ # @return [Hash] channel data
133
+ def unset_channel_data(collection:, id:, channel_id:)
134
+ request = delete_request(
135
+ auth: true,
136
+ path: "/v1/objects/#{collection}/#{id}/channel_data/#{channel_id}"
137
+ )
138
+
139
+ execute_request(request: request)
140
+ end
141
+
142
+ # Get object's messages
143
+ #
144
+ # @param [String] collection The collection the object is in
145
+ # @param [String] id The object id
146
+ # @param [Hash] options Options to pass to the messages endpoint query
147
+ #
148
+ # @return [Hash] Paginated messages response
149
+ def get_messages(collection:, id:, options: {})
150
+ request = get_request(
151
+ auth: true,
152
+ path: "/v1/objects/#{collection}/#{id}/messages",
153
+ params: options
154
+ )
155
+
156
+ execute_request(request: request)
157
+ end
158
+
159
+ ##
160
+ # Preferences
161
+ ##
162
+
163
+ # Returns all preference sets for the object
164
+ #
165
+ # @param [String] collection The collection the object is in
166
+ # @param [String] id The object id
167
+ #
168
+ # @return [Array] The preference sets
169
+ def get_all_preferences(collection:, id:)
170
+ endpoint = "/v1/objects/#{collection}/#{id}/preferences"
171
+
172
+ request = get_request(
173
+ auth: true,
174
+ path: endpoint
175
+ )
176
+
177
+ execute_request(request: request)
178
+ end
179
+
180
+ # Gets a single preference set, defaults to the 'default' set
181
+ # for the object given.
182
+ #
183
+ # @param [String] collection The collection the object is in
184
+ # @param [String] id The object id
185
+ # @param [String] preference_set The preference set ID (defaults to `default`)
186
+ #
187
+ # @return [Hash] The preference set (if it exists)
188
+ def get_preferences(collection:, id:, preference_set: DEFAULT_PREFERENCE_SET_ID)
189
+ endpoint = "/v1/objects/#{collection}/#{id}/preferences/#{preference_set}"
190
+
191
+ request = get_request(
192
+ auth: true,
193
+ path: endpoint
194
+ )
195
+
196
+ execute_request(request: request)
197
+ end
198
+
199
+ # Sets multiple preferences at once for the preference set.
200
+ #
201
+ # @param [String] collection The collection the object is in
202
+ # @param [String] id The object id
203
+ # @param [String] preference_set The preference set ID (defaults to `default`)
204
+ # @param [Hash] channel_types The channel_types hash to set
205
+ # @param [Hash] workflows The workflows hash to set
206
+ # @param [Hash] categories The categories hash to set
207
+ #
208
+ # @return [Hash] The preference set
209
+ def set_preferences(
210
+ collection:,
211
+ id:,
212
+ channel_types: nil,
213
+ workflows: nil,
214
+ categories: nil,
215
+ preference_set: DEFAULT_PREFERENCE_SET_ID
216
+ )
217
+ endpoint = "/v1/objects/#{collection}/#{id}/preferences/#{preference_set}"
218
+
219
+ request = put_request(
220
+ auth: true,
221
+ path: endpoint,
222
+ body: {
223
+ channel_types: channel_types,
224
+ workflows: workflows,
225
+ categories: categories
226
+ }
227
+ )
228
+
229
+ execute_request(request: request)
230
+ end
231
+
232
+ # Sets preferences for the given channel type
233
+ #
234
+ # @param [String] collection The collection the object is in
235
+ # @param [String] id The object id
236
+ # @param [String] preference_set The preference set ID (defaults to `default`)
237
+ # @param [String] channel_type The channel type to set
238
+ # @param [Bool] setting Whether the channel type is enabled or not
239
+ #
240
+ # @return [Hash] The preference set
241
+ def set_channel_type_preferences(collection:, id:, channel_type:, setting:, preference_set: DEFAULT_PREFERENCE_SET_ID)
242
+ endpoint = "/v1/objects/#{collection}/#{id}/preferences/#{preference_set}/channel_types/#{channel_type}"
243
+
244
+ request = put_request(
245
+ auth: true,
246
+ path: endpoint,
247
+ body: {subscribed: setting}
248
+ )
249
+
250
+ execute_request(request: request)
251
+ end
252
+
253
+ # Sets preferences for the given workflow
254
+ #
255
+ # @param [String] collection The collection the object is in
256
+ # @param [String] id The object id
257
+ # @param [String] preference_set The preference set ID (defaults to `default`)
258
+ # @param [String] workflow The workflow to set preferences for
259
+ # @param [Bool | Hash] setting Either a boolean to indicate if the type is enabled
260
+ # or a hash containing channel types and settings
261
+ #
262
+ # @return [Hash] The preference set
263
+ def set_workflow_preferences(collection:, id:, workflow:, setting:, preference_set: DEFAULT_PREFERENCE_SET_ID)
264
+ params = setting.is_a?(Hash) ? setting : {subscribed: setting}
265
+ endpoint = "/v1/objects/#{collection}/#{id}/preferences/#{preference_set}/workflows/#{workflow}"
266
+
267
+ request = put_request(
268
+ auth: true,
269
+ path: endpoint,
270
+ body: params
271
+ )
272
+
273
+ execute_request(request: request)
274
+ end
275
+
276
+ # Sets preferences for the given category
277
+ #
278
+ # @param [String] collection The collection the object is in
279
+ # @param [String] id The object id
280
+ # @param [String] preference_set The preference set ID (defaults to `default`)
281
+ # @param [String] category The category to set preferences for
282
+ # @param [Bool | Hash] setting Either a boolean to indicate if the type is enabled
283
+ # or a hash containing channel types and settings
284
+ #
285
+ # @return [Hash] The preference set
286
+ def set_category_preferences(collection:, id:, category:, setting:, preference_set: DEFAULT_PREFERENCE_SET_ID)
287
+ params = setting.is_a?(Hash) ? setting : {subscribed: setting}
288
+ endpoint = "/v1/objects/#{collection}/#{id}/preferences/#{preference_set}/categories/#{category}"
289
+
290
+ request = put_request(
291
+ auth: true,
292
+ path: endpoint,
293
+ body: params
294
+ )
295
+
296
+ execute_request(request: request)
297
+ end
123
298
  end
124
299
  end
125
300
  end
data/lib/knock/users.rb CHANGED
@@ -101,6 +101,22 @@ module Knock
101
101
  execute_request(request: request)
102
102
  end
103
103
 
104
+ # Merges the user specified with `from_user_id` into the user specified with `user_id`.
105
+ #
106
+ # @param [String] id The user id to merge into.
107
+ # @param [String] from_user_id The user id to merge from
108
+ #
109
+ # @return [Hash] the merged User
110
+ def merge(id:, from_user_id:)
111
+ request = post_request(
112
+ auth: true,
113
+ path: "/v1/users/#{id}/merge",
114
+ body: {from_user_id: from_user_id}
115
+ )
116
+
117
+ execute_request(request: request)
118
+ end
119
+
104
120
  ##
105
121
  # Preferences
106
122
  ##
@@ -300,6 +316,42 @@ module Knock
300
316
 
301
317
  execute_request(request: request)
302
318
  end
319
+
320
+ # Unsets user's channel data for the given channel id
321
+ #
322
+ # @param [String] id the user ID
323
+ # @param [String] channel_id target channel ID
324
+ # @param [Hash] channel_data channel data
325
+ #
326
+ # @return [Hash] channel data
327
+ def unset_channel_data(id:, channel_id:)
328
+ request = delete_request(
329
+ auth: true,
330
+ path: "/v1/users/#{id}/channel_data/#{channel_id}"
331
+ )
332
+
333
+ execute_request(request: request)
334
+ end
335
+
336
+ ##
337
+ # Messages
338
+ ##
339
+
340
+ # Get user's messages
341
+ #
342
+ # @param [String] id the user ID
343
+ # @param [Hash] options Options to pass to the messages endpoint query
344
+ #
345
+ # @return [Hash] Paginated messages response
346
+ def get_messages(id:, options: {})
347
+ request = get_request(
348
+ auth: true,
349
+ path: "/v1/users/#{id}/messages",
350
+ params: options
351
+ )
352
+
353
+ execute_request(request: request)
354
+ end
303
355
  end
304
356
  end
305
357
  end
data/lib/knock/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Knock
4
- VERSION = "0.4.0"
4
+ VERSION = "0.4.3"
5
5
  end
@@ -11,7 +11,7 @@ module Knock
11
11
  # Triggers the workflow with the given key
12
12
  #
13
13
  # @param [String] key The workflow key
14
- # @param [String, Hash] actor The actor identifier
14
+ # @param [String, Hash] actor The actor identifier (optional)
15
15
  # @param [Array<String, Hash>] recipients The recipient identifiers
16
16
  # @param [Hash] data The data to pass to the workflow
17
17
  # @param [String] cancellation_key An optional key to identify this workflow
data/lib/knock.rb CHANGED
@@ -27,6 +27,7 @@ module Knock
27
27
  autoload :Workflows, "knock/workflows"
28
28
  autoload :BulkOperations, "knock/bulk_operations"
29
29
  autoload :Objects, "knock/objects"
30
+ autoload :Messages, "knock/messages"
30
31
 
31
32
  # Errors
32
33
  autoload :APIError, "knock/errors"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knockapi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Knock Labs, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-14 00:00:00.000000000 Z
11
+ date: 2022-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -76,6 +76,7 @@ files:
76
76
  - lib/knock/bulk_operations.rb
77
77
  - lib/knock/client.rb
78
78
  - lib/knock/errors.rb
79
+ - lib/knock/messages.rb
79
80
  - lib/knock/objects.rb
80
81
  - lib/knock/preferences.rb
81
82
  - lib/knock/users.rb
@@ -101,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
102
  - !ruby/object:Gem::Version
102
103
  version: '0'
103
104
  requirements: []
104
- rubygems_version: 3.3.3
105
+ rubygems_version: 3.3.7
105
106
  signing_key:
106
107
  specification_version: 4
107
108
  summary: API client for Knock