discourse_api 0.47.0 → 0.48.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/CHANGELOG.md +11 -1
- data/examples/invite_users.rb +2 -2
- data/lib/discourse_api/api/dashboard.rb +2 -2
- data/lib/discourse_api/api/groups.rb +15 -4
- data/lib/discourse_api/api/site_settings.rb +3 -3
- data/lib/discourse_api/api/users.rb +4 -0
- data/lib/discourse_api/error.rb +1 -1
- data/lib/discourse_api/single_sign_on.rb +6 -6
- data/lib/discourse_api/version.rb +1 -1
- data/spec/discourse_api/api/groups_spec.rb +29 -0
- data/spec/discourse_api/api/topics_spec.rb +2 -7
- data/spec/discourse_api/api/users_spec.rb +14 -0
- data/spec/discourse_api/client_spec.rb +6 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '047378d84854b5dae025d57550c071bf9944257a4048bd1be5b51b389e995dc3'
|
4
|
+
data.tar.gz: af75df86361c631aba91dc685c26e2f0d392597fbd561ef93b628f319f907457
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a435c702c930231c817d8192a20ddd859c3102cb3a9928ad4402dc1c019330d4dca79bd407f00ffa9e9038cebe7a0c138c081a019f4373711bfea67104c1a00
|
7
|
+
data.tar.gz: 8664b7d0efa3982e223a61af2a7d28ea2744100fdf1f3dcef99c9c1c3f7c59481c264ac04092c9b0c4c6a5f7559bd1fa99c4010d69fb1451f1a7875678a06d19
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [0.48.0] - 2022-01-28
|
10
|
+
### Added
|
11
|
+
- `group_add_owners` method (#239)
|
12
|
+
- `group_remove_owners` method (#239)
|
13
|
+
- `anonymize` method (#241)
|
14
|
+
|
15
|
+
### Changed
|
16
|
+
- `DiscourseApi::Timeout` error now inherits from `DiscourseApi::Error` (#240)
|
17
|
+
- `DiscourseApi::SingleSignOn#groups` now returns an array of strings where each string is a group name, rather than an array with a single string that contains all the groups comma-concatenated (#243)
|
18
|
+
|
9
19
|
## [0.47.0] - 2021-07-19
|
10
20
|
### Added
|
11
21
|
- Update invite method
|
@@ -17,7 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
17
27
|
- Pass params to get notifications API
|
18
28
|
|
19
29
|
### Deprecated
|
20
|
-
- `invite_user_to_topic` has been deprecated, use `
|
30
|
+
- `invite_user_to_topic` has been deprecated, use `invite_to_topic` instead.
|
21
31
|
- `create_private_message` has been deprecated, use `create_pm` instead.
|
22
32
|
|
23
33
|
## [0.46.0] - 2021-04-12
|
data/examples/invite_users.rb
CHANGED
@@ -18,10 +18,10 @@ client.update_invite(invite["id"], email: "namee@example.com")
|
|
18
18
|
client.resend_invite("namee@example.com")
|
19
19
|
|
20
20
|
# invite to a topic
|
21
|
-
client.
|
21
|
+
client.invite_to_topic(1, email: "foo@bar.com")
|
22
22
|
|
23
23
|
# if the user is an admin you may invite to a group as well
|
24
|
-
client.
|
24
|
+
client.invite_to_topic(1, email: "foo@bar.com", group_ids: "1,2,3")
|
25
25
|
|
26
26
|
# retrieve invite
|
27
27
|
puts client.retrieve_invite(email: "foo@bar.com")
|
@@ -38,7 +38,6 @@ module DiscourseApi
|
|
38
38
|
:messageable_level,
|
39
39
|
:name,
|
40
40
|
:automatic_membership_email_domains,
|
41
|
-
:automatic_membership_retroactive,
|
42
41
|
:title,
|
43
42
|
:primary_group,
|
44
43
|
:grant_trust_level,
|
@@ -47,19 +46,31 @@ module DiscourseApi
|
|
47
46
|
:flair_bg_color,
|
48
47
|
:flair_color,
|
49
48
|
:bio_raw,
|
50
|
-
:
|
49
|
+
:visibility_level,
|
51
50
|
:public_admission,
|
52
51
|
:public_exit,
|
53
52
|
:allow_membership_requests,
|
54
53
|
:full_name,
|
55
54
|
:default_notification_level,
|
56
|
-
:usernames,
|
57
|
-
:owner_usernames,
|
58
55
|
:membership_request_template)
|
59
56
|
.to_h
|
60
57
|
put("/groups/#{group_id}", group: args)
|
61
58
|
end
|
62
59
|
|
60
|
+
def group_add_owners(group_id, args)
|
61
|
+
args = API.params(args)
|
62
|
+
.required(:usernames)
|
63
|
+
.to_h
|
64
|
+
put("/admin/groups/#{group_id}/owners.json", group: args)
|
65
|
+
end
|
66
|
+
|
67
|
+
def group_remove_owners(group_id, args)
|
68
|
+
args = API.params(args)
|
69
|
+
.required(:usernames)
|
70
|
+
.to_h
|
71
|
+
delete("/admin/groups/#{group_id}/owners.json", group: args)
|
72
|
+
end
|
73
|
+
|
63
74
|
def groups(args = {})
|
64
75
|
params = API.params(args)
|
65
76
|
.optional(:page)
|
@@ -3,10 +3,10 @@ module DiscourseApi
|
|
3
3
|
module API
|
4
4
|
module SiteSettings
|
5
5
|
def site_setting_update(args = {})
|
6
|
-
params = API.params(args)
|
7
|
-
.required(:name, :value).to_h
|
6
|
+
params = API.params(args).required(:name, :value).to_h
|
8
7
|
new_site_setting = { params[:name] => params[:value] }
|
9
|
-
|
8
|
+
|
9
|
+
put("/admin/site_settings/#{params[:name]}", new_site_setting)
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -102,6 +102,10 @@ module DiscourseApi
|
|
102
102
|
put("/admin/users/#{user_id}/unsuspend")
|
103
103
|
end
|
104
104
|
|
105
|
+
def anonymize(user_id)
|
106
|
+
put("/admin/users/#{user_id}/anonymize")
|
107
|
+
end
|
108
|
+
|
105
109
|
def delete_user(user_id, delete_posts = false)
|
106
110
|
delete("/admin/users/#{user_id}.json?delete_posts=#{delete_posts}")
|
107
111
|
end
|
data/lib/discourse_api/error.rb
CHANGED
@@ -15,8 +15,7 @@ module DiscourseApi
|
|
15
15
|
#NONCE_EXPIRY_TIME = 10.minutes # minutes is a rails method and is causing an error. Is this needed in the api?
|
16
16
|
|
17
17
|
attr_accessor(*ACCESSORS)
|
18
|
-
|
19
|
-
attr_writer :sso_secret, :sso_url
|
18
|
+
attr_writer :custom_fields, :sso_secret, :sso_url
|
20
19
|
|
21
20
|
def self.sso_secret
|
22
21
|
raise RuntimeError, "sso_secret not implemented on class, be sure to set it on instance"
|
@@ -27,7 +26,6 @@ module DiscourseApi
|
|
27
26
|
end
|
28
27
|
|
29
28
|
def self.parse_hash(payload)
|
30
|
-
payload
|
31
29
|
sso = new
|
32
30
|
|
33
31
|
sso.sso_secret = payload.delete(:sso_secret)
|
@@ -40,11 +38,13 @@ module DiscourseApi
|
|
40
38
|
if BOOLS.include? k
|
41
39
|
val = ["true", "false"].include?(val) ? val == "true" : nil
|
42
40
|
end
|
43
|
-
val =
|
41
|
+
val = val.split(",") if ARRAYS.include?(k) && !val.nil?
|
44
42
|
sso.send("#{k}=", val)
|
45
43
|
end
|
44
|
+
|
46
45
|
# Set custom_fields
|
47
46
|
sso.custom_fields = payload[:custom_fields]
|
47
|
+
|
48
48
|
# Add custom_fields (old format)
|
49
49
|
payload.each do |k, v|
|
50
50
|
if field = k[/^custom\.(.+)$/, 1]
|
@@ -79,7 +79,7 @@ module DiscourseApi
|
|
79
79
|
if BOOLS.include? k
|
80
80
|
val = ["true", "false"].include?(val) ? val == "true" : nil
|
81
81
|
end
|
82
|
-
val =
|
82
|
+
val = val.split(",") if ARRAYS.include?(k) && !val.nil?
|
83
83
|
sso.send("#{k}=", val)
|
84
84
|
end
|
85
85
|
|
@@ -127,7 +127,7 @@ module DiscourseApi
|
|
127
127
|
|
128
128
|
ACCESSORS.each do |k|
|
129
129
|
next if (val = send k) == nil
|
130
|
-
|
130
|
+
payload[k] = val
|
131
131
|
end
|
132
132
|
|
133
133
|
if @custom_fields
|
@@ -91,6 +91,35 @@ describe DiscourseApi::API::Groups do
|
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
+
describe "add owners" do
|
95
|
+
let(:url) { "#{host}/admin/groups/123/owners.json" }
|
96
|
+
|
97
|
+
before do
|
98
|
+
stub_put(url)
|
99
|
+
end
|
100
|
+
|
101
|
+
it "makes the member an owner" do
|
102
|
+
subject.group_add_owners(123, usernames: "sam")
|
103
|
+
params = escape_params("group[usernames]" => "sam")
|
104
|
+
expect(a_request(:put, "#{host}/admin/groups/123/owners.json").
|
105
|
+
with(body: params)
|
106
|
+
).to have_been_made
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "remove owners" do
|
111
|
+
let(:url) { "#{host}/admin/groups/123/owners.json?group%5Busernames%5D=sam" }
|
112
|
+
|
113
|
+
before do
|
114
|
+
stub_delete(url)
|
115
|
+
end
|
116
|
+
|
117
|
+
it "removes the owner role from the group member" do
|
118
|
+
subject.group_remove_owners(123, usernames: "sam")
|
119
|
+
expect(a_delete(url)).to have_been_made
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
94
123
|
describe "group members" do
|
95
124
|
it "list members" do
|
96
125
|
stub_get("#{host}/groups/mygroup/members.json?limit=100&offset=0").to_return(body: fixture("members_0.json"), headers: { content_type: "application/json" })
|
@@ -15,23 +15,18 @@ describe DiscourseApi::API::Topics do
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
describe "#
|
18
|
+
describe "#invite_to_topic" do
|
19
19
|
before do
|
20
20
|
stub_post("#{host}/t/12/invite").to_return(body: fixture("topic_invite_user.json"), headers: { content_type: "application/json" })
|
21
21
|
end
|
22
22
|
|
23
23
|
it "requests the correct resource" do
|
24
|
-
subject.invite_user_to_topic(email: "fake_user@example.com", topic_id: 12)
|
25
|
-
expect(a_post("#{host}/t/12/invite")).to have_been_made
|
26
|
-
end
|
27
|
-
|
28
|
-
it "requests the correct resource with new method 'invite_to_topic'" do
|
29
24
|
subject.invite_to_topic(12, email: "fake_user@example.com")
|
30
25
|
expect(a_post("#{host}/t/12/invite")).to have_been_made
|
31
26
|
end
|
32
27
|
|
33
28
|
it "returns success" do
|
34
|
-
response = subject.
|
29
|
+
response = subject.invite_to_topic(12, email: "fake_user@example.com")
|
35
30
|
expect(response).to be_a Hash
|
36
31
|
expect(response['success']).to be_truthy
|
37
32
|
end
|
@@ -306,6 +306,20 @@ describe DiscourseApi::API::Users do
|
|
306
306
|
end
|
307
307
|
end
|
308
308
|
|
309
|
+
describe "#anonymize" do
|
310
|
+
before do
|
311
|
+
url = "#{host}/admin/users/11/anonymize"
|
312
|
+
stub_put(url).to_return(body: '', status: 200)
|
313
|
+
end
|
314
|
+
|
315
|
+
it "makes the correct put request" do
|
316
|
+
result = subject.anonymize(11)
|
317
|
+
url = "#{host}/admin/users/11/anonymize"
|
318
|
+
expect(a_put(url)).to have_been_made
|
319
|
+
expect(result.status).to eq(200)
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
309
323
|
describe "#delete_user" do
|
310
324
|
before do
|
311
325
|
url = "#{host}/admin/users/11.json?delete_posts=true"
|
@@ -41,6 +41,12 @@ describe DiscourseApi::Client do
|
|
41
41
|
expect(subject.send(:connection).options.timeout).to eq(25)
|
42
42
|
end
|
43
43
|
end
|
44
|
+
|
45
|
+
it "raises DiscourseApi::Timeout" do
|
46
|
+
stub_get("#{host}/t/1.json").to_timeout
|
47
|
+
|
48
|
+
expect { subject.topic(1) }.to raise_error(DiscourseApi::Timeout)
|
49
|
+
end
|
44
50
|
end
|
45
51
|
|
46
52
|
describe "#api_key" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: discourse_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.48.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Saffron
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2022-01-28 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: faraday
|