discourse_api 0.41.0 → 0.45.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 +36 -7
- data/README.md +0 -1
- data/discourse_api.gemspec +2 -2
- data/examples/change_topic_status.rb +3 -4
- data/examples/create_topic.rb +10 -0
- data/examples/manage_api_keys.rb +42 -0
- data/lib/discourse_api/api/api_key.rb +15 -9
- data/lib/discourse_api/api/categories.rb +4 -2
- data/lib/discourse_api/api/groups.rb +10 -2
- data/lib/discourse_api/api/tags.rb +1 -1
- data/lib/discourse_api/api/topics.rb +15 -2
- data/lib/discourse_api/api/users.rb +1 -1
- data/lib/discourse_api/client.rb +4 -0
- data/lib/discourse_api/version.rb +1 -1
- data/spec/discourse_api/api/api_key_spec.rb +59 -35
- data/spec/discourse_api/api/topics_spec.rb +19 -1
- data/spec/fixtures/api_key.json +12 -0
- data/spec/fixtures/create_topic_with_tags.json +65 -0
- data/spec/fixtures/list_api_keys.json +14 -0
- metadata +12 -9
- data/spec/fixtures/api.json +0 -12
- data/spec/fixtures/generate_master_key.json +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 82cd748487d5d986f8327b702088ea4ea22c43cae311c2634dfa5d9cf4c4059f
|
4
|
+
data.tar.gz: a4fd68101134895f5071443f221a2327e9fe9e4a0a79df0d53a620c7e08d685d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 42546f17e134cd1e4ac6be81c8fdb53cf82461d60a73859dd757c2ec69e1128127f33a131e45dfec3d910012702256a173a7a1afd2a9873dc3d8a3e220c4af1a
|
7
|
+
data.tar.gz: 990fc89fd2a4935704e1512b858872b41ed7a6b7ba3ef28f583ad272e0675daff74f61b9a441632a8dc92c76892b8c507e53afce356317403c7c67f31a4fab18
|
data/CHANGELOG.md
CHANGED
@@ -1,21 +1,52 @@
|
|
1
|
-
#
|
1
|
+
# Changelog
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
|
-
|
3
|
+
|
4
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
|
+
|
7
|
+
## [Unreleased]
|
8
|
+
|
9
|
+
## [0.45.0] - 2021-01-15
|
10
|
+
### Added
|
11
|
+
- Tag configuration in create_category/update_category
|
12
|
+
- Topic#change_owner
|
13
|
+
- Support passing approved to #create_user
|
14
|
+
### Changed
|
15
|
+
- API key methods use the latest endpoints
|
16
|
+
|
17
|
+
## [0.44.0] - 2020-11-13
|
18
|
+
### Fixed
|
19
|
+
- Updated `show_tag` method to use new route
|
20
|
+
### Removed
|
21
|
+
- Support for Ruby 2.3 and 2.4
|
22
|
+
|
23
|
+
## [0.43.1] - 2020-11-04
|
24
|
+
### Fixed
|
25
|
+
- Tagged version 0.43.0 got pushed without commmit due to new master branch
|
26
|
+
protections in github. No, code changes here just making sure tags align with
|
27
|
+
commits.
|
28
|
+
|
29
|
+
## [0.43.0] - 2020-11-04
|
30
|
+
### Added
|
31
|
+
- Add pagination to list groups endpoint
|
32
|
+
### Deprecated
|
33
|
+
- `change_topic_status` has been deprecated, use `update_topic_status` instead.
|
34
|
+
|
35
|
+
## [0.42.0] - 2020-07-09
|
36
|
+
### Added
|
37
|
+
- Create topics with tags
|
4
38
|
|
5
39
|
## [0.41.0] - 2020-06-17
|
6
40
|
### Added
|
7
41
|
- Add basic auth support
|
8
|
-
|
9
42
|
### Fixed
|
10
43
|
- Fix SSO custom field prefixes
|
11
|
-
|
12
44
|
### Removed
|
13
45
|
- Obsolete api key endpoints
|
14
46
|
|
15
47
|
## [0.40.0] - 2020-05-07
|
16
48
|
### Fixed
|
17
49
|
- Add missing attributes to `sync_sso`
|
18
|
-
|
19
50
|
### Added
|
20
51
|
- Add delete category method
|
21
52
|
|
@@ -37,7 +68,6 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
37
68
|
- Allow more options parameters when creating a category
|
38
69
|
- Don't require topic slug when updating topic status
|
39
70
|
- Example files now read config.yml file when present for client settings
|
40
|
-
|
41
71
|
### Fixed
|
42
72
|
- Issue with `topic_posts` and frozen strings
|
43
73
|
- Fixed some topic and category methods
|
@@ -289,5 +319,4 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
289
319
|
- `client.category_latest_posts("category-slug")` endpoint
|
290
320
|
|
291
321
|
## [0.1.2] - 2014-05-11
|
292
|
-
|
293
322
|
- Release
|
data/README.md
CHANGED
@@ -34,7 +34,6 @@ client.ssl(...) #=> specify SSL connection setti
|
|
34
34
|
|
35
35
|
# Topic endpoints
|
36
36
|
client.latest_topics #=> Gets a list of the latest topics
|
37
|
-
client.hot_topics #=> Gets a list of hot topics
|
38
37
|
client.new_topics #=> Gets a list of new topics
|
39
38
|
client.topics_by("sam") #=> Gets a list of topics created by user "sam"
|
40
39
|
client.topic(57) #=> Gets the topic with id 57
|
data/discourse_api.gemspec
CHANGED
@@ -29,8 +29,8 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.add_development_dependency 'rb-inotify', '~> 0.9'
|
30
30
|
spec.add_development_dependency 'rspec', '~> 3.4'
|
31
31
|
spec.add_development_dependency 'simplecov', '~> 0.11'
|
32
|
-
spec.add_development_dependency 'webmock', '~>
|
32
|
+
spec.add_development_dependency 'webmock', '~> 3.0'
|
33
33
|
spec.add_development_dependency 'rubocop-discourse'
|
34
34
|
|
35
|
-
spec.required_ruby_version = '>= 2.
|
35
|
+
spec.required_ruby_version = '>= 2.5.0'
|
36
36
|
end
|
@@ -16,9 +16,8 @@ response = client.create_topic(
|
|
16
16
|
raw: "This is the raw markdown for my post"
|
17
17
|
)
|
18
18
|
|
19
|
-
# get topic_id
|
19
|
+
# get topic_id from response
|
20
20
|
topic_id = response['topic_id']
|
21
|
-
topic_slug = response['topic_slug']
|
22
21
|
|
23
22
|
##
|
24
23
|
# available options (guessing from reading discourse source)
|
@@ -28,8 +27,8 @@ topic_slug = response['topic_slug']
|
|
28
27
|
|
29
28
|
# lock topic (note: api_username determines user that is performing action)
|
30
29
|
params = { status: 'closed', enabled: true, api_username: "YOUR USERNAME/USERS USERNAME" }
|
31
|
-
client.change_topic_status(
|
30
|
+
client.change_topic_status(topic_id, params)
|
32
31
|
|
33
32
|
# unlock topic (note: api_username determines user that is performing action)
|
34
33
|
params = { status: 'closed', enabled: false, api_username: "YOUR USERNAME/USERS USERNAME" }
|
35
|
-
client.change_topic_status(
|
34
|
+
client.change_topic_status(topic_id, params)
|
data/examples/create_topic.rb
CHANGED
@@ -24,3 +24,13 @@ client.create_topic(
|
|
24
24
|
title: "Your Favorite Color?",
|
25
25
|
raw: "[poll name=color]\n- Green\n- Blue\n- Red\n[/poll]"
|
26
26
|
)
|
27
|
+
|
28
|
+
# Create Topic with Tags
|
29
|
+
client.create_topic(
|
30
|
+
category: 1,
|
31
|
+
skip_validations: true,
|
32
|
+
auto_track: false,
|
33
|
+
title: "Concert Master: A new way to choose",
|
34
|
+
raw: "This is the raw markdown for my post"
|
35
|
+
tags: ['asdf', 'fdsa']
|
36
|
+
)
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
3
|
+
require File.expand_path('../../lib/discourse_api', __FILE__)
|
4
|
+
|
5
|
+
config = DiscourseApi::ExampleHelper.load_yml
|
6
|
+
|
7
|
+
client = DiscourseApi::Client.new(config['host'] || 'http://localhost:3000')
|
8
|
+
client.api_key = config['api_key'] || "YOUR_API_KEY"
|
9
|
+
client.api_username = config['api_username'] || "YOUR_USERNAME"
|
10
|
+
|
11
|
+
# generate user api key
|
12
|
+
response = client.create_api_key(
|
13
|
+
key: {
|
14
|
+
description: "Key to The Batmobile",
|
15
|
+
username: "batman"
|
16
|
+
}
|
17
|
+
)
|
18
|
+
|
19
|
+
api_key_id = response["key"]["id"]
|
20
|
+
|
21
|
+
puts response
|
22
|
+
# sample output: {"key"=>{"id"=>13, "key"=>"abc", "description"=>"Key to the Batmobile"}}
|
23
|
+
|
24
|
+
response = client.revoke_api_key(api_key_id)
|
25
|
+
|
26
|
+
puts response
|
27
|
+
# sample output: {"key"=>{"id"=>13, "key"=>"abc", "description"=>"Key to the Batmobile", "revoked_at"=>"2021-01-01T00:00:00.000Z"}}
|
28
|
+
|
29
|
+
response = client.undo_revoke_api_key(api_key_id)
|
30
|
+
|
31
|
+
puts response
|
32
|
+
# sample output: {"key"=>{"id"=>13, "key"=>"abc", "description"=>"Key to the Batmobile", "revoked_at"=>nil}}
|
33
|
+
|
34
|
+
response = client.list_api_keys
|
35
|
+
|
36
|
+
puts response
|
37
|
+
# sample output: {"keys"=>[{"id"=>13, "key"=>"abc", "description"=>"Key to the Batmobile"}]}
|
38
|
+
|
39
|
+
response = client.delete_api_key(api_key_id)
|
40
|
+
|
41
|
+
puts response
|
42
|
+
# sample output: {"success"=>"OK"}
|
@@ -2,22 +2,28 @@
|
|
2
2
|
module DiscourseApi
|
3
3
|
module API
|
4
4
|
module ApiKey
|
5
|
-
def
|
6
|
-
response = get("/admin/api
|
7
|
-
response
|
5
|
+
def list_api_keys
|
6
|
+
response = get("/admin/api/keys")
|
7
|
+
response[:body]
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
|
10
|
+
def create_api_key(args)
|
11
|
+
args = API.params(args)
|
12
|
+
.required(:key)
|
13
|
+
.to_h
|
14
|
+
post("/admin/api/keys", args)
|
12
15
|
end
|
13
16
|
|
14
17
|
def revoke_api_key(id)
|
15
|
-
|
18
|
+
post("/admin/api/keys/#{id}/revoke")
|
16
19
|
end
|
17
20
|
|
18
|
-
def
|
19
|
-
|
20
|
-
|
21
|
+
def undo_revoke_api_key(id)
|
22
|
+
post("/admin/api/keys/#{id}/undo-revoke")
|
23
|
+
end
|
24
|
+
|
25
|
+
def delete_api_key(id)
|
26
|
+
delete("/admin/api/keys/#{id}")
|
21
27
|
end
|
22
28
|
end
|
23
29
|
end
|
@@ -10,7 +10,8 @@ module DiscourseApi
|
|
10
10
|
.required(:name, :color, :text_color)
|
11
11
|
.optional(:slug, :permissions, :auto_close_hours, :auto_close_based_on_last_post, :position, :email_in,
|
12
12
|
:email_in_allow_strangers, :logo_url, :background_url, :allow_badges, :topic_template, :custom_fields, :description,
|
13
|
-
:reviewable_by_group_name, :show_subcategory_list, :subcategory_list_style
|
13
|
+
:reviewable_by_group_name, :show_subcategory_list, :subcategory_list_style,
|
14
|
+
:allowed_tags, :allowed_tag_groups, :required_tag_group_name)
|
14
15
|
.default(parent_category_id: nil)
|
15
16
|
response = post("/categories", args)
|
16
17
|
response['category']
|
@@ -22,7 +23,8 @@ module DiscourseApi
|
|
22
23
|
.required(:id, :name, :color, :text_color)
|
23
24
|
.optional(:slug, :permissions, :auto_close_hours, :auto_close_based_on_last_post, :position, :email_in,
|
24
25
|
:email_in_allow_strangers, :logo_url, :background_url, :allow_badges, :topic_template, :custom_fields, :description,
|
25
|
-
:reviewable_by_group_name, :show_subcategory_list, :subcategory_list_style
|
26
|
+
:reviewable_by_group_name, :show_subcategory_list, :subcategory_list_style,
|
27
|
+
:allowed_tags, :allowed_tag_groups, :required_tag_group_name)
|
26
28
|
.default(parent_category_id: nil)
|
27
29
|
response = put("/categories/#{category_id}", args)
|
28
30
|
response['body']['category'] if response['body']
|
@@ -60,8 +60,16 @@ module DiscourseApi
|
|
60
60
|
put("/groups/#{group_id}", group: args)
|
61
61
|
end
|
62
62
|
|
63
|
-
def groups
|
64
|
-
|
63
|
+
def groups(args = {})
|
64
|
+
params = API.params(args)
|
65
|
+
.optional(:page)
|
66
|
+
.to_h
|
67
|
+
|
68
|
+
url = "/groups.json"
|
69
|
+
if params.include?(:page)
|
70
|
+
url += "?page=#{params[:page]}"
|
71
|
+
end
|
72
|
+
response = get(url)
|
65
73
|
response.body
|
66
74
|
end
|
67
75
|
|
@@ -9,7 +9,7 @@ module DiscourseApi
|
|
9
9
|
def create_topic(args = {})
|
10
10
|
args = API.params(args)
|
11
11
|
.required(:title, :raw)
|
12
|
-
.optional(:skip_validations, :category, :auto_track, :created_at, :api_username)
|
12
|
+
.optional(:skip_validations, :category, :auto_track, :created_at, :api_username, :tags)
|
13
13
|
post("/posts", args.to_h)
|
14
14
|
end
|
15
15
|
|
@@ -42,11 +42,17 @@ module DiscourseApi
|
|
42
42
|
put("/t/#{topic_id}.json", topic_id: topic_id, category_id: category_id)
|
43
43
|
end
|
44
44
|
|
45
|
+
# TODO: Deprecated. Remove after 20201231
|
45
46
|
def change_topic_status(topic_slug, topic_id, params = {})
|
47
|
+
deprecated(__method__, 'update_topic_status')
|
48
|
+
update_topic_status(topic_id, params)
|
49
|
+
end
|
50
|
+
|
51
|
+
def update_topic_status(topic_id, params = {})
|
46
52
|
params = API.params(params)
|
47
53
|
.required(:status, :enabled)
|
48
54
|
.optional(:api_username)
|
49
|
-
put("/t/#{topic_id}/status", params
|
55
|
+
put("/t/#{topic_id}/status", params)
|
50
56
|
end
|
51
57
|
|
52
58
|
def topic(id, params = {})
|
@@ -72,6 +78,13 @@ module DiscourseApi
|
|
72
78
|
response = get(url.join)
|
73
79
|
response[:body]
|
74
80
|
end
|
81
|
+
|
82
|
+
def change_owner(topic_id, params = {})
|
83
|
+
params = API.params(params)
|
84
|
+
.required(:username, :post_ids)
|
85
|
+
|
86
|
+
post("/t/#{topic_id}/change-owner.json", params)
|
87
|
+
end
|
75
88
|
end
|
76
89
|
end
|
77
90
|
end
|
@@ -52,7 +52,7 @@ module DiscourseApi
|
|
52
52
|
def create_user(args)
|
53
53
|
args = API.params(args)
|
54
54
|
.required(:name, :email, :password, :username)
|
55
|
-
.optional(:active, :staged, :user_fields)
|
55
|
+
.optional(:active, :approved, :staged, :user_fields)
|
56
56
|
.to_h
|
57
57
|
post("/users", args)
|
58
58
|
end
|
data/lib/discourse_api/client.rb
CHANGED
@@ -109,6 +109,10 @@ module DiscourseApi
|
|
109
109
|
@user_agent ||= "DiscourseAPI Ruby Gem #{DiscourseApi::VERSION}"
|
110
110
|
end
|
111
111
|
|
112
|
+
def deprecated(old, new)
|
113
|
+
warn "[DEPRECATED]: `#{old}` is deprecated. Please use `#{new}` instead."
|
114
|
+
end
|
115
|
+
|
112
116
|
private
|
113
117
|
|
114
118
|
def connection
|
@@ -10,77 +10,101 @@ describe DiscourseApi::API::ApiKey do
|
|
10
10
|
)
|
11
11
|
}
|
12
12
|
|
13
|
-
describe "#
|
13
|
+
describe "#list_api_keys" do
|
14
14
|
before do
|
15
|
-
url = "#{host}/admin/api
|
16
|
-
stub_get(url).to_return(body: fixture("
|
15
|
+
url = "#{host}/admin/api/keys"
|
16
|
+
stub_get(url).to_return(body: fixture("list_api_keys.json"),
|
17
17
|
headers: { content_type: "application/json" })
|
18
18
|
end
|
19
19
|
|
20
20
|
it "requests the correct resource" do
|
21
|
-
subject.
|
22
|
-
url = "#{host}/admin/api
|
21
|
+
subject.list_api_keys
|
22
|
+
url = "#{host}/admin/api/keys"
|
23
23
|
expect(a_get(url)).to have_been_made
|
24
24
|
end
|
25
25
|
|
26
26
|
it "returns the requested api keys" do
|
27
|
-
|
28
|
-
expect(
|
29
|
-
expect(
|
30
|
-
expect(
|
27
|
+
keys = subject.list_api_keys
|
28
|
+
expect(keys["keys"]).to be_an Array
|
29
|
+
expect(keys["keys"].first).to be_a Hash
|
30
|
+
expect(keys["keys"].first).to have_key('key')
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
describe "#
|
34
|
+
describe "#create_api_key" do
|
35
35
|
before do
|
36
|
-
url = "#{host}/admin/api/
|
37
|
-
stub_post(url).to_return(body: fixture("
|
36
|
+
url = "#{host}/admin/api/keys"
|
37
|
+
stub_post(url).to_return(body: fixture("api_key.json"),
|
38
38
|
headers: { content_type: "application/json" })
|
39
39
|
end
|
40
40
|
|
41
|
-
it "
|
42
|
-
|
43
|
-
|
44
|
-
expect(
|
45
|
-
|
41
|
+
it "requests the correct resource" do
|
42
|
+
subject.create_api_key(key: { username: 'robin' })
|
43
|
+
url = "#{host}/admin/api/keys"
|
44
|
+
expect(a_post(url)).to have_been_made
|
45
|
+
end
|
46
|
+
|
47
|
+
it "returns the generated api key" do
|
48
|
+
api_key = subject.create_api_key(key: { username: 'robin' })
|
49
|
+
expect(api_key).to be_a Hash
|
50
|
+
expect(api_key['key']).to have_key('key')
|
46
51
|
end
|
47
52
|
end
|
48
53
|
|
49
54
|
describe "#revoke_api_key" do
|
50
55
|
before do
|
51
|
-
url = "#{host}/admin/api/
|
52
|
-
|
53
|
-
|
56
|
+
url = "#{host}/admin/api/keys/10/revoke"
|
57
|
+
stub_post(url).to_return(body: fixture("api_key.json"),
|
58
|
+
headers: { content_type: "application/json" })
|
54
59
|
end
|
55
60
|
|
56
61
|
it "requests the correct resource" do
|
57
62
|
subject.revoke_api_key(10)
|
58
|
-
url = "#{host}/admin/api/
|
59
|
-
expect(
|
63
|
+
url = "#{host}/admin/api/keys/10/revoke"
|
64
|
+
expect(a_post(url)).to have_been_made
|
60
65
|
end
|
61
66
|
|
62
|
-
it "returns
|
63
|
-
|
64
|
-
expect(
|
67
|
+
it "returns the api key" do
|
68
|
+
api_key = subject.revoke_api_key(10)
|
69
|
+
expect(api_key['key']).to have_key('key')
|
65
70
|
end
|
66
71
|
end
|
67
72
|
|
68
|
-
describe "#
|
73
|
+
describe "#undo_revoke_api_key" do
|
69
74
|
before do
|
70
|
-
url = "#{host}/admin/api/
|
71
|
-
|
72
|
-
|
75
|
+
url = "#{host}/admin/api/keys/10/undo-revoke"
|
76
|
+
stub_post(url).to_return(body: fixture("api_key.json"),
|
77
|
+
headers: { content_type: "application/json" })
|
73
78
|
end
|
74
79
|
|
75
80
|
it "requests the correct resource" do
|
76
|
-
subject.
|
77
|
-
url = "#{host}/admin/api/
|
78
|
-
expect(
|
81
|
+
subject.undo_revoke_api_key(10)
|
82
|
+
url = "#{host}/admin/api/keys/10/undo-revoke"
|
83
|
+
expect(a_post(url)).to have_been_made
|
79
84
|
end
|
80
85
|
|
81
|
-
it "returns the
|
82
|
-
|
83
|
-
expect(
|
86
|
+
it "returns the api key" do
|
87
|
+
api_key = subject.undo_revoke_api_key(10)
|
88
|
+
expect(api_key['key']).to have_key('key')
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe "#delete_api_key" do
|
93
|
+
before do
|
94
|
+
url = "#{host}/admin/api/keys/10"
|
95
|
+
stub_delete(url).to_return(body: '{"success": "OK"}',
|
96
|
+
headers: { content_type: "application/json" })
|
97
|
+
end
|
98
|
+
|
99
|
+
it "requests the correct resource" do
|
100
|
+
subject.delete_api_key(10)
|
101
|
+
url = "#{host}/admin/api/keys/10"
|
102
|
+
expect(a_delete(url)).to have_been_made
|
103
|
+
end
|
104
|
+
|
105
|
+
it "returns 200" do
|
106
|
+
response = subject.delete_api_key(10)
|
107
|
+
expect(response['status']).to eq(200)
|
84
108
|
end
|
85
109
|
end
|
86
110
|
end
|
@@ -10,7 +10,7 @@ describe DiscourseApi::API::Topics do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
it "changes the topic status" do
|
13
|
-
subject.
|
13
|
+
subject.update_topic_status(57, { status: 'visible', enabled: false })
|
14
14
|
expect(a_put("#{host}/t/57/status")).to have_been_made
|
15
15
|
end
|
16
16
|
end
|
@@ -148,4 +148,22 @@ describe DiscourseApi::API::Topics do
|
|
148
148
|
expect(body['post_stream']['posts'].first).to be_a Hash
|
149
149
|
end
|
150
150
|
end
|
151
|
+
|
152
|
+
describe "#create_topic_with_tags" do
|
153
|
+
before do
|
154
|
+
stub_post("#{host}/posts").to_return(body: fixture("create_topic_with_tags.json"), headers: { content_type: "application/json" })
|
155
|
+
end
|
156
|
+
|
157
|
+
it "makes the post request" do
|
158
|
+
subject.create_topic title: "Sample Topic Title", raw: "Sample topic content body", tags: ["asdf", "fdsa"]
|
159
|
+
expect(a_post("#{host}/posts")).to have_been_made
|
160
|
+
end
|
161
|
+
|
162
|
+
it "returns success" do
|
163
|
+
response = subject.create_topic title: "Sample Topic Title", raw: "Sample topic content body", tags: ["asdf", "fdsa"]
|
164
|
+
expect(response).to be_a Hash
|
165
|
+
expect(response['topic_id']).to eq 21
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
151
169
|
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
{
|
2
|
+
"id": 29,
|
3
|
+
"name": null,
|
4
|
+
"username": "blake",
|
5
|
+
"avatar_template": "/user_avatar/localhost/blake/{size}/3_2.png",
|
6
|
+
"created_at": "2020-07-09T15:52:43.802Z",
|
7
|
+
"cooked": "<p>cb8ee24eb3c5a81139958cf2b6bee9bd 2a7f7ea218e24c9ee6528cd383527f99 5a3006b92918946230385393a83b6005</p>",
|
8
|
+
"post_number": 1,
|
9
|
+
"post_type": 1,
|
10
|
+
"updated_at": "2020-07-09T15:52:43.802Z",
|
11
|
+
"reply_count": 0,
|
12
|
+
"reply_to_post_number": null,
|
13
|
+
"quote_count": 0,
|
14
|
+
"incoming_link_count": 0,
|
15
|
+
"reads": 0,
|
16
|
+
"readers_count": 0,
|
17
|
+
"score": 0,
|
18
|
+
"yours": true,
|
19
|
+
"topic_id": 21,
|
20
|
+
"topic_slug": "1412a036bfe-6480718525e-9f71f98ef46",
|
21
|
+
"display_username": null,
|
22
|
+
"primary_group_name": null,
|
23
|
+
"primary_group_flair_url": null,
|
24
|
+
"primary_group_flair_bg_color": null,
|
25
|
+
"primary_group_flair_color": null,
|
26
|
+
"version": 1,
|
27
|
+
"can_edit": true,
|
28
|
+
"can_delete": false,
|
29
|
+
"can_recover": false,
|
30
|
+
"can_wiki": true,
|
31
|
+
"user_title": null,
|
32
|
+
"actions_summary": [
|
33
|
+
{
|
34
|
+
"id": 3,
|
35
|
+
"can_act": true
|
36
|
+
},
|
37
|
+
{
|
38
|
+
"id": 4,
|
39
|
+
"can_act": true
|
40
|
+
},
|
41
|
+
{
|
42
|
+
"id": 8,
|
43
|
+
"can_act": true
|
44
|
+
},
|
45
|
+
{
|
46
|
+
"id": 7,
|
47
|
+
"can_act": true
|
48
|
+
}
|
49
|
+
],
|
50
|
+
"moderator": false,
|
51
|
+
"admin": true,
|
52
|
+
"staff": true,
|
53
|
+
"user_id": 1,
|
54
|
+
"draft_sequence": 0,
|
55
|
+
"hidden": false,
|
56
|
+
"trust_level": 1,
|
57
|
+
"deleted_at": null,
|
58
|
+
"user_deleted": false,
|
59
|
+
"edit_reason": null,
|
60
|
+
"can_view_edit_history": true,
|
61
|
+
"wiki": false,
|
62
|
+
"reviewable_id": null,
|
63
|
+
"reviewable_score_count": 0,
|
64
|
+
"reviewable_score_pending_count": 0
|
65
|
+
}
|
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.45.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: 2021-01-15 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: faraday
|
@@ -159,14 +159,14 @@ dependencies:
|
|
159
159
|
requirements:
|
160
160
|
- - "~>"
|
161
161
|
- !ruby/object:Gem::Version
|
162
|
-
version: '
|
162
|
+
version: '3.0'
|
163
163
|
type: :development
|
164
164
|
prerelease: false
|
165
165
|
version_requirements: !ruby/object:Gem::Requirement
|
166
166
|
requirements:
|
167
167
|
- - "~>"
|
168
168
|
- !ruby/object:Gem::Version
|
169
|
-
version: '
|
169
|
+
version: '3.0'
|
170
170
|
- !ruby/object:Gem::Dependency
|
171
171
|
name: rubocop-discourse
|
172
172
|
requirement: !ruby/object:Gem::Requirement
|
@@ -216,6 +216,7 @@ files:
|
|
216
216
|
- examples/group_set_user_notification_level.rb
|
217
217
|
- examples/groups.rb
|
218
218
|
- examples/invite_users.rb
|
219
|
+
- examples/manage_api_keys.rb
|
219
220
|
- examples/polls.rb
|
220
221
|
- examples/post_action.rb
|
221
222
|
- examples/search.rb
|
@@ -271,19 +272,20 @@ files:
|
|
271
272
|
- spec/discourse_api/api/users_spec.rb
|
272
273
|
- spec/discourse_api/client_spec.rb
|
273
274
|
- spec/fixtures/admin_user.json
|
274
|
-
- spec/fixtures/
|
275
|
+
- spec/fixtures/api_key.json
|
275
276
|
- spec/fixtures/backups.json
|
276
277
|
- spec/fixtures/badges.json
|
277
278
|
- spec/fixtures/categories.json
|
278
279
|
- spec/fixtures/category_latest_topics.json
|
279
280
|
- spec/fixtures/category_topics.json
|
281
|
+
- spec/fixtures/create_topic_with_tags.json
|
280
282
|
- spec/fixtures/email_list_all.json
|
281
283
|
- spec/fixtures/email_settings.json
|
282
|
-
- spec/fixtures/generate_master_key.json
|
283
284
|
- spec/fixtures/group.json
|
284
285
|
- spec/fixtures/groups.json
|
285
286
|
- spec/fixtures/hot.json
|
286
287
|
- spec/fixtures/latest.json
|
288
|
+
- spec/fixtures/list_api_keys.json
|
287
289
|
- spec/fixtures/members_0.json
|
288
290
|
- spec/fixtures/members_1.json
|
289
291
|
- spec/fixtures/members_2.json
|
@@ -332,7 +334,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
332
334
|
requirements:
|
333
335
|
- - ">="
|
334
336
|
- !ruby/object:Gem::Version
|
335
|
-
version: 2.
|
337
|
+
version: 2.5.0
|
336
338
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
337
339
|
requirements:
|
338
340
|
- - ">="
|
@@ -364,19 +366,20 @@ test_files:
|
|
364
366
|
- spec/discourse_api/api/users_spec.rb
|
365
367
|
- spec/discourse_api/client_spec.rb
|
366
368
|
- spec/fixtures/admin_user.json
|
367
|
-
- spec/fixtures/
|
369
|
+
- spec/fixtures/api_key.json
|
368
370
|
- spec/fixtures/backups.json
|
369
371
|
- spec/fixtures/badges.json
|
370
372
|
- spec/fixtures/categories.json
|
371
373
|
- spec/fixtures/category_latest_topics.json
|
372
374
|
- spec/fixtures/category_topics.json
|
375
|
+
- spec/fixtures/create_topic_with_tags.json
|
373
376
|
- spec/fixtures/email_list_all.json
|
374
377
|
- spec/fixtures/email_settings.json
|
375
|
-
- spec/fixtures/generate_master_key.json
|
376
378
|
- spec/fixtures/group.json
|
377
379
|
- spec/fixtures/groups.json
|
378
380
|
- spec/fixtures/hot.json
|
379
381
|
- spec/fixtures/latest.json
|
382
|
+
- spec/fixtures/list_api_keys.json
|
380
383
|
- spec/fixtures/members_0.json
|
381
384
|
- spec/fixtures/members_1.json
|
382
385
|
- spec/fixtures/members_2.json
|
data/spec/fixtures/api.json
DELETED