discourse_api 0.3.6 → 0.4.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 +7 -0
- data/examples/update_user.rb +2 -0
- data/lib/discourse_api/api/api_admin.rb +8 -0
- data/lib/discourse_api/api/badges.rb +4 -0
- data/lib/discourse_api/api/categories.rb +5 -5
- data/lib/discourse_api/api/groups.rb +5 -5
- data/lib/discourse_api/api/posts.rb +6 -4
- data/lib/discourse_api/api/topics.rb +3 -6
- data/lib/discourse_api/api/users.rb +18 -10
- data/lib/discourse_api/version.rb +1 -1
- data/spec/discourse_api/api/api_admin_spec.rb +43 -3
- data/spec/discourse_api/api/users_spec.rb +22 -0
- data/spec/fixtures/generate_api_key.json +12 -0
- data/spec/fixtures/update_trust_level.json +37 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef1ea595c7e724545877e4a688f7f192a1f63573
|
4
|
+
data.tar.gz: f97ed183f55cae5b6cb01616264cabf5249bdbdb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31b68b7b2101e74ca1dcb84c8528c129b630cdd1ff74a1c2eeadc42529562fc8dcfb5f13ed899dc94fe8513f1e4c0c314d6609fe7a1f0c3eef5436cb344b9751
|
7
|
+
data.tar.gz: eac6dbdd5cdecae47f0b2b4fac2a819b324437831b8aabb984db2f0b9f86efe0d4872b6a1970f67d2472665ce893ad13a09b238b60cff6c3726a7f94e31094f2
|
data/CHANGELOG.md
CHANGED
@@ -21,3 +21,10 @@
|
|
21
21
|
- be able to specify SSL connection settings
|
22
22
|
- list api keys generated
|
23
23
|
- list backups created
|
24
|
+
|
25
|
+
## 0.4.0
|
26
|
+
|
27
|
+
- [FEATURE] generate an api key for a user
|
28
|
+
- [FEATURE] revoke an api key for a user
|
29
|
+
- [FEATURE] update user trust level
|
30
|
+
- [FEATURE] grant user badge
|
data/examples/update_user.rb
CHANGED
@@ -13,5 +13,7 @@ puts client.update_user("batman", name: "Bruce Wayne")
|
|
13
13
|
puts client.update_email("batman", "batman@gotham.com")
|
14
14
|
# update avatar of user whose username is "batman"
|
15
15
|
puts client.update_avatar("batman", "http://meta-discourse.r.worldssl.net/uploads/default/2497/724a6ef2e79d2bc7.png")
|
16
|
+
# update trust level of user whose id is "102"
|
17
|
+
puts client.update_trust_level(user_id: 102, level: 2)
|
16
18
|
# log out everywhere and refresh browser of user whose id is "2"
|
17
19
|
puts client.log_out(2)
|
@@ -5,6 +5,14 @@ module DiscourseApi
|
|
5
5
|
response = get("/admin/api.json")
|
6
6
|
response.body
|
7
7
|
end
|
8
|
+
|
9
|
+
def generate_api_key(user_id)
|
10
|
+
response = post("/admin/users/#{user_id}/generate_api_key.json")
|
11
|
+
end
|
12
|
+
|
13
|
+
def revoke_api_key(user_id)
|
14
|
+
response = delete("/admin/users/#{user_id}/revoke_api_key.json")
|
15
|
+
end
|
8
16
|
end
|
9
17
|
end
|
10
18
|
end
|
@@ -3,11 +3,11 @@ module DiscourseApi
|
|
3
3
|
module Categories
|
4
4
|
# :color and :text_color are RGB hexadecimal strings
|
5
5
|
def create_category(args)
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
response = (
|
6
|
+
args = API.params(args)
|
7
|
+
.required(:name, :color, :text_color)
|
8
|
+
.optional(:description)
|
9
|
+
.default(parent_category_id: nil)
|
10
|
+
response = post("/categories", args)
|
11
11
|
response['category']
|
12
12
|
end
|
13
13
|
|
@@ -2,11 +2,11 @@ module DiscourseApi
|
|
2
2
|
module API
|
3
3
|
module Groups
|
4
4
|
def create_group(args)
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
post("/admin/groups", group:
|
5
|
+
args = API.params(args)
|
6
|
+
.required(:name)
|
7
|
+
.default(visible: true)
|
8
|
+
.to_h
|
9
|
+
post("/admin/groups", group: args)
|
10
10
|
end
|
11
11
|
|
12
12
|
def groups
|
@@ -2,13 +2,15 @@ module DiscourseApi
|
|
2
2
|
module API
|
3
3
|
module Posts
|
4
4
|
def create_post(args)
|
5
|
-
|
6
|
-
|
5
|
+
args = API.params(args)
|
6
|
+
.required(:topic_id, :raw)
|
7
|
+
post("/posts", args)
|
7
8
|
end
|
8
9
|
|
9
10
|
def get_post(id, args = {})
|
10
|
-
|
11
|
-
|
11
|
+
args = API.params(args)
|
12
|
+
.optional(:version)
|
13
|
+
response = get("/posts/#{id}.json", args)
|
12
14
|
response[:body]
|
13
15
|
end
|
14
16
|
|
@@ -5,12 +5,9 @@ module DiscourseApi
|
|
5
5
|
# :skip_validations OPTIONAL boolean
|
6
6
|
# :auto_track OPTIONAL boolean
|
7
7
|
def create_topic(args)
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
.required(:title, :raw)
|
12
|
-
.optional(:skip_validations, :category, :auto_track)
|
13
|
-
|
8
|
+
args = API.params(args)
|
9
|
+
.required(:title, :raw)
|
10
|
+
.optional(:skip_validations, :category, :auto_track)
|
14
11
|
post("/posts", args.to_h)
|
15
12
|
end
|
16
13
|
|
@@ -11,11 +11,11 @@ module DiscourseApi
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def update_avatar(args)
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
upload_response = post("/users/#{args[:username]}/preferences/user_image",
|
14
|
+
args = API.params(args)
|
15
|
+
.required(:username, :file)
|
16
|
+
.default(image_type: 'avatar')
|
17
|
+
.to_h
|
18
|
+
upload_response = post("/users/#{args[:username]}/preferences/user_image", args)
|
19
19
|
put("/users/#{args[:username]}/preferences/avatar/pick", { upload_id: upload_response['upload_id'] })
|
20
20
|
end
|
21
21
|
|
@@ -31,12 +31,20 @@ module DiscourseApi
|
|
31
31
|
put("/users/#{username}/preferences/username", { new_username: new_username, api_key: api_key })
|
32
32
|
end
|
33
33
|
|
34
|
+
def update_trust_level(args)
|
35
|
+
args = API.params(args)
|
36
|
+
.required(:user_id, :level)
|
37
|
+
.to_h
|
38
|
+
response = put("/admin/users/#{args[:user_id]}/trust_level", args)
|
39
|
+
response[:body]
|
40
|
+
end
|
41
|
+
|
34
42
|
def create_user(args)
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
post("/users",
|
43
|
+
args = API.params(args)
|
44
|
+
.required(:name, :email, :password, :username)
|
45
|
+
.optional(:active)
|
46
|
+
.to_h
|
47
|
+
post("/users", args)
|
40
48
|
end
|
41
49
|
|
42
50
|
def log_out(id)
|
@@ -1,16 +1,27 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe DiscourseApi::API::ApiAdmin do
|
4
|
-
subject {
|
4
|
+
subject {
|
5
|
+
DiscourseApi::Client.new(
|
6
|
+
"http://localhost:3000",
|
7
|
+
"test_d7fd0429940",
|
8
|
+
"test_user"
|
9
|
+
)
|
10
|
+
}
|
5
11
|
|
6
12
|
describe "#api" do
|
7
13
|
before do
|
8
|
-
|
14
|
+
url = "http://localhost:3000/admin/api.json?" +
|
15
|
+
"api_key=test_d7fd0429940&api_username=test_user"
|
16
|
+
stub_get(url).to_return(body: fixture("api.json"),
|
17
|
+
headers: { content_type: "application/json" })
|
9
18
|
end
|
10
19
|
|
11
20
|
it "requests the correct resource" do
|
12
21
|
subject.api
|
13
|
-
|
22
|
+
url = "http://localhost:3000/admin/api.json?" +
|
23
|
+
"api_key=test_d7fd0429940&api_username=test_user"
|
24
|
+
expect(a_get(url)).to have_been_made
|
14
25
|
end
|
15
26
|
|
16
27
|
it "returns the requested api keys" do
|
@@ -20,4 +31,33 @@ describe DiscourseApi::API::ApiAdmin do
|
|
20
31
|
expect(api.first).to have_key('key')
|
21
32
|
end
|
22
33
|
end
|
34
|
+
|
35
|
+
describe "#generate_api_key" do
|
36
|
+
before do
|
37
|
+
url = "http://localhost:3000/admin/users/2/generate_api_key.json?" +
|
38
|
+
"api_key=test_d7fd0429940&api_username=test_user"
|
39
|
+
stub_post(url).to_return(body: fixture("generate_api_key.json"),
|
40
|
+
headers: { content_type: "application/json" })
|
41
|
+
end
|
42
|
+
|
43
|
+
it "returns the generated api key" do
|
44
|
+
api_key = subject.generate_api_key(2)
|
45
|
+
expect(api_key).to be_a Hash
|
46
|
+
expect(api_key['api_key']).to have_key('key')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "#revoke_api_key" do
|
51
|
+
before do
|
52
|
+
url = "http://localhost:3000/admin/users/2/revoke_api_key.json?" +
|
53
|
+
"api_key=test_d7fd0429940&api_username=test_user"
|
54
|
+
stub_post(url).to_return(body: "",
|
55
|
+
headers: { content_type: "application/json" })
|
56
|
+
end
|
57
|
+
|
58
|
+
it "returns 200" do
|
59
|
+
response = subject.revoke_api_key(2)
|
60
|
+
expect(response['status']).to eq(200)
|
61
|
+
end
|
62
|
+
end
|
23
63
|
end
|
@@ -166,4 +166,26 @@ describe DiscourseApi::API::Users do
|
|
166
166
|
expect(users.first).to be_a Hash
|
167
167
|
end
|
168
168
|
end
|
169
|
+
|
170
|
+
describe "#update_trust_level" do
|
171
|
+
before do
|
172
|
+
url = "http://localhost:3000/admin/users/2/trust_level?api_key=test_d7fd0429940&api_username=test_user"
|
173
|
+
stub_get(url).to_return(body: fixture("update_trust_level.json"),
|
174
|
+
headers: { content_type: "application/json" })
|
175
|
+
end
|
176
|
+
|
177
|
+
it "makes the correct put request" do
|
178
|
+
params = { user_id: 2, level: 2 }
|
179
|
+
subject.update_trust_level(params)
|
180
|
+
url = "http://localhost:3000/admin/users/2/trust_level?api_key=test_d7fd0429940&api_username=test_user"
|
181
|
+
expect(a_put(url)).to have_been_made
|
182
|
+
end
|
183
|
+
|
184
|
+
it "updates the trust_level" do
|
185
|
+
params = { user_id: 2, level: 2 }
|
186
|
+
admin_user = subject.update_trust_level(params)
|
187
|
+
expect(admin_user).to be_a Hash
|
188
|
+
expect(admin_user['admin_user']).to have_key('trust_level')
|
189
|
+
end
|
190
|
+
end
|
169
191
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
{
|
2
|
+
"api_key": {
|
3
|
+
"id": 5,
|
4
|
+
"key": "e722e04df8cf6d097d565ca04eea1ff8e9e8f09beb405bae6f0c79852916f334",
|
5
|
+
"user": {
|
6
|
+
"id": 2,
|
7
|
+
"username": "robin",
|
8
|
+
"uploaded_avatar_id": 3,
|
9
|
+
"avatar_template": "/user_avatar/localhost/robin/{size}/3.png"
|
10
|
+
}
|
11
|
+
}
|
12
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
{
|
2
|
+
"admin_user": {
|
3
|
+
"id": 2,
|
4
|
+
"username": "robin",
|
5
|
+
"uploaded_avatar_id": 3,
|
6
|
+
"avatar_template": "/user_avatar/localhost/robin/{size}/3.png",
|
7
|
+
"active": true,
|
8
|
+
"admin": false,
|
9
|
+
"moderator": false,
|
10
|
+
"last_seen_at": "2014-09-19T13:00:20.939Z",
|
11
|
+
"last_emailed_at": "2015-01-01T01:01:24.438Z",
|
12
|
+
"created_at": "2014-09-13T14:27:07.352Z",
|
13
|
+
"last_seen_age": "4mon",
|
14
|
+
"last_emailed_age": "13d",
|
15
|
+
"created_at_age": "4mon",
|
16
|
+
"username_lower": "robin",
|
17
|
+
"trust_level": 2,
|
18
|
+
"trust_level_locked": false,
|
19
|
+
"flag_level": 0,
|
20
|
+
"title": null,
|
21
|
+
"suspended_at": null,
|
22
|
+
"suspended_till": null,
|
23
|
+
"suspended": null,
|
24
|
+
"blocked": false,
|
25
|
+
"time_read": "< 1m",
|
26
|
+
"days_visited": 3,
|
27
|
+
"posts_read_count": 2,
|
28
|
+
"topics_entered": 2,
|
29
|
+
"post_count": 0,
|
30
|
+
"can_send_activation_email": true,
|
31
|
+
"can_activate": false,
|
32
|
+
"can_deactivate": true,
|
33
|
+
"ip_address": "127.0.0.1",
|
34
|
+
"registration_ip_address": "127.0.0.1",
|
35
|
+
"single_sign_on_record": null
|
36
|
+
}
|
37
|
+
}
|
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.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Saffron
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2015-01-
|
13
|
+
date: 2015-01-15 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: faraday
|
@@ -249,6 +249,7 @@ files:
|
|
249
249
|
- spec/fixtures/category_latest_topics.json
|
250
250
|
- spec/fixtures/email_list_all.json
|
251
251
|
- spec/fixtures/email_settings.json
|
252
|
+
- spec/fixtures/generate_api_key.json
|
252
253
|
- spec/fixtures/groups.json
|
253
254
|
- spec/fixtures/hot.json
|
254
255
|
- spec/fixtures/latest.json
|
@@ -260,6 +261,7 @@ files:
|
|
260
261
|
- spec/fixtures/topic.json
|
261
262
|
- spec/fixtures/topic_invite_user.json
|
262
263
|
- spec/fixtures/topics_created_by.json
|
264
|
+
- spec/fixtures/update_trust_level.json
|
263
265
|
- spec/fixtures/user.json
|
264
266
|
- spec/fixtures/user_activate_success.json
|
265
267
|
- spec/fixtures/user_badges.json
|
@@ -316,6 +318,7 @@ test_files:
|
|
316
318
|
- spec/fixtures/category_latest_topics.json
|
317
319
|
- spec/fixtures/email_list_all.json
|
318
320
|
- spec/fixtures/email_settings.json
|
321
|
+
- spec/fixtures/generate_api_key.json
|
319
322
|
- spec/fixtures/groups.json
|
320
323
|
- spec/fixtures/hot.json
|
321
324
|
- spec/fixtures/latest.json
|
@@ -327,6 +330,7 @@ test_files:
|
|
327
330
|
- spec/fixtures/topic.json
|
328
331
|
- spec/fixtures/topic_invite_user.json
|
329
332
|
- spec/fixtures/topics_created_by.json
|
333
|
+
- spec/fixtures/update_trust_level.json
|
330
334
|
- spec/fixtures/user.json
|
331
335
|
- spec/fixtures/user_activate_success.json
|
332
336
|
- spec/fixtures/user_badges.json
|