cirro-ruby-client 1.6.2 → 2.0.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/.gitignore +5 -0
- data/.rubocop.yml +28 -11
- data/Gemfile.lock +9 -6
- data/README.md +338 -0
- data/bin/console +1 -0
- data/cirro-ruby-client.gemspec +1 -0
- data/lib/cirro_io/client/gig.rb +0 -2
- data/lib/cirro_io/client/version.rb +1 -1
- data/lib/cirro_io_v2/client.rb +106 -0
- data/lib/cirro_io_v2/errors/http_error.rb +17 -0
- data/lib/cirro_io_v2/errors/response_not_json_error.rb +17 -0
- data/lib/cirro_io_v2/request_clients/base.rb +21 -0
- data/lib/cirro_io_v2/request_clients/jwt.rb +41 -0
- data/lib/cirro_io_v2/resources/base.rb +21 -0
- data/lib/cirro_io_v2/resources/gig.rb +10 -0
- data/lib/cirro_io_v2/resources/gig_ivitation.rb +18 -0
- data/lib/cirro_io_v2/resources/notification_broadcast.rb +13 -0
- data/lib/cirro_io_v2/resources/notification_configuration.rb +13 -0
- data/lib/cirro_io_v2/resources/notification_layout.rb +27 -0
- data/lib/cirro_io_v2/resources/notification_layout_template.rb +18 -0
- data/lib/cirro_io_v2/resources/notification_locale.rb +18 -0
- data/lib/cirro_io_v2/resources/notification_template.rb +25 -0
- data/lib/cirro_io_v2/resources/notification_topic.rb +17 -0
- data/lib/cirro_io_v2/resources/notification_topic_preference.rb +17 -0
- data/lib/cirro_io_v2/resources/user.rb +15 -0
- data/lib/cirro_io_v2/responses/base.rb +32 -0
- data/lib/cirro_io_v2/responses/responses.rb +101 -0
- metadata +36 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c6f840761d7276eb20c0fe1b6fd52eb8d4bb7752905b390e13fb41878749ad9d
|
4
|
+
data.tar.gz: 39a164fcca5006eb8216bda852c9d39fcf470af6d2ac1f8e6e1c3c076dfdf9ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 388fc09b1a3a4172c1db748a388821a4ff8187df8e716d0daaa747dd37683b4c3dbf7dd3d8b6203c482f3790ed22f7f736ebee289ac9edbbffb2b07f55808560
|
7
|
+
data.tar.gz: dc18388fda39c84bc201d0ee77ea0dd772e266c48f27975e8fe53597bb2f1e74916ad17cb257e4bbe4defa72377207d93b053f04f6c7ab7f8963eb6f08fdac99
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -10,18 +10,26 @@ AllCops:
|
|
10
10
|
- 'vendor/**/*'
|
11
11
|
- 'spec/fixtures/**/*'
|
12
12
|
|
13
|
-
Metrics/
|
14
|
-
|
13
|
+
Metrics/AbcSize:
|
14
|
+
Enabled: false
|
15
|
+
|
16
|
+
Metrics/ClassLength:
|
17
|
+
Enabled: false
|
18
|
+
|
19
|
+
Metrics/CyclomaticComplexity:
|
20
|
+
Enabled: false
|
15
21
|
|
16
22
|
Layout/LineLength:
|
17
23
|
Max: 160
|
18
24
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
+
Metrics/ModuleLength:
|
26
|
+
Enabled: false
|
27
|
+
|
28
|
+
Metrics/MethodLength:
|
29
|
+
Enabled: false
|
30
|
+
|
31
|
+
Metrics/PerceivedComplexity:
|
32
|
+
Enabled: false
|
25
33
|
|
26
34
|
Style/StringLiterals:
|
27
35
|
EnforcedStyle: single_quotes
|
@@ -35,9 +43,6 @@ Style/NumericLiterals:
|
|
35
43
|
Style/SignalException:
|
36
44
|
EnforcedStyle: only_raise
|
37
45
|
|
38
|
-
Metrics/ClassLength:
|
39
|
-
Max: 120
|
40
|
-
|
41
46
|
# TODO: enable this when Ruby 3.0 is out.
|
42
47
|
Style/FrozenStringLiteralComment:
|
43
48
|
Enabled: false
|
@@ -107,6 +112,9 @@ Style/HashTransformValues:
|
|
107
112
|
RSpec/FilePath:
|
108
113
|
Enabled: true
|
109
114
|
IgnoreMethods: true
|
115
|
+
Exclude:
|
116
|
+
- "spec/cirro_io_v2/**/*_spec.rb"
|
117
|
+
|
110
118
|
|
111
119
|
Style/Documentation:
|
112
120
|
Enabled: false
|
@@ -114,5 +122,14 @@ Style/Documentation:
|
|
114
122
|
RSpec/ExampleLength:
|
115
123
|
Enabled: false
|
116
124
|
|
125
|
+
RSpec/EmptyExampleGroup:
|
126
|
+
Enabled: false
|
127
|
+
|
117
128
|
RSpec/MultipleExpectations:
|
118
129
|
Enabled: false
|
130
|
+
|
131
|
+
Style/SymbolArray:
|
132
|
+
EnforcedStyle: brackets
|
133
|
+
|
134
|
+
Style/WordArray:
|
135
|
+
EnforcedStyle: brackets
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cirro-ruby-client (
|
4
|
+
cirro-ruby-client (2.0.0)
|
5
|
+
activesupport
|
5
6
|
faraday (< 1.2.0)
|
6
7
|
faraday_middleware
|
7
8
|
json_api_client (>= 1.10.0)
|
@@ -10,13 +11,14 @@ PATH
|
|
10
11
|
GEM
|
11
12
|
remote: https://rubygems.org/
|
12
13
|
specs:
|
13
|
-
activemodel (
|
14
|
-
activesupport (=
|
15
|
-
activesupport (
|
14
|
+
activemodel (6.1.5)
|
15
|
+
activesupport (= 6.1.5)
|
16
|
+
activesupport (6.1.5)
|
16
17
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
17
18
|
i18n (>= 1.6, < 2)
|
18
19
|
minitest (>= 5.1)
|
19
20
|
tzinfo (~> 2.0)
|
21
|
+
zeitwerk (~> 2.3)
|
20
22
|
addressable (2.8.0)
|
21
23
|
public_suffix (>= 2.0.2, < 5.0)
|
22
24
|
ast (2.4.1)
|
@@ -41,7 +43,7 @@ GEM
|
|
41
43
|
faraday (>= 0.15.2, < 2.0)
|
42
44
|
faraday_middleware (>= 0.9.0, < 2.0)
|
43
45
|
rack (>= 0.2)
|
44
|
-
jwt (2.3
|
46
|
+
jwt (2.2.3)
|
45
47
|
method_source (1.0.0)
|
46
48
|
minitest (5.15.0)
|
47
49
|
multipart-post (2.1.1)
|
@@ -92,6 +94,7 @@ GEM
|
|
92
94
|
addressable (>= 2.3.6)
|
93
95
|
crack (>= 0.3.2)
|
94
96
|
hashdiff (>= 0.4.0, < 2.0.0)
|
97
|
+
zeitwerk (2.5.4)
|
95
98
|
|
96
99
|
PLATFORMS
|
97
100
|
ruby
|
@@ -107,4 +110,4 @@ DEPENDENCIES
|
|
107
110
|
webmock
|
108
111
|
|
109
112
|
BUNDLED WITH
|
110
|
-
2.
|
113
|
+
2.2.25
|
data/README.md
CHANGED
@@ -70,3 +70,341 @@ CirroIO::Client::Payout.create(
|
|
70
70
|
billing_date: DateTime.now
|
71
71
|
)
|
72
72
|
```
|
73
|
+
|
74
|
+
# CirroIOV2::Client
|
75
|
+
|
76
|
+
## Configuration
|
77
|
+
|
78
|
+
```ruby
|
79
|
+
# with key path
|
80
|
+
client = CirroIOV2::Client.new(private_key_path: "./storage/cirro_key.pem", client_id: "WULnc6Y0rlaTBCSiHAb0kGWKFuIxPWBXJysyZeG3Rtw", site: "https://api.staging.cirro.io")
|
81
|
+
|
82
|
+
# with key string
|
83
|
+
client = CirroIOV2::Client.new(private_key: Rails.application.credentials.cirro_private_key, client_id: "WULnc6Y0rlaTBCSiHAb0kGWKFuIxPWBXJysyZeG3Rtw", site: "https://api.staging.cirro.io")
|
84
|
+
```
|
85
|
+
|
86
|
+
# Usage
|
87
|
+
|
88
|
+
## User
|
89
|
+
### Get user info
|
90
|
+
|
91
|
+
```ruby
|
92
|
+
user = client.User.find(1)
|
93
|
+
# => User object
|
94
|
+
|
95
|
+
user.first_name
|
96
|
+
# => 'Grazyna'
|
97
|
+
|
98
|
+
user.worker
|
99
|
+
# => { billable: false, document: {...} }
|
100
|
+
```
|
101
|
+
|
102
|
+
### Get notification preferences for a user
|
103
|
+
|
104
|
+
```ruby
|
105
|
+
preference = client.User.get_notification_preference(1)
|
106
|
+
# => NotificationPreference object
|
107
|
+
|
108
|
+
preference.id
|
109
|
+
# => '1'
|
110
|
+
|
111
|
+
preference.locale
|
112
|
+
# => 'de'
|
113
|
+
|
114
|
+
preference.channels
|
115
|
+
# => Array of NotificationChannelPreference objects
|
116
|
+
```
|
117
|
+
|
118
|
+
### Update notification preferences for a user
|
119
|
+
|
120
|
+
```ruby
|
121
|
+
client.User.update_notification_preference({
|
122
|
+
locale: 'de',
|
123
|
+
channels: [
|
124
|
+
{ id: '1', preferences: { email: 'immediately' } },
|
125
|
+
{ id: '2', preferences: { email: 'digest_daily' } }
|
126
|
+
]
|
127
|
+
})
|
128
|
+
```
|
129
|
+
|
130
|
+
## Gig
|
131
|
+
### Create a gig
|
132
|
+
|
133
|
+
```ruby
|
134
|
+
client.Gig.create(
|
135
|
+
title: "Favourite programming language?",
|
136
|
+
description: "Description of gig ...",
|
137
|
+
url: "http://heathcote.co/zina.gibson",
|
138
|
+
start_at: 1652285764,
|
139
|
+
end_at: 1653412329,
|
140
|
+
total_seats: 2,
|
141
|
+
invitation_mode: "auto",
|
142
|
+
filter_query: {
|
143
|
+
status: "active",
|
144
|
+
segment: "my_favorite_testers"
|
145
|
+
},
|
146
|
+
tasks: [
|
147
|
+
{ title: "Ah, Wilderness!", base_price: 300 }
|
148
|
+
],
|
149
|
+
notification_payload: {
|
150
|
+
project_title: "Corporate Tax",
|
151
|
+
task_title: "Add dataset",
|
152
|
+
task_type: "Review"
|
153
|
+
},
|
154
|
+
epam_options: {
|
155
|
+
extra_mile: true
|
156
|
+
}
|
157
|
+
)
|
158
|
+
# => Gig object
|
159
|
+
```
|
160
|
+
|
161
|
+
## GigInvitation
|
162
|
+
### Get list of gig invitations
|
163
|
+
|
164
|
+
By default the response is paginated with 10 per page. The `has_more` attribute indicates whether there're more records to be fetched or not.
|
165
|
+
You can move from page to page using `after` or `before`.
|
166
|
+
|
167
|
+
```ruby
|
168
|
+
# return all with max limit
|
169
|
+
client.GigInvitation.list(limit: 100)
|
170
|
+
|
171
|
+
# return paginated after gig invitation ID 100
|
172
|
+
client.GigInvitation.list(limit: 100, after: 100)
|
173
|
+
|
174
|
+
# return paginated before gig invitation ID 100
|
175
|
+
client.GigInvitation.list(limit: 100, before: 100)
|
176
|
+
|
177
|
+
# filter by user with ID 1 and gig with ID 1
|
178
|
+
client.GigInvitation.list(user_id: 1, gig_id: 1)
|
179
|
+
|
180
|
+
# filter by status
|
181
|
+
client.GigInvitation.list(status: ['pending', 'accepted'])
|
182
|
+
client.GigInvitation.list(status: 'accepted')
|
183
|
+
|
184
|
+
list = client.GigInvitation.list(limit: 100)
|
185
|
+
# => ListObject
|
186
|
+
|
187
|
+
list.has_more?
|
188
|
+
# => true
|
189
|
+
|
190
|
+
list.data
|
191
|
+
# => Array of GigInvitation objects
|
192
|
+
```
|
193
|
+
|
194
|
+
### Accept a gig invitation
|
195
|
+
|
196
|
+
```ruby
|
197
|
+
client.GigInvitation.accept(1)
|
198
|
+
```
|
199
|
+
|
200
|
+
## Notification Locale
|
201
|
+
### Create a notification locale
|
202
|
+
|
203
|
+
```ruby
|
204
|
+
locale = client.NotificationLocale.create(locale: 'de')
|
205
|
+
# => NotificationLocale object
|
206
|
+
|
207
|
+
locale.locale
|
208
|
+
# => 'de'
|
209
|
+
|
210
|
+
locale.configurations
|
211
|
+
# => Array of NotificationConfiguration objects
|
212
|
+
```
|
213
|
+
|
214
|
+
### List all notification locales
|
215
|
+
|
216
|
+
```ruby
|
217
|
+
list = client.NotificationLocale.list
|
218
|
+
# => ListObject
|
219
|
+
|
220
|
+
list.has_more?
|
221
|
+
# => true
|
222
|
+
|
223
|
+
list.data
|
224
|
+
# => Array of NotificationLocale objects
|
225
|
+
|
226
|
+
client.NotificationLocale.list(default: true) # filter by default
|
227
|
+
```
|
228
|
+
|
229
|
+
## Notification Configuration
|
230
|
+
### List all notification configurations
|
231
|
+
|
232
|
+
```ruby
|
233
|
+
list = client.NotificationConfiguration.list
|
234
|
+
# => ListObject
|
235
|
+
|
236
|
+
list.has_more?
|
237
|
+
# => true
|
238
|
+
|
239
|
+
list.data
|
240
|
+
# => Array of NotificationConfiguration objects
|
241
|
+
|
242
|
+
client.NotificationConfiguration.list(locale: 'de') # filter by locale
|
243
|
+
|
244
|
+
client.NotificationConfiguration.list(limit: 100, after: 100) # pagination
|
245
|
+
```
|
246
|
+
|
247
|
+
## Notification Layout
|
248
|
+
### Create a notification layout
|
249
|
+
|
250
|
+
```ruby
|
251
|
+
client.NotificationLayout.create(
|
252
|
+
name: 'custom_layout',
|
253
|
+
templates: [
|
254
|
+
{ notification_configuration_id: '1', body: '<p>hello {{recipient}}</p>' },
|
255
|
+
{ notification_configuration_id: '2', body: '<p>hallo {{recipient}}</p>' }
|
256
|
+
]
|
257
|
+
)
|
258
|
+
```
|
259
|
+
|
260
|
+
### Update a notification layout
|
261
|
+
|
262
|
+
```ruby
|
263
|
+
client.NotificationLayout.update('1', name: 'custom_layout')
|
264
|
+
```
|
265
|
+
|
266
|
+
### Create a new template
|
267
|
+
|
268
|
+
```ruby
|
269
|
+
client.NotificationLayout.create_template(
|
270
|
+
'1',
|
271
|
+
{ notification_configuration_id: '1', body: '<p>hello {{recipient}}</p>' }
|
272
|
+
)
|
273
|
+
# => NotificationLayoutTemplate object
|
274
|
+
```
|
275
|
+
|
276
|
+
## Notification Layout Template
|
277
|
+
### Update a notification layout template
|
278
|
+
|
279
|
+
```ruby
|
280
|
+
client.NotificationLayoutTemplate.update(
|
281
|
+
'1',
|
282
|
+
{ notification_configuration_id: '1', body: '<p>hello {{recipient}}</p>' }
|
283
|
+
)
|
284
|
+
```
|
285
|
+
### Delete a notification layout template
|
286
|
+
|
287
|
+
```ruby
|
288
|
+
client.NotificationLayoutTemplate.delete('1')
|
289
|
+
```
|
290
|
+
|
291
|
+
## Notification Channel
|
292
|
+
### List all notification channels
|
293
|
+
|
294
|
+
```ruby
|
295
|
+
list = client.NotificationChannel
|
296
|
+
# => ListObject
|
297
|
+
|
298
|
+
list.has_more?
|
299
|
+
# => true
|
300
|
+
|
301
|
+
list.data
|
302
|
+
# => Array of NotificationChannel objects
|
303
|
+
|
304
|
+
# filter by layout_id
|
305
|
+
client.NotificationChannel.list(notification_layout_id: 1)
|
306
|
+
|
307
|
+
# pagination
|
308
|
+
client.NotificationChannel.list(limit: 10, after: 10)
|
309
|
+
```
|
310
|
+
|
311
|
+
### Create a notification channel
|
312
|
+
|
313
|
+
```ruby
|
314
|
+
client.NotificationChannel.create(
|
315
|
+
name: 'new_bug_comment',
|
316
|
+
notification_layout_id: 1,
|
317
|
+
preferences: {
|
318
|
+
email: 'immediately'
|
319
|
+
},
|
320
|
+
templates: [
|
321
|
+
{
|
322
|
+
"notification_configuration_id": "1",
|
323
|
+
"subject": "New Bug Comment",
|
324
|
+
"body": "Hello {{recipient_first_name}}, you got {{pluralize count, 'new comment', 'new comments'}}"
|
325
|
+
},
|
326
|
+
{
|
327
|
+
"notification_configuration_id": "2",
|
328
|
+
"subject": "Neuer Kommentar",
|
329
|
+
"body": "Hallo {{recipient_first_name}}, Du hast {{pluralize count, 'neuen Kommentar', 'neue Kommentare'}}"
|
330
|
+
}
|
331
|
+
]
|
332
|
+
)
|
333
|
+
```
|
334
|
+
|
335
|
+
## Notification (Channel) Template
|
336
|
+
### List all
|
337
|
+
|
338
|
+
```ruby
|
339
|
+
list = client.NotificationTemplate
|
340
|
+
# => ListObject
|
341
|
+
|
342
|
+
list.has_more?
|
343
|
+
# => true
|
344
|
+
|
345
|
+
list.data
|
346
|
+
# => Array of NotificationTemplate objects
|
347
|
+
|
348
|
+
# filter by channel id
|
349
|
+
client.NotificationTemplate.list(notification_channel_id: 1)
|
350
|
+
|
351
|
+
# filter by configuration id
|
352
|
+
client.NotificationTemplate.list(notification_configuration_id: 1)
|
353
|
+
|
354
|
+
# pagination
|
355
|
+
client.NotificationTemplate.list(limit: 10, after: 10)
|
356
|
+
```
|
357
|
+
|
358
|
+
### Update a notification template
|
359
|
+
|
360
|
+
```ruby
|
361
|
+
client.NotificationTemplate.update(
|
362
|
+
'1',
|
363
|
+
"subject": "New Bug Comment",
|
364
|
+
"body": "Hello {{recipient_first_name}}, you got {{pluralize count, 'new comment', 'new comments'}}"
|
365
|
+
)
|
366
|
+
```
|
367
|
+
|
368
|
+
### Delete a notification template
|
369
|
+
|
370
|
+
```ruby
|
371
|
+
client.NotificationTemplate.delete('1')
|
372
|
+
```
|
373
|
+
## Notifcation Channel Preference
|
374
|
+
### List all
|
375
|
+
|
376
|
+
```ruby
|
377
|
+
list = client.NotificationChannelPreference.list
|
378
|
+
# => ListObject
|
379
|
+
|
380
|
+
list.has_more?
|
381
|
+
# => true
|
382
|
+
|
383
|
+
list.data
|
384
|
+
# => Array of NotificationChannelPreference objects
|
385
|
+
|
386
|
+
# filter by channel id
|
387
|
+
client.NotificationChannelPreference.list(notification_channel_id: 1)
|
388
|
+
|
389
|
+
# filter by user id
|
390
|
+
client.NotificationChannelPreference.list(user_id: 1)
|
391
|
+
|
392
|
+
# pagination
|
393
|
+
client.NotificationChannelPreference.list(limit: 10, after: 10)
|
394
|
+
```
|
395
|
+
|
396
|
+
## Notifcation Broadcast
|
397
|
+
### Create a notifcation broadcast
|
398
|
+
|
399
|
+
```ruby
|
400
|
+
client.NotificationBroadcast.create(
|
401
|
+
payload: {
|
402
|
+
foo: 'bar',
|
403
|
+
key: 'value'
|
404
|
+
},
|
405
|
+
recipients: {
|
406
|
+
user_ids: [1, 2, 3]
|
407
|
+
},
|
408
|
+
notification_channel_id: 1
|
409
|
+
)
|
410
|
+
```
|
data/bin/console
CHANGED
data/cirro-ruby-client.gemspec
CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
26
26
|
spec.require_paths = ['lib']
|
27
27
|
|
28
|
+
spec.add_runtime_dependency 'activesupport'
|
28
29
|
spec.add_runtime_dependency 'jwt'
|
29
30
|
spec.add_runtime_dependency 'faraday', '< 1.2.0'
|
30
31
|
spec.add_runtime_dependency 'faraday_middleware'
|
data/lib/cirro_io/client/gig.rb
CHANGED
@@ -8,7 +8,6 @@ module CirroIO
|
|
8
8
|
has_many :gig_results
|
9
9
|
has_many :gig_time_activities
|
10
10
|
|
11
|
-
# rubocop:disable Metrics/AbcSize
|
12
11
|
def bulk_create_with(worker_filter, gig_tasks)
|
13
12
|
payload = { data: { attributes: attributes, relationships: {} } }
|
14
13
|
payload[:data][:relationships][:gig_tasks] = gig_tasks.map(&:attributes)
|
@@ -35,7 +34,6 @@ module CirroIO
|
|
35
34
|
|
36
35
|
self.class.parser.parse(self.class, response).first
|
37
36
|
end
|
38
|
-
# rubocop:enable Metrics/AbcSize
|
39
37
|
end
|
40
38
|
end
|
41
39
|
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'cirro_io/client/version'
|
2
|
+
require 'cirro_io_v2/errors/http_error'
|
3
|
+
require 'cirro_io_v2/errors/response_not_json_error'
|
4
|
+
|
5
|
+
require 'cirro_io_v2/request_clients/base'
|
6
|
+
require 'cirro_io_v2/request_clients/jwt'
|
7
|
+
|
8
|
+
require 'cirro_io_v2/resources/base'
|
9
|
+
require 'cirro_io_v2/resources/gig'
|
10
|
+
require 'cirro_io_v2/resources/gig_ivitation'
|
11
|
+
require 'cirro_io_v2/resources/user'
|
12
|
+
|
13
|
+
require 'cirro_io_v2/responses/base'
|
14
|
+
require 'cirro_io_v2/responses/responses'
|
15
|
+
|
16
|
+
require 'cirro_io_v2/resources/notification_broadcast'
|
17
|
+
require 'cirro_io_v2/resources/notification_topic_preference'
|
18
|
+
require 'cirro_io_v2/resources/notification_topic'
|
19
|
+
require 'cirro_io_v2/resources/notification_configuration'
|
20
|
+
require 'cirro_io_v2/resources/notification_layout_template'
|
21
|
+
require 'cirro_io_v2/resources/notification_layout'
|
22
|
+
require 'cirro_io_v2/resources/notification_locale'
|
23
|
+
require 'cirro_io_v2/resources/notification_template'
|
24
|
+
|
25
|
+
module CirroIOV2
|
26
|
+
class Client
|
27
|
+
attr_accessor :request_client
|
28
|
+
attr_reader :options
|
29
|
+
|
30
|
+
DEFAULT_OPTIONS = {
|
31
|
+
site: 'https://api.cirro.io',
|
32
|
+
api_version: 'v2',
|
33
|
+
auth_type: :jwt,
|
34
|
+
}.freeze
|
35
|
+
|
36
|
+
DEFINED_OPTIONS = (DEFAULT_OPTIONS.keys + [:private_key, :private_key_path, :client_id]).freeze
|
37
|
+
|
38
|
+
def initialize(options = {})
|
39
|
+
@options = DEFAULT_OPTIONS.merge(options)
|
40
|
+
|
41
|
+
unknown_options = @options.keys.reject { |o| DEFINED_OPTIONS.include?(o) }
|
42
|
+
raise ArgumentError, "Unknown option(s) given: #{unknown_options}" unless unknown_options.empty?
|
43
|
+
|
44
|
+
# TODO: for now we only have jwt
|
45
|
+
case @options[:auth_type]
|
46
|
+
when :jwt
|
47
|
+
private_key = OpenSSL::PKey::RSA.new(@options[:private_key]) if @options[:private_key]
|
48
|
+
private_key = OpenSSL::PKey::RSA.new(File.read(@options[:private_key_path])) if @options[:private_key_path]
|
49
|
+
@request_client = RequestClients::Jwt.new(base_url: "#{@options[:site]}/#{@options[:api_version]}",
|
50
|
+
client_id: @options[:client_id],
|
51
|
+
private_key: private_key)
|
52
|
+
else
|
53
|
+
raise ArgumentError, 'Options: ":auth_type" must be ":jwt"'
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# resources
|
58
|
+
# rubocop:disable Naming/MethodName
|
59
|
+
|
60
|
+
def User
|
61
|
+
Resources::User.new(self)
|
62
|
+
end
|
63
|
+
|
64
|
+
def GigInvitation
|
65
|
+
Resources::GigInvitation.new(self)
|
66
|
+
end
|
67
|
+
|
68
|
+
def Gig
|
69
|
+
Resources::Gig.new(self)
|
70
|
+
end
|
71
|
+
|
72
|
+
def NotificationBroadcast
|
73
|
+
Resources::NotificationBroadcast.new(self)
|
74
|
+
end
|
75
|
+
|
76
|
+
def NotificationChannelPreference
|
77
|
+
Resources::NotificationChannelPreference.new(self)
|
78
|
+
end
|
79
|
+
|
80
|
+
def NotificationChannel
|
81
|
+
Resources::NotificationChannel.new(self)
|
82
|
+
end
|
83
|
+
|
84
|
+
def NotificationConfiguration
|
85
|
+
Resources::NotificationConfiguration.new(self)
|
86
|
+
end
|
87
|
+
|
88
|
+
def NotificationLayoutTemplate
|
89
|
+
Resources::NotificationLayoutTemplate.new(self)
|
90
|
+
end
|
91
|
+
|
92
|
+
def NotificationLayout
|
93
|
+
Resources::NotificationLayout.new(self)
|
94
|
+
end
|
95
|
+
|
96
|
+
def NotificationLocale
|
97
|
+
Resources::NotificationLocale.new(self)
|
98
|
+
end
|
99
|
+
|
100
|
+
def NotificationTemplate
|
101
|
+
Resources::NotificationTemplate.new(self)
|
102
|
+
end
|
103
|
+
|
104
|
+
# rubocop:enable Naming/MethodName
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
module CirroIOV2
|
4
|
+
module Errors
|
5
|
+
class HTTPError < StandardError
|
6
|
+
extend Forwardable
|
7
|
+
|
8
|
+
def_instance_delegators :@response, :code
|
9
|
+
attr_reader :response, :message
|
10
|
+
|
11
|
+
def initialize(response)
|
12
|
+
@response = response
|
13
|
+
@message = response.try(:message).presence || response.try(:body)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
module CirroIOV2
|
4
|
+
module Errors
|
5
|
+
class ResponseNotJsonError < StandardError
|
6
|
+
extend Forwardable
|
7
|
+
|
8
|
+
def_instance_delegators :@faraday_error, :message, :full_message, :response
|
9
|
+
|
10
|
+
attr_reader :faraday_error
|
11
|
+
|
12
|
+
def initialize(faraday_error)
|
13
|
+
@faraday_error = faraday_error
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module CirroIOV2
|
2
|
+
module RequestClients
|
3
|
+
class Base
|
4
|
+
# Interface of all request clients. It returns the response if the request was successful (HTTP::2xx) and
|
5
|
+
# raises a CirroIOV2::HTTPError together with the response if the request was not successful
|
6
|
+
|
7
|
+
def request(*args, **named_args)
|
8
|
+
response = make_request(*args, **named_args)
|
9
|
+
raise Errors::HTTPError, response unless response.success?
|
10
|
+
|
11
|
+
response
|
12
|
+
rescue Faraday::ParsingError => e
|
13
|
+
raise Errors::ResponseNotJsonError, e
|
14
|
+
end
|
15
|
+
|
16
|
+
def make_request(*args)
|
17
|
+
raise NotImplementedError
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'jwt'
|
2
|
+
require 'openssl'
|
3
|
+
|
4
|
+
module CirroIOV2
|
5
|
+
module RequestClients
|
6
|
+
class Jwt < Base
|
7
|
+
attr_reader :base_url, :private_key, :client_id, :connection
|
8
|
+
|
9
|
+
def initialize(base_url:, private_key:, client_id:)
|
10
|
+
@base_url = base_url
|
11
|
+
@private_key = private_key
|
12
|
+
@client_id = client_id
|
13
|
+
|
14
|
+
@connection = Faraday.new(url: base_url) do |conn|
|
15
|
+
conn.request :json
|
16
|
+
conn.response :json
|
17
|
+
conn.adapter Faraday.default_adapter # testIO App is on older version of faraday and needs this line
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def make_request(http_method, url, body: nil, params: nil, _headers: {})
|
22
|
+
@connection.send(http_method, url) do |request|
|
23
|
+
request.params = params if params
|
24
|
+
request.body = body.to_json if body
|
25
|
+
request.headers['Authorization'] = bearer_token
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def bearer_token
|
30
|
+
payload = {
|
31
|
+
exp: Time.now.to_i + (10 * 60),
|
32
|
+
sub: client_id,
|
33
|
+
}
|
34
|
+
|
35
|
+
token = JWT.encode(payload, private_key, 'RS256')
|
36
|
+
|
37
|
+
"Bearer #{token}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'active_support/core_ext/string/inflections'
|
2
|
+
|
3
|
+
module CirroIOV2
|
4
|
+
module Resources
|
5
|
+
class Base
|
6
|
+
attr_reader :client
|
7
|
+
|
8
|
+
def initialize(client)
|
9
|
+
@client = client
|
10
|
+
end
|
11
|
+
|
12
|
+
def resource_root
|
13
|
+
self.class.name.demodulize.underscore.pluralize
|
14
|
+
end
|
15
|
+
|
16
|
+
def params_allowed?(params, allowed)
|
17
|
+
raise 'ParamNotAllowed' if (params.keys - allowed).any?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module CirroIOV2
|
2
|
+
module Resources
|
3
|
+
class GigInvitation < Base
|
4
|
+
ALLOWED_PARAMS = [:user_id, :gig_id, :limit, :before, :after, :status].freeze
|
5
|
+
|
6
|
+
def list(params = nil)
|
7
|
+
params_allowed?(params, ALLOWED_PARAMS) if params
|
8
|
+
response = client.request_client.request(:get, resource_root, params: params)
|
9
|
+
Responses::GigInvitationListResponse.new(response.body)
|
10
|
+
end
|
11
|
+
|
12
|
+
def accept(id)
|
13
|
+
response = client.request_client.request(:post, "#{resource_root}/#{id}/accept")
|
14
|
+
Responses::GigInvitationResponse.new(response.body)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module CirroIOV2
|
2
|
+
module Resources
|
3
|
+
class NotificationBroadcast < Base
|
4
|
+
ALLOWED_PARAMS = [:payload, :recipients, :notification_channel_id].freeze
|
5
|
+
|
6
|
+
def create(params)
|
7
|
+
params_allowed?(params, ALLOWED_PARAMS)
|
8
|
+
response = client.request_client.request(:post, resource_root, body: params)
|
9
|
+
Responses::NotificationBroadcastResponse.new(response.body)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module CirroIOV2
|
2
|
+
module Resources
|
3
|
+
class NotificationConfiguration < Base
|
4
|
+
ALLOWED_PARAMS = [:locale, :limit, :before, :after].freeze
|
5
|
+
|
6
|
+
def list(params = nil)
|
7
|
+
params_allowed?(params, ALLOWED_PARAMS) if params
|
8
|
+
response = client.request_client.request(:get, resource_root, params: params)
|
9
|
+
Responses::NotificationConfigurationListResponse.new(response.body)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module CirroIOV2
|
2
|
+
module Resources
|
3
|
+
class NotificationLayout < Base
|
4
|
+
CREATE_ALLOWED_PARAMS = [:name, :templates].freeze
|
5
|
+
UPDATE_ALLOWED_PARAMS = [:name].freeze
|
6
|
+
CREATE_TEMPLATE_ALLOWED_PARAMS = [:notification_configuration_id, :body].freeze
|
7
|
+
|
8
|
+
def create(params)
|
9
|
+
params_allowed?(params, CREATE_ALLOWED_PARAMS)
|
10
|
+
response = client.request_client.request(:post, resource_root, body: params)
|
11
|
+
Responses::NotificationLayoutResponse.new(response.body)
|
12
|
+
end
|
13
|
+
|
14
|
+
def update(id, params)
|
15
|
+
params_allowed?(params, UPDATE_ALLOWED_PARAMS)
|
16
|
+
response = client.request_client.request(:post, "#{resource_root}/#{id}", body: params)
|
17
|
+
Responses::NotificationLayoutResponse.new(response.body)
|
18
|
+
end
|
19
|
+
|
20
|
+
def create_template(id, params)
|
21
|
+
params_allowed?(params, CREATE_TEMPLATE_ALLOWED_PARAMS)
|
22
|
+
response = client.request_client.request(:post, "#{resource_root}/#{id}/notification_layout_templates", body: params)
|
23
|
+
Responses::NotificationLayoutTemplateResponse.new(response.body)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module CirroIOV2
|
2
|
+
module Resources
|
3
|
+
class NotificationLayoutTemplate < Base
|
4
|
+
UPDATE_ALLOWED_PARAMS = [:notification_configuration_id, :body].freeze
|
5
|
+
|
6
|
+
def update(id, params)
|
7
|
+
params_allowed?(params, UPDATE_ALLOWED_PARAMS)
|
8
|
+
response = client.request_client.request(:post, "#{resource_root}/#{id}", body: params)
|
9
|
+
Responses::NotificationLayoutTemplateResponse.new(response.body)
|
10
|
+
end
|
11
|
+
|
12
|
+
def delete(id)
|
13
|
+
response = client.request_client.request(:delete, "#{resource_root}/#{id}")
|
14
|
+
Responses::NotificationLayoutTemplateDeleteResponse.new(response.body)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module CirroIOV2
|
2
|
+
module Resources
|
3
|
+
class NotificationLocale < Base
|
4
|
+
ALLOWED_PARAMS = [:locale].freeze
|
5
|
+
|
6
|
+
def create(params)
|
7
|
+
params_allowed?(params, ALLOWED_PARAMS)
|
8
|
+
response = client.request_client.request(:post, resource_root, body: params)
|
9
|
+
Responses::NotificationLocaleResponse.new(response.body)
|
10
|
+
end
|
11
|
+
|
12
|
+
def list
|
13
|
+
response = client.request_client.request(:get, resource_root)
|
14
|
+
Responses::NotificationLocaleListResponse.new(response.body)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module CirroIOV2
|
2
|
+
module Resources
|
3
|
+
class NotificationTemplate < Base
|
4
|
+
LIST_ALLOWED_PARAMS = [:notification_configuration_id, :notification_channel_id, :limit, :before, :after].freeze
|
5
|
+
UPDATE_ALLOWED_PARAMS = [:subject, :body].freeze
|
6
|
+
|
7
|
+
def list(params = nil)
|
8
|
+
params_allowed?(params, LIST_ALLOWED_PARAMS) if params
|
9
|
+
response = client.request_client.request(:get, resource_root, params: params)
|
10
|
+
Responses::NotificationTemplateListResponse.new(response.body)
|
11
|
+
end
|
12
|
+
|
13
|
+
def update(id, params)
|
14
|
+
params_allowed?(params, UPDATE_ALLOWED_PARAMS)
|
15
|
+
response = client.request_client.request(:post, "#{resource_root}/#{id}", body: params)
|
16
|
+
Responses::NotificationTemplateResponse.new(response.body)
|
17
|
+
end
|
18
|
+
|
19
|
+
def delete(id)
|
20
|
+
response = client.request_client.request(:delete, "#{resource_root}/#{id}")
|
21
|
+
Responses::NotificationTemplateDeleteResponse.new(response.body)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module CirroIOV2
|
2
|
+
module Resources
|
3
|
+
class NotificationTopic < Base
|
4
|
+
ALLOWED_PARAMS = [:name, :notification_layout_id, :preferences, :templates].freeze
|
5
|
+
|
6
|
+
def resource_root
|
7
|
+
'notification_channels'
|
8
|
+
end
|
9
|
+
|
10
|
+
def create(params)
|
11
|
+
params_allowed?(params, ALLOWED_PARAMS)
|
12
|
+
response = client.request_client.request(:post, resource_root, body: params)
|
13
|
+
Responses::NotificationChannelResponse.new(response.body)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module CirroIOV2
|
2
|
+
module Resources
|
3
|
+
class NotificationTopicPreference < Base
|
4
|
+
ALLOWED_PARAMS = [:user_id, :notification_channel_id, :limit, :before, :after].freeze
|
5
|
+
|
6
|
+
def resource_root
|
7
|
+
'notification_channel_preferences'
|
8
|
+
end
|
9
|
+
|
10
|
+
def list(params = nil)
|
11
|
+
params_allowed?(params, ALLOWED_PARAMS) if params
|
12
|
+
response = client.request_client.request(:get, resource_root, params: params)
|
13
|
+
Responses::NotificationChannelPreferenceListResponse.new(response.body)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module CirroIOV2
|
2
|
+
module Resources
|
3
|
+
class User < Base
|
4
|
+
def find(id)
|
5
|
+
response = client.request_client.request(:get, "#{resource_root}/#{id}")
|
6
|
+
CirroIOV2::Responses::UserResponse.new(response.body)
|
7
|
+
end
|
8
|
+
|
9
|
+
def notification_preferences(id, params)
|
10
|
+
response = client.request_client.request(:post, "#{resource_root}/#{id}/notification_preferences", body: params)
|
11
|
+
CirroIOV2::Responses::UserNotificationPreferenceResponse.new(response.body)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module CirroIOV2
|
2
|
+
module Responses
|
3
|
+
module Base
|
4
|
+
def initialize(body)
|
5
|
+
body = body.deep_symbolize_keys
|
6
|
+
if body[:object] == 'list'
|
7
|
+
list_item_class = self.class.name.gsub('List', '').constantize
|
8
|
+
values_hash = body.slice(*members.excluding(:data)).merge(
|
9
|
+
data: body[:data].map { |list_item| list_item_class.new(list_item) },
|
10
|
+
)
|
11
|
+
super(*members.map { |attr| values_hash[attr] })
|
12
|
+
elsif list_attribute(body)
|
13
|
+
values_hash = body.slice(*members.excluding(list_attribute(body))).merge(
|
14
|
+
list_attribute(body) => create_sub_resource(list_attribute(body), body[list_attribute(body)]),
|
15
|
+
)
|
16
|
+
super(*body.slice(*members).keys.map { |attr| values_hash[attr] })
|
17
|
+
else
|
18
|
+
super(*body.slice(*members).values)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def list_attribute(data)
|
23
|
+
data.keys.find { |key| data[key].is_a?(Hash) && data[key][:object] == 'list' }
|
24
|
+
end
|
25
|
+
|
26
|
+
def create_sub_resource(resource_name, body)
|
27
|
+
sub_resource_class = "CirroIOV2::Responses::#{self.class::NESTED_RESPONSES[resource_name]}".constantize
|
28
|
+
sub_resource_class.new(body)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
module CirroIOV2
|
2
|
+
module Responses
|
3
|
+
LIST_RESPONSES = [
|
4
|
+
:GigTaskListResponse,
|
5
|
+
:GigInvitationListResponse,
|
6
|
+
:NotificationChannelPreferenceListResponse,
|
7
|
+
:NotificationLocaleListResponse,
|
8
|
+
:NotificationConfigurationListResponse,
|
9
|
+
:NotificationLayoutTemplateListResponse,
|
10
|
+
:NotificationChannelListResponse,
|
11
|
+
:NotificationTemplateListResponse,
|
12
|
+
].freeze
|
13
|
+
|
14
|
+
UserResponse = Struct.new(:id, :object, :first_name, :last_name, :time_zone, :screen_name, :country_code, :epam, :worker) do
|
15
|
+
include Base
|
16
|
+
end
|
17
|
+
|
18
|
+
UserNotificationPreferenceResponse = Struct.new(:id, :object, :locale, :channels) do
|
19
|
+
self::NESTED_RESPONSES = { channels: :NotificationChannelListResponse }.freeze
|
20
|
+
include Base
|
21
|
+
end
|
22
|
+
|
23
|
+
GigResponse = Struct.new(:id,
|
24
|
+
:object,
|
25
|
+
:title,
|
26
|
+
:description,
|
27
|
+
:url,
|
28
|
+
:start_at,
|
29
|
+
:end_at,
|
30
|
+
:total_seats,
|
31
|
+
:invitation_mode,
|
32
|
+
:filter_query,
|
33
|
+
:tasks,
|
34
|
+
:notification_payload,
|
35
|
+
:epam_options) do
|
36
|
+
self::NESTED_RESPONSES = { tasks: :GigTaskListResponse }.freeze
|
37
|
+
include Base
|
38
|
+
end
|
39
|
+
|
40
|
+
GigTaskResponse = Struct.new(:id, :object, :title, :base_price) do
|
41
|
+
include Base
|
42
|
+
end
|
43
|
+
|
44
|
+
GigInvitationResponse = Struct.new(:id, :object, :status, :gig_id, :user_id) do
|
45
|
+
include Base
|
46
|
+
end
|
47
|
+
|
48
|
+
NotificationChannelPreferenceResponse = Struct.new(:id, :object, :preferences, :notification_channel_id, :user_id) do
|
49
|
+
self::NESTED_RESPONSES = { preferences: :NotificationChannelPreferenceListResponse }.freeze
|
50
|
+
include Base
|
51
|
+
end
|
52
|
+
|
53
|
+
NotificationLocaleResponse = Struct.new(:id, :object, :locale, :default, :configurations) do
|
54
|
+
self::NESTED_RESPONSES = { configurations: :NotificationConfigurationListResponse }.freeze
|
55
|
+
include Base
|
56
|
+
end
|
57
|
+
|
58
|
+
NotificationConfigurationResponse = Struct.new(:id, :object, :deliver_by, :format, :kind, :locale) do
|
59
|
+
include Base
|
60
|
+
end
|
61
|
+
|
62
|
+
NotificationLayoutResponse = Struct.new(:id, :object, :name, :templates) do
|
63
|
+
self::NESTED_RESPONSES = { templates: :NotificationLayoutTemplateListResponse }.freeze
|
64
|
+
include Base
|
65
|
+
end
|
66
|
+
|
67
|
+
NotificationLayoutTemplateResponse = Struct.new(:id, :notification_configuration_id, :notification_layout_id, :body) do
|
68
|
+
include Base
|
69
|
+
end
|
70
|
+
|
71
|
+
NotificationLayoutTemplateDeleteResponse = Struct.new(:id, :object, :deleted) do
|
72
|
+
include Base
|
73
|
+
end
|
74
|
+
|
75
|
+
NotificationChannelResponse = Struct.new(:id, :object, :name, :notification_layout_id, :preferences, :templates) do
|
76
|
+
self::NESTED_RESPONSES = { templates: :NotificationTemplateListResponse }.freeze
|
77
|
+
include Base
|
78
|
+
end
|
79
|
+
|
80
|
+
NotificationTemplateResponse = Struct.new(:id, :object, :notification_configuration_id, :notification_channel_id, :subject, :body) do
|
81
|
+
include Base
|
82
|
+
end
|
83
|
+
|
84
|
+
NotificationTemplateDeleteResponse = Struct.new(:id, :object, :deleted) do
|
85
|
+
include Base
|
86
|
+
end
|
87
|
+
|
88
|
+
NotificationBroadcastResponse = Struct.new(:id, :object, :payload, :recipients, :notification_channel_id) do
|
89
|
+
include Base
|
90
|
+
end
|
91
|
+
|
92
|
+
# cover the list responses
|
93
|
+
def self.const_missing(name)
|
94
|
+
return const_get(name) if const_defined? name
|
95
|
+
return unless LIST_RESPONSES.include? name
|
96
|
+
|
97
|
+
klass = Class.new(Struct.new(:object, :url, :has_more, :data)) { include Base }
|
98
|
+
const_set(name, klass)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cirro-ruby-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cirro Dev Team
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-08-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
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: jwt
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -107,6 +121,25 @@ files:
|
|
107
121
|
- lib/cirro_io/client/response_debugging_middleware.rb
|
108
122
|
- lib/cirro_io/client/version.rb
|
109
123
|
- lib/cirro_io/client/worker_filter.rb
|
124
|
+
- lib/cirro_io_v2/client.rb
|
125
|
+
- lib/cirro_io_v2/errors/http_error.rb
|
126
|
+
- lib/cirro_io_v2/errors/response_not_json_error.rb
|
127
|
+
- lib/cirro_io_v2/request_clients/base.rb
|
128
|
+
- lib/cirro_io_v2/request_clients/jwt.rb
|
129
|
+
- lib/cirro_io_v2/resources/base.rb
|
130
|
+
- lib/cirro_io_v2/resources/gig.rb
|
131
|
+
- lib/cirro_io_v2/resources/gig_ivitation.rb
|
132
|
+
- lib/cirro_io_v2/resources/notification_broadcast.rb
|
133
|
+
- lib/cirro_io_v2/resources/notification_configuration.rb
|
134
|
+
- lib/cirro_io_v2/resources/notification_layout.rb
|
135
|
+
- lib/cirro_io_v2/resources/notification_layout_template.rb
|
136
|
+
- lib/cirro_io_v2/resources/notification_locale.rb
|
137
|
+
- lib/cirro_io_v2/resources/notification_template.rb
|
138
|
+
- lib/cirro_io_v2/resources/notification_topic.rb
|
139
|
+
- lib/cirro_io_v2/resources/notification_topic_preference.rb
|
140
|
+
- lib/cirro_io_v2/resources/user.rb
|
141
|
+
- lib/cirro_io_v2/responses/base.rb
|
142
|
+
- lib/cirro_io_v2/responses/responses.rb
|
110
143
|
homepage: https://cirro.io/api-docs/v1#cirro-api-documentation
|
111
144
|
licenses:
|
112
145
|
- MIT
|
@@ -129,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
129
162
|
- !ruby/object:Gem::Version
|
130
163
|
version: '0'
|
131
164
|
requirements: []
|
132
|
-
rubygems_version: 3.
|
165
|
+
rubygems_version: 3.0.3.1
|
133
166
|
signing_key:
|
134
167
|
specification_version: 4
|
135
168
|
summary: Ruby client library for Cirro API
|