knockapi 0.3.0 → 0.4.2

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: c8d8593021545fcd9b7c40062469882c43afe76a8777579719978ba9e54027ae
4
- data.tar.gz: daad9dcf8d90f026cf056711b0616663edc9715d214e4a8e6b46a8c9ab021424
3
+ metadata.gz: ed79d84e9b6070feed5df6299073f396d7739c43a5a7c5a1ed2bb87e91722f5a
4
+ data.tar.gz: 99360a722f4a6f669940d38c08688edb64effb68f4805f26fe3d790dce7038bc
5
5
  SHA512:
6
- metadata.gz: 4525ed1305fded0310eb782031bd2e832dea431c94a6cddbeab5b72e06ee67b35458e78f1135f03911f41e0b669ee4819b514160a2bb198a648241972e3f3c6d
7
- data.tar.gz: ab4906c79209c2159e6e2b420a1c7ad53752f174fd1bf10312afbe0775b47d38cbd11d793e7e400a3411fb6f48166018d9b5a4f8af7497b50b2ee40b0f72cb66
6
+ metadata.gz: 670a433ef51923fb02f0af1abd618e848c6b5574dc919766ccec8583d364f9a6f3ca2f618592a1c3ed95245a028302eaa2d288d6a1b0b2d8eb979153e4dbaf16
7
+ data.tar.gz: 9bcbe07af9a0125fb77d1f3ce50bc190ecf12ac2c32f71e214c93a6492276960343d4e59ad7fe98411ebccbdeea7da29de54f78da5a1041471d6bed2d0e6eb55
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- knockapi (0.3.0)
4
+ knockapi (0.4.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -35,6 +35,7 @@ GEM
35
35
  unicode-display_width (2.0.0)
36
36
 
37
37
  PLATFORMS
38
+ ruby
38
39
  x86_64-darwin-19
39
40
 
40
41
  DEPENDENCIES
data/README.md CHANGED
@@ -98,7 +98,7 @@ require "knockapi"
98
98
  Knock.key = "sk_12345"
99
99
 
100
100
  # Set an entire preference set
101
- Knock::Preferences.set(
101
+ Knock::Users.set_preferences(
102
102
  user_id: "jhammond",
103
103
  channel_types: { email: true, sms: false },
104
104
  workflows: {
@@ -109,7 +109,7 @@ Knock::Preferences.set(
109
109
  )
110
110
 
111
111
  # Get an entire preference set
112
- Knock::Preferences.get(user_id: "jhammond")
112
+ Knock::Users.get_preferences(user_id: "jhammond")
113
113
  ```
114
114
 
115
115
  ### Getting and setting channel data
@@ -0,0 +1,26 @@
1
+ require "net/http"
2
+ require "uri"
3
+
4
+ module Knock
5
+ # Provides convienience methods for working with bulk operations
6
+ module BulkOperations
7
+ class << self
8
+ include Base
9
+ include Client
10
+
11
+ # Retrieves the given bulk operation
12
+ #
13
+ # @param [String] id The bulk operation ID
14
+ #
15
+ # @return [Hash] The bulk operation
16
+ def get(id:)
17
+ request = get_request(
18
+ auth: true,
19
+ path: "/v1/bulk_operations/#{id}"
20
+ )
21
+
22
+ execute_request(request: request)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -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
+
@@ -0,0 +1,142 @@
1
+ require "net/http"
2
+ require "uri"
3
+
4
+ module Knock
5
+ # Provides convienience methods for working with bulk operations
6
+ module Objects
7
+ class << self
8
+ include Base
9
+ include Client
10
+
11
+ # Retrieves an Object in a collection
12
+ #
13
+ # @param [String] collection The collection the object is in
14
+ # @param [String] id The object id
15
+ #
16
+ # @return [Hash] The Object
17
+ def get(collection:, id:)
18
+ request = get_request(
19
+ auth: true,
20
+ path: "/v1/objects/#{collection}/#{id}"
21
+ )
22
+
23
+ execute_request(request: request)
24
+ end
25
+
26
+ # Upserts an Object in a collection
27
+ #
28
+ # @param [String] collection The collection the object is in
29
+ # @param [String] id The object id
30
+ # @param [Hash] properties The properties to set on the object
31
+ #
32
+ # @return [Hash] The Object
33
+ def set(collection:, id:, properties: {})
34
+ request = put_request(
35
+ auth: true,
36
+ path: "/v1/objects/#{collection}/#{id}",
37
+ body: properties
38
+ )
39
+
40
+ execute_request(request: request)
41
+ end
42
+
43
+ # Bulk upserts Objects in a collection
44
+ #
45
+ # @param [String] collection The collection the object is in
46
+ # @param [Array<Hash>] objects The objects to upsert
47
+ #
48
+ # @return [Hash] a BulkOperation
49
+ def bulk_set(collection:, objects: [])
50
+ request = post_request(
51
+ auth: true,
52
+ path: "/v1/objects/#{collection}/bulk/set",
53
+ body: {objects: objects}
54
+ )
55
+
56
+ execute_request(request: request)
57
+ end
58
+
59
+ # Deletes an Object in a collection
60
+ #
61
+ # @param [String] collection The collection the object is in
62
+ # @param [String] id The object id
63
+ #
64
+ # @return [nil] Nothing
65
+ def delete(collection:, id:)
66
+ request = delete_request(
67
+ auth: true,
68
+ path: "/v1/objects/#{collection}/#{id}"
69
+ )
70
+
71
+ execute_request(request: request)
72
+ end
73
+
74
+ # Bulk deletes Objects in a collection
75
+ #
76
+ # @param [String] collection The collection the object is in
77
+ # @param [Array<String>] object_ids The object ids to delete
78
+ #
79
+ # @return [Hash] a BulkOperation
80
+ def bulk_delete(collection:, object_ids: [])
81
+ request = post_request(
82
+ auth: true,
83
+ path: "/v1/objects/#{collection}/bulk/delete",
84
+ body: {object_ids: object_ids}
85
+ )
86
+
87
+ execute_request(request: request)
88
+ end
89
+
90
+ # Get object channel data for the given channel id
91
+ #
92
+ # @param [String] collection The collection the object is in
93
+ # @param [String] id The object id
94
+ # @param [String] channel_id target channel ID
95
+ #
96
+ # @return [Hash] channel data
97
+ def get_channel_data(collection:, id:, channel_id:)
98
+ request = get_request(
99
+ auth: true,
100
+ path: "/v1/objects/#{collection}/#{id}/channel_data/#{channel_id}"
101
+ )
102
+
103
+ execute_request(request: request)
104
+ end
105
+
106
+ # Upserts object channel data for the given channel id
107
+ #
108
+ # @param [String] collection The collection the object is in
109
+ # @param [String] id The object id
110
+ # @param [String] channel_id target channel ID
111
+ # @param [Hash] channel_data channel data
112
+ #
113
+ # @return [Hash] channel data
114
+ def set_channel_data(id:, channel_id:, channel_data:)
115
+ request = put_request(
116
+ auth: true,
117
+ path: "/v1/objects/#{collection}/#{id}/channel_data/#{channel_id}",
118
+ body: {data: channel_data}
119
+ )
120
+
121
+ execute_request(request: request)
122
+ end
123
+
124
+ # Get object's messages
125
+ #
126
+ # @param [String] collection The collection the object is in
127
+ # @param [String] id The object id
128
+ # @param [Hash] options Options to pass to the messages endpoint query
129
+ #
130
+ # @return [Hash] Paginated messages response
131
+ def get_messages(collection:, id:, options: {})
132
+ request = get_request(
133
+ auth: true,
134
+ path: "/v1/objects/#{collection}/#{id}/messages",
135
+ params: options
136
+ )
137
+
138
+ execute_request(request: request)
139
+ end
140
+ end
141
+ end
142
+ end
@@ -2,28 +2,20 @@ require "net/http"
2
2
  require "uri"
3
3
 
4
4
  module Knock
5
- # Provides convienience methods for working with preferences
5
+ # Provides convienience methods for working with preferences (deprecated)
6
6
  module Preferences
7
7
  class << self
8
8
  include Base
9
9
  include Client
10
10
 
11
- DEFAULT_SET_ID = "default"
12
-
13
11
  # Returns all preference sets for the user
14
12
  #
15
13
  # @param [String] user_id The ID of the user to retrieve preferences for
16
14
  #
17
15
  # @return [Hash] The preference sets
16
+ # @deprecated Please use {#Knock::Users.get_all_preferences} instead
18
17
  def get_all(user_id:)
19
- endpoint = "/v1/users/#{user_id}/preferences"
20
-
21
- request = get_request(
22
- auth: true,
23
- path: endpoint
24
- )
25
-
26
- execute_request(request: request)
18
+ Knock::Users.get_all_preferences(user_id: user_id)
27
19
  end
28
20
 
29
21
  # Gets a single preference set, defaults to the 'default' set
@@ -33,15 +25,9 @@ module Knock
33
25
  # @param [String] preference_set The preference set ID (defaults to `default`)
34
26
  #
35
27
  # @return [Hash] The preference set (if it exists)
36
- def get(user_id:, preference_set: DEFAULT_SET_ID)
37
- endpoint = "/v1/users/#{user_id}/preferences/#{preference_set}"
38
-
39
- request = get_request(
40
- auth: true,
41
- path: endpoint
42
- )
43
-
44
- execute_request(request: request)
28
+ # @deprecated Please use {#Knock::Users.get_preferences} instead
29
+ def get(user_id:, preference_set:)
30
+ Knock::Users.get_preferences(user_id: user_id, preference_set: preference_set)
45
31
  end
46
32
 
47
33
  # Sets multiple preferences at once for the preference set.
@@ -51,26 +37,20 @@ module Knock
51
37
  # @param [Hash] preferences The preferences hash to set
52
38
  #
53
39
  #  @return [Hash] The preference set
40
+ # @deprecated Please use {#Knock::Users.set_preferences} instead
54
41
  def update(
55
42
  user_id:,
56
- channel_types: nil,
43
+ preference_set:, channel_types: nil,
57
44
  workflows: nil,
58
- categories: nil,
59
- preference_set: DEFAULT_SET_ID
45
+ categories: nil
60
46
  )
61
- endpoint = "/v1/users/#{user_id}/preferences/#{preference_set}"
62
-
63
- request = put_request(
64
- auth: true,
65
- path: endpoint,
66
- body: {
67
- channel_types: channel_types,
68
- workflows: workflows,
69
- categories: categories
70
- }
47
+ Knock::Users.set_preferences(
48
+ user_id: user_id,
49
+ channel_types: channel_types,
50
+ workflows: workflows,
51
+ categories: categories,
52
+ preference_set: preference_set
71
53
  )
72
-
73
- execute_request(request: request)
74
54
  end
75
55
 
76
56
  # Sets preferences for the given channel type
@@ -80,17 +60,15 @@ module Knock
80
60
  # @param [String] channel_type The channel type to set
81
61
  # @param [Bool] setting Whether the channel type is enabled or not
82
62
  #
83
- #  @return [Hash] The preference set
84
- def set_channel_type(user_id:, channel_type:, setting:, preference_set: DEFAULT_SET_ID)
85
- endpoint = "/v1/users/#{user_id}/preferences/#{preference_set}/channel_types/#{channel_type}"
86
-
87
- request = put_request(
88
- auth: true,
89
- path: endpoint,
90
- body: {subscribed: setting}
63
+ # @return [Hash] The preference set
64
+ # @deprecated Please use {#Knock::Users.set_channel_type_preferences} instead
65
+ def set_channel_type(user_id:, channel_type:, setting:, preference_set:)
66
+ Knock::Users.set_channel_type_preferences(
67
+ user_id: user_id,
68
+ channel_type: channel_type,
69
+ setting: setting,
70
+ preference_set: preference_set
91
71
  )
92
-
93
- execute_request(request: request)
94
72
  end
95
73
 
96
74
  # Sets preferences for the given workflow
@@ -101,18 +79,15 @@ module Knock
101
79
  # @param [Bool | Hash] setting Either a boolean to indicate if the type is enabled
102
80
  # or a hash containing channel types and settings
103
81
  #
104
- #  @return [Hash] The preference set
105
- def set_workflow(user_id:, workflow:, setting:, preference_set: DEFAULT_SET_ID)
106
- params = setting.is_a?(Hash) ? setting : {subscribed: setting}
107
- endpoint = "/v1/users/#{user_id}/preferences/#{preference_set}/workflows/#{workflow}"
108
-
109
- request = put_request(
110
- auth: true,
111
- path: endpoint,
112
- body: params
82
+ # @return [Hash] The preference set
83
+ # @deprecated Please use {#Knock::Users.set_workflow_preferences} instead
84
+ def set_workflow(user_id:, workflow:, setting:, preference_set:)
85
+ Knock::Users.set_workflow_preferences(
86
+ user_id: user_id,
87
+ workflow: workflow,
88
+ setting: setting,
89
+ preference_set: preference_set
113
90
  )
114
-
115
- execute_request(request: request)
116
91
  end
117
92
 
118
93
  # Sets preferences for the given category
@@ -123,18 +98,15 @@ module Knock
123
98
  # @param [Bool | Hash] setting Either a boolean to indicate if the type is enabled
124
99
  # or a hash containing channel types and settings
125
100
  #
126
- #  @return [Hash] The preference set
127
- def set_category(user_id:, category:, setting:, preference_set: DEFAULT_SET_ID)
128
- params = setting.is_a?(Hash) ? setting : {subscribed: setting}
129
- endpoint = "/v1/users/#{user_id}/preferences/#{preference_set}/categories/#{category}"
130
-
131
- request = put_request(
132
- auth: true,
133
- path: endpoint,
134
- body: params
101
+ # @return [Hash] The preference set
102
+ # @deprecated Please use {#Knock::Users.set_category_preferences} instead
103
+ def set_category(user_id:, category:, setting:, preference_set:)
104
+ Knock::Users.set_category_preferences(
105
+ user_id: user_id,
106
+ category: category,
107
+ setting: setting,
108
+ preference_set: preference_set
135
109
  )
136
-
137
- execute_request(request: request)
138
110
  end
139
111
  end
140
112
  end
data/lib/knock/users.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
  # Identifies the user
12
14
  #
13
15
  # @param [String] id The user ID
@@ -24,6 +26,21 @@ module Knock
24
26
  execute_request(request: request)
25
27
  end
26
28
 
29
+ # Bulk identifies users
30
+ #
31
+ # @param [Array<Hash>] users The users to upsert
32
+ #
33
+ # @return [Hash] the BulkOperation
34
+ def bulk_identify(users: [])
35
+ request = post_request(
36
+ auth: true,
37
+ path: "/v1/users/bulk/identify",
38
+ body: {users: users}
39
+ )
40
+
41
+ execute_request(request: request)
42
+ end
43
+
27
44
  # Retrieves the given user
28
45
  #
29
46
  # @param [String] id The user ID
@@ -52,6 +69,222 @@ module Knock
52
69
  execute_request(request: request)
53
70
  end
54
71
 
72
+ # Bulk deletes users
73
+ #
74
+ # @param [Array<String>] user_ids The users to delete
75
+ #
76
+ # @return [Hash] the BulkOperation
77
+ def bulk_delete(user_ids: [])
78
+ request = post_request(
79
+ auth: true,
80
+ path: "/v1/users/bulk/delete",
81
+ body: {user_ids: user_ids}
82
+ )
83
+
84
+ execute_request(request: request)
85
+ end
86
+
87
+ # Gets a feed for a user
88
+ #
89
+ # @param [String] id The user id
90
+ # @param [String] channel_id The feed id to retrieve
91
+ # @param [Hash] options Options to pass to the feed query
92
+ #
93
+ # @return [Hash] the feed response
94
+ def get_feed(id:, channel_id:, options: {})
95
+ request = get_request(
96
+ auth: true,
97
+ path: "/v1/users/#{id}/feeds/#{channel_id}",
98
+ params: options
99
+ )
100
+
101
+ execute_request(request: request)
102
+ end
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
+
120
+ ##
121
+ # Preferences
122
+ ##
123
+
124
+ # Returns all preference sets for the user
125
+ #
126
+ # @param [String] user_id The ID of the user to retrieve preferences for
127
+ #
128
+ # @return [Hash] The preference sets
129
+ def get_all_preferences(user_id:)
130
+ endpoint = "/v1/users/#{user_id}/preferences"
131
+
132
+ request = get_request(
133
+ auth: true,
134
+ path: endpoint
135
+ )
136
+
137
+ execute_request(request: request)
138
+ end
139
+
140
+ # Gets a single preference set, defaults to the 'default' set
141
+ # for the user given.
142
+ #
143
+ # @param [String] user_id The ID of the user to retrieve preferences for
144
+ # @param [String] preference_set The preference set ID (defaults to `default`)
145
+ #
146
+ # @return [Hash] The preference set (if it exists)
147
+ def get_preferences(user_id:, preference_set: DEFAULT_PREFERENCE_SET_ID)
148
+ endpoint = "/v1/users/#{user_id}/preferences/#{preference_set}"
149
+
150
+ request = get_request(
151
+ auth: true,
152
+ path: endpoint
153
+ )
154
+
155
+ execute_request(request: request)
156
+ end
157
+
158
+ # Sets multiple preferences at once for the preference set.
159
+ #
160
+ # @param [String] user_id The ID of the user to set preferences for
161
+ # @param [String] preference_set The preference set ID (defaults to `default`)
162
+ # @param [Hash] channel_types The channel_types hash to set
163
+ # @param [Hash] workflows The workflows hash to set
164
+ # @param [Hash] categories The categories hash to set
165
+ #
166
+ # @return [Hash] The preference set
167
+ def set_preferences(
168
+ user_id:,
169
+ channel_types: nil,
170
+ workflows: nil,
171
+ categories: nil,
172
+ preference_set: DEFAULT_PREFERENCE_SET_ID
173
+ )
174
+ endpoint = "/v1/users/#{user_id}/preferences/#{preference_set}"
175
+
176
+ request = put_request(
177
+ auth: true,
178
+ path: endpoint,
179
+ body: {
180
+ channel_types: channel_types,
181
+ workflows: workflows,
182
+ categories: categories
183
+ }
184
+ )
185
+
186
+ execute_request(request: request)
187
+ end
188
+
189
+ # Bulk sets the preference object for the users.
190
+ #
191
+ # @param [Array<String>] user_ids The ID of the user to set preferences for
192
+ # @param [Hash] preferences The preferences hash to set
193
+ # @param [String] preference_set The preference set ID (defaults to `default`)
194
+ #
195
+ # @return [Hash] BulkOperation
196
+ def bulk_set_preferences(
197
+ user_ids: [],
198
+ preferences: {},
199
+ preference_set: DEFAULT_PREFERENCE_SET_ID
200
+ )
201
+ endpoint = "/v1/users/bulk/preferences"
202
+
203
+ # Put the preference set id if it doesn't already exist
204
+ unless preferences.has_key("id")
205
+ preferences["id"] = preference_set
206
+ end
207
+
208
+ request = put_request(
209
+ auth: true,
210
+ path: endpoint,
211
+ body: {
212
+ user_ids: user_ids,
213
+ preferences: preferences
214
+ }
215
+ )
216
+
217
+ execute_request(request: request)
218
+ end
219
+
220
+ # Sets preferences for the given channel type
221
+ #
222
+ # @param [String] user_id The ID of the user to set preferences for
223
+ # @param [String] preference_set The preference set ID (defaults to `default`)
224
+ # @param [String] channel_type The channel type to set
225
+ # @param [Bool] setting Whether the channel type is enabled or not
226
+ #
227
+ # @return [Hash] The preference set
228
+ def set_channel_type_preferences(user_id:, channel_type:, setting:, preference_set: DEFAULT_PREFERENCE_SET_ID)
229
+ endpoint = "/v1/users/#{user_id}/preferences/#{preference_set}/channel_types/#{channel_type}"
230
+
231
+ request = put_request(
232
+ auth: true,
233
+ path: endpoint,
234
+ body: {subscribed: setting}
235
+ )
236
+
237
+ execute_request(request: request)
238
+ end
239
+
240
+ # Sets preferences for the given workflow
241
+ #
242
+ # @param [String] user_id The ID of the user to set preferences for
243
+ # @param [String] preference_set The preference set ID (defaults to `default`)
244
+ # @param [String] workflow The workflow to set preferences for
245
+ # @param [Bool | Hash] setting Either a boolean to indicate if the type is enabled
246
+ # or a hash containing channel types and settings
247
+ #
248
+ # @return [Hash] The preference set
249
+ def set_workflow_preferences(user_id:, workflow:, setting:, preference_set: DEFAULT_PREFERENCE_SET_ID)
250
+ params = setting.is_a?(Hash) ? setting : {subscribed: setting}
251
+ endpoint = "/v1/users/#{user_id}/preferences/#{preference_set}/workflows/#{workflow}"
252
+
253
+ request = put_request(
254
+ auth: true,
255
+ path: endpoint,
256
+ body: params
257
+ )
258
+
259
+ execute_request(request: request)
260
+ end
261
+
262
+ # Sets preferences for the given category
263
+ #
264
+ # @param [String] user_id The ID of the user to set preferences for
265
+ # @param [String] preference_set The preference set ID (defaults to `default`)
266
+ # @param [String] category The category to set preferences for
267
+ # @param [Bool | Hash] setting Either a boolean to indicate if the type is enabled
268
+ # or a hash containing channel types and settings
269
+ #
270
+ # @return [Hash] The preference set
271
+ def set_category_preferences(user_id:, category:, setting:, preference_set: DEFAULT_PREFERENCE_SET_ID)
272
+ params = setting.is_a?(Hash) ? setting : {subscribed: setting}
273
+ endpoint = "/v1/users/#{user_id}/preferences/#{preference_set}/categories/#{category}"
274
+
275
+ request = put_request(
276
+ auth: true,
277
+ path: endpoint,
278
+ body: params
279
+ )
280
+
281
+ execute_request(request: request)
282
+ end
283
+
284
+ ##
285
+ # Channel data
286
+ ##
287
+
55
288
  # Get user's channel data for the given channel id
56
289
  #
57
290
  # @param [String] id the user ID
@@ -71,14 +304,34 @@ module Knock
71
304
  #
72
305
  # @param [String] id the user ID
73
306
  # @param [String] channel_id target channel ID
74
- # @param [String] channel_data channel data
307
+ # @param [Hash] channel_data channel data
75
308
  #
76
309
  # @return [Hash] channel data
77
310
  def set_channel_data(id:, channel_id:, channel_data:)
78
311
  request = put_request(
79
312
  auth: true,
80
313
  path: "/v1/users/#{id}/channel_data/#{channel_id}",
81
- body: { "data": channel_data }
314
+ body: {data: channel_data}
315
+ )
316
+
317
+ execute_request(request: request)
318
+ end
319
+
320
+ ##
321
+ # Messages
322
+ ##
323
+
324
+ # Get user's messages
325
+ #
326
+ # @param [String] id the user ID
327
+ # @param [Hash] options Options to pass to the messages endpoint query
328
+ #
329
+ # @return [Hash] Paginated messages response
330
+ def get_messages(id:, options: {})
331
+ request = get_request(
332
+ auth: true,
333
+ path: "/v1/users/#{id}/messages",
334
+ params: options
82
335
  )
83
336
 
84
337
  execute_request(request: request)
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.3.0"
4
+ VERSION = "0.4.2"
5
5
  end
@@ -11,8 +11,8 @@ module Knock
11
11
  # Triggers the workflow with the given key
12
12
  #
13
13
  # @param [String] key The workflow key
14
- # @param [String] actor The actor ID
15
- # @param [Array<String>] recipients The recipient IDs
14
+ # @param [String, Hash] actor The actor identifier (optional)
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
18
18
  # invocation for cancelling
@@ -41,7 +41,7 @@ module Knock
41
41
  #
42
42
  # @param [String] key The workflow key
43
43
  # @param [String] cancellation_key The cancellation key
44
- # @param [Array<String>] recipients The recipient IDs to cancel for
44
+ # @param [Array<String, Hash>] recipients The recipient identifiers
45
45
  #
46
46
  # @return [Hash] - Cancellation result
47
47
  def cancel(key:, cancellation_key:, recipients: nil)
data/lib/knock.rb CHANGED
@@ -25,6 +25,9 @@ module Knock
25
25
  autoload :Preferences, "knock/preferences"
26
26
  autoload :Users, "knock/users"
27
27
  autoload :Workflows, "knock/workflows"
28
+ autoload :BulkOperations, "knock/bulk_operations"
29
+ autoload :Objects, "knock/objects"
30
+ autoload :Messages, "knock/messages"
28
31
 
29
32
  # Errors
30
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.3.0
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Knock Labs, Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-26 00:00:00.000000000 Z
11
+ date: 2022-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -73,8 +73,11 @@ files:
73
73
  - knockapi.gemspec
74
74
  - lib/knock.rb
75
75
  - lib/knock/base.rb
76
+ - lib/knock/bulk_operations.rb
76
77
  - lib/knock/client.rb
77
78
  - lib/knock/errors.rb
79
+ - lib/knock/messages.rb
80
+ - lib/knock/objects.rb
78
81
  - lib/knock/preferences.rb
79
82
  - lib/knock/users.rb
80
83
  - lib/knock/version.rb
@@ -84,7 +87,7 @@ licenses:
84
87
  - MIT
85
88
  metadata:
86
89
  documentation_uri: https://docs.knock.app
87
- post_install_message:
90
+ post_install_message:
88
91
  rdoc_options: []
89
92
  require_paths:
90
93
  - lib
@@ -99,8 +102,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
99
102
  - !ruby/object:Gem::Version
100
103
  version: '0'
101
104
  requirements: []
102
- rubygems_version: 3.2.26
103
- signing_key:
105
+ rubygems_version: 3.3.7
106
+ signing_key:
104
107
  specification_version: 4
105
108
  summary: API client for Knock
106
109
  test_files: []