cirro-ruby-client 1.6.0 → 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/.circleci/config.yml +77 -5
- data/.gitignore +5 -0
- data/.rubocop.yml +28 -11
- data/CODE_OF_CONDUCT.md +1 -1
- data/Gemfile.lock +16 -15
- data/README.md +353 -0
- data/bin/console +1 -0
- data/cirro-ruby-client.gemspec +1 -0
- data/lib/cirro_io/client/base.rb +20 -0
- data/lib/cirro_io/client/gig.rb +0 -2
- data/lib/cirro_io/client/gig_invitation.rb +1 -0
- data/lib/cirro_io/client/gig_task.rb +1 -0
- data/lib/cirro_io/client/gig_time_activity.rb +1 -0
- 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/.circleci/config.yml
CHANGED
@@ -1,9 +1,18 @@
|
|
1
1
|
version: 2.1
|
2
|
+
infra_container: &infra_container
|
3
|
+
eu.gcr.io/cirro-io/swissknife@sha256:1dceb221bfc058c4ba22fe4dcbf4f30dfdc10951bc2293d5c53aebc4f87037f3
|
4
|
+
|
5
|
+
# Configure authentication in private registry
|
6
|
+
infra_container_registry_auth:
|
7
|
+
&infra_container_registry_auth
|
8
|
+
auth:
|
9
|
+
username: _json_key # default username when using a JSON key file to authenticate
|
10
|
+
password: $GOOGLE_JSON_KEY
|
2
11
|
|
3
12
|
jobs:
|
4
|
-
|
13
|
+
test:
|
5
14
|
docker:
|
6
|
-
- image:
|
15
|
+
- image: cimg/ruby:2.7.1-node
|
7
16
|
environment:
|
8
17
|
- RAILS_ENV=test
|
9
18
|
- RACK_ENV=test
|
@@ -25,9 +34,10 @@ jobs:
|
|
25
34
|
- run:
|
26
35
|
name: Check code style
|
27
36
|
command: bundle exec rubocop
|
37
|
+
|
28
38
|
deploy:
|
29
39
|
docker:
|
30
|
-
- image:
|
40
|
+
- image: cimg/ruby:2.7.1-node
|
31
41
|
steps:
|
32
42
|
- checkout
|
33
43
|
- run:
|
@@ -56,14 +66,76 @@ jobs:
|
|
56
66
|
gem push cirro-ruby-client-$version.gem
|
57
67
|
shred -u ~/.gem/credentials
|
58
68
|
|
69
|
+
defectdojo:
|
70
|
+
docker:
|
71
|
+
- image: *infra_container
|
72
|
+
<<: *infra_container_registry_auth
|
73
|
+
environment:
|
74
|
+
- DEFECTDOJO_URL: defectdojo.testcloud.io
|
75
|
+
- DEFECTDOJO_PRODUCT: Cirro Ruby Client
|
76
|
+
- DEFECTDOJO_ENG_NAME: CircleCI Scan
|
77
|
+
steps:
|
78
|
+
- checkout
|
79
|
+
- run:
|
80
|
+
name: Setup access to GCP
|
81
|
+
command: |
|
82
|
+
echo $GOOGLE_JSON_KEY > ${HOME}/gcloud-service-key.json && \
|
83
|
+
gcloud auth activate-service-account --key-file=${HOME}/gcloud-service-key.json
|
84
|
+
gcloud auth configure-docker
|
85
|
+
- run:
|
86
|
+
name: Scans
|
87
|
+
command: |
|
88
|
+
unset GITHUB_TOKEN && trivy fs --exit-code 0 --no-progress --ignorefile .trivyignore-fake --format json --output filesystem-scan.json .
|
89
|
+
gitleaks detect --no-git --exit-code 0 --report-format json --report-path gitleaks.json
|
90
|
+
- run:
|
91
|
+
name: Send data to DefectDojo
|
92
|
+
command: |
|
93
|
+
export DEFECTDOJO_TOKEN=$(gcloud secrets versions access latest \
|
94
|
+
--secret="defectdojo_token" \
|
95
|
+
--project=cirro-io \
|
96
|
+
--quiet)
|
97
|
+
|
98
|
+
# Send Trivy filesystem scan
|
99
|
+
curl --fail --request POST https://$DEFECTDOJO_URL/api/v2/reimport-scan/ \
|
100
|
+
--header "Authorization: Token $DEFECTDOJO_TOKEN" \
|
101
|
+
--form "active=true" \
|
102
|
+
--form "auto_create_context=true" \
|
103
|
+
--form "branch_tag=${CIRCLE_BRANCH}" \
|
104
|
+
--form "commit_hash=${CIRCLE_SHA1}" \
|
105
|
+
--form "close_old_findings=true" \
|
106
|
+
--form "scan_type=Trivy Scan" \
|
107
|
+
--form "test_title=Trivy application scan" \
|
108
|
+
--form "engagement_name=${DEFECTDOJO_ENG_NAME}" \
|
109
|
+
--form "product_name=${DEFECTDOJO_PRODUCT}" \
|
110
|
+
--form "file=@filesystem-scan.json"
|
111
|
+
|
112
|
+
# Send Gitleaks scan
|
113
|
+
curl --fail --request POST https://$DEFECTDOJO_URL/api/v2/reimport-scan/ \
|
114
|
+
--header "Authorization: Token $DEFECTDOJO_TOKEN" \
|
115
|
+
--form "active=true" \
|
116
|
+
--form "auto_create_context=true" \
|
117
|
+
--form "branch_tag=${CIRCLE_BRANCH}" \
|
118
|
+
--form "commit_hash=${CIRCLE_SHA1}" \
|
119
|
+
--form "close_old_findings=true" \
|
120
|
+
--form "scan_type=Gitleaks Scan" \
|
121
|
+
--form "test_title=Gitleaks Scan" \
|
122
|
+
--form "engagement_name=${DEFECTDOJO_ENG_NAME}" \
|
123
|
+
--form "product_name=${DEFECTDOJO_PRODUCT}" \
|
124
|
+
--form "file=@gitleaks.json"
|
125
|
+
|
59
126
|
workflows:
|
60
127
|
version: 2
|
61
128
|
deploy_the_gem:
|
62
129
|
jobs:
|
63
|
-
-
|
130
|
+
- test
|
64
131
|
- deploy:
|
65
132
|
requires:
|
66
|
-
-
|
133
|
+
- test
|
134
|
+
filters:
|
135
|
+
branches:
|
136
|
+
only:
|
137
|
+
- master
|
138
|
+
- defectdojo:
|
67
139
|
filters:
|
68
140
|
branches:
|
69
141
|
only:
|
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/CODE_OF_CONDUCT.md
CHANGED
@@ -55,7 +55,7 @@ further defined and clarified by project maintainers.
|
|
55
55
|
## Enforcement
|
56
56
|
|
57
57
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
58
|
-
reported by contacting the project team at
|
58
|
+
reported by contacting the project team at devs@test.io. All
|
59
59
|
complaints will be reviewed and investigated and will result in a response that
|
60
60
|
is deemed necessary and appropriate to the circumstances. The project team is
|
61
61
|
obligated to maintain confidentiality with regard to the reporter of an incident.
|
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,19 +11,19 @@ PATH
|
|
10
11
|
GEM
|
11
12
|
remote: https://rubygems.org/
|
12
13
|
specs:
|
13
|
-
activemodel (6.1.
|
14
|
-
activesupport (= 6.1.
|
15
|
-
activesupport (6.1.
|
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)
|
20
21
|
zeitwerk (~> 2.3)
|
21
|
-
addressable (2.
|
22
|
+
addressable (2.8.0)
|
22
23
|
public_suffix (>= 2.0.2, < 5.0)
|
23
24
|
ast (2.4.1)
|
24
25
|
coderay (1.1.3)
|
25
|
-
concurrent-ruby (1.1.
|
26
|
+
concurrent-ruby (1.1.10)
|
26
27
|
crack (0.4.4)
|
27
28
|
diff-lcs (1.4.4)
|
28
29
|
faker (2.14.0)
|
@@ -30,21 +31,21 @@ GEM
|
|
30
31
|
faraday (1.1.0)
|
31
32
|
multipart-post (>= 1.2, < 3)
|
32
33
|
ruby2_keywords
|
33
|
-
faraday_middleware (1.
|
34
|
+
faraday_middleware (1.2.0)
|
34
35
|
faraday (~> 1.0)
|
35
36
|
hashdiff (1.0.1)
|
36
|
-
i18n (1.
|
37
|
+
i18n (1.10.0)
|
37
38
|
concurrent-ruby (~> 1.0)
|
38
|
-
json_api_client (1.
|
39
|
+
json_api_client (1.21.0)
|
39
40
|
activemodel (>= 3.2.0)
|
40
41
|
activesupport (>= 3.2.0)
|
41
42
|
addressable (~> 2.2)
|
42
|
-
faraday (>= 0.15.2, <
|
43
|
-
faraday_middleware (>= 0.9.0, <
|
43
|
+
faraday (>= 0.15.2, < 2.0)
|
44
|
+
faraday_middleware (>= 0.9.0, < 2.0)
|
44
45
|
rack (>= 0.2)
|
45
46
|
jwt (2.2.3)
|
46
47
|
method_source (1.0.0)
|
47
|
-
minitest (5.
|
48
|
+
minitest (5.15.0)
|
48
49
|
multipart-post (2.1.1)
|
49
50
|
parallel (1.19.2)
|
50
51
|
parser (2.7.2.0)
|
@@ -85,7 +86,7 @@ GEM
|
|
85
86
|
rubocop-rspec (1.43.2)
|
86
87
|
rubocop (~> 0.87)
|
87
88
|
ruby-progressbar (1.10.1)
|
88
|
-
ruby2_keywords (0.0.
|
89
|
+
ruby2_keywords (0.0.5)
|
89
90
|
tzinfo (2.0.4)
|
90
91
|
concurrent-ruby (~> 1.0)
|
91
92
|
unicode-display_width (1.7.0)
|
@@ -93,7 +94,7 @@ GEM
|
|
93
94
|
addressable (>= 2.3.6)
|
94
95
|
crack (>= 0.3.2)
|
95
96
|
hashdiff (>= 0.4.0, < 2.0.0)
|
96
|
-
zeitwerk (2.4
|
97
|
+
zeitwerk (2.5.4)
|
97
98
|
|
98
99
|
PLATFORMS
|
99
100
|
ruby
|
@@ -109,4 +110,4 @@ DEPENDENCIES
|
|
109
110
|
webmock
|
110
111
|
|
111
112
|
BUNDLED WITH
|
112
|
-
2.
|
113
|
+
2.2.25
|
data/README.md
CHANGED
@@ -55,3 +55,356 @@ invitation = CirroIO::Client::GigInvitation.new(gig: gig)
|
|
55
55
|
|
56
56
|
invitation.bulk_create_with(filter, auto_accept: true) # by default auto_accept is false
|
57
57
|
```
|
58
|
+
|
59
|
+
#### Creating Payouts for workers
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
app_worker = CirroIO::Client::AppWorker.load(id: 1234)
|
63
|
+
|
64
|
+
CirroIO::Client::Payout.create(
|
65
|
+
app_worker: app_worker,
|
66
|
+
amount: 100, # € 1.00
|
67
|
+
title: "Bonus for something",
|
68
|
+
description: "Description of the bonus.",
|
69
|
+
cost_center_key: "PROJECT-CODE",
|
70
|
+
billing_date: DateTime.now
|
71
|
+
)
|
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/base.rb
CHANGED
@@ -28,6 +28,26 @@ module CirroIO
|
|
28
28
|
conn.use JsonApiClient::Middleware::Status, {}
|
29
29
|
end
|
30
30
|
end
|
31
|
+
|
32
|
+
# HACK: https://github.com/JsonApiClient/json_api_client/issues/390
|
33
|
+
# waiting for json_api_client to release a new version with the fix
|
34
|
+
# https://github.com/JsonApiClient/json_api_client/pull/398
|
35
|
+
# rubocop:disable all
|
36
|
+
def initialize(params = {})
|
37
|
+
params = params.with_indifferent_access
|
38
|
+
@persisted = nil
|
39
|
+
@destroyed = nil
|
40
|
+
self.links = self.class.linker.new(params.delete(:links) || {})
|
41
|
+
self.relationships = self.class.relationship_linker.new(self.class, params.delete(:relationships) || {})
|
42
|
+
self.attributes = self.class.default_attributes.merge params.except(*self.class.prefix_params)
|
43
|
+
self.forget_change!(:type)
|
44
|
+
self.__belongs_to_params = params.slice(*self.class.prefix_params)
|
45
|
+
|
46
|
+
setup_default_properties
|
47
|
+
|
48
|
+
self.request_params = self.class.request_params_class.new(self.class)
|
49
|
+
end
|
50
|
+
# rubocop:enable all
|
31
51
|
end
|
32
52
|
end
|
33
53
|
end
|