discourse_api 0.45.1 → 0.46.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 +15 -0
- data/examples/bookmark_topic.rb +15 -0
- data/lib/discourse_api/api/topics.rb +19 -2
- data/lib/discourse_api/client.rb +13 -1
- data/lib/discourse_api/error.rb +3 -0
- data/lib/discourse_api/version.rb +1 -1
- data/spec/discourse_api/api/topics_spec.rb +32 -0
- data/spec/discourse_api/client_spec.rb +15 -0
- data/spec/fixtures/topic_posts.json +1 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 83d6fc91bd7fd472cc3eab0fa06b79d0fbaa5e4cf7a2003bef82eee43f33acf4
|
4
|
+
data.tar.gz: c0aef1ea4eee35c3cf3143d100707c2850829e5551c79af3a6d6f76efb3b262c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4227051151b05bd67b403a9922d0199b4cdaf84ccf5973e4be57fb63af8345053b0d80ca763aa2a9c49c27a1a73a623540bde643a714710298c57e73c4a3a0d3
|
7
|
+
data.tar.gz: 5a6dfdc85bf1db5edb7e474ecfa1df038a617ebb4d3bf890611d6e195e3093d441e2dbdb3826ad468cc397e6de420f4d4d295b275ad0febb78fb32ae86dfec8e
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [0.46.0] - 2021-04-12
|
10
|
+
### Added
|
11
|
+
- Allow bookmarking topics
|
12
|
+
- Add timeout to requests
|
13
|
+
- Add params to get_topic_posts
|
14
|
+
|
15
|
+
## [0.45.1] - 2021-03-11
|
16
|
+
### Added
|
17
|
+
- Fetch global top topics
|
18
|
+
- Allow setting topic notifications
|
19
|
+
- Return full category response
|
20
|
+
|
21
|
+
### Changed
|
22
|
+
- Use new search endpoint
|
23
|
+
|
9
24
|
## [0.45.0] - 2021-01-15
|
10
25
|
### Added
|
11
26
|
- Tag configuration in create_category/update_category
|
@@ -0,0 +1,15 @@
|
|
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
|
+
# Bookmark topic
|
12
|
+
puts client.bookmark_topic(1418)
|
13
|
+
|
14
|
+
# Remove bookmark from topic
|
15
|
+
puts client.remove_topic_bookmark(1418)
|
@@ -74,13 +74,22 @@ module DiscourseApi
|
|
74
74
|
delete("/t/#{id}.json")
|
75
75
|
end
|
76
76
|
|
77
|
-
def topic_posts(topic_id, post_ids = [])
|
77
|
+
def topic_posts(topic_id, post_ids = [], params = {})
|
78
|
+
params = API.params(params)
|
79
|
+
.optional(:asc,
|
80
|
+
:filter,
|
81
|
+
:include_raw,
|
82
|
+
:include_suggested,
|
83
|
+
:post_number,
|
84
|
+
:username_filters,
|
85
|
+
)
|
86
|
+
|
78
87
|
url = ["/t/#{topic_id}/posts.json"]
|
79
88
|
if post_ids.count > 0
|
80
89
|
url.push('?')
|
81
90
|
url.push(post_ids.map { |id| "post_ids[]=#{id}" }.join('&'))
|
82
91
|
end
|
83
|
-
response = get(url.join)
|
92
|
+
response = get(url.join, params)
|
84
93
|
response[:body]
|
85
94
|
end
|
86
95
|
|
@@ -96,6 +105,14 @@ module DiscourseApi
|
|
96
105
|
.required(:notification_level)
|
97
106
|
post("/t/#{topic_id}/notifications", params)
|
98
107
|
end
|
108
|
+
|
109
|
+
def bookmark_topic(topic_id)
|
110
|
+
put("/t/#{topic_id}/bookmark.json")
|
111
|
+
end
|
112
|
+
|
113
|
+
def remove_topic_bookmark(topic_id)
|
114
|
+
put("/t/#{topic_id}/remove_bookmarks.json")
|
115
|
+
end
|
99
116
|
end
|
100
117
|
end
|
101
118
|
end
|
data/lib/discourse_api/client.rb
CHANGED
@@ -29,7 +29,9 @@ module DiscourseApi
|
|
29
29
|
class Client
|
30
30
|
attr_accessor :api_key
|
31
31
|
attr_accessor :basic_auth
|
32
|
-
attr_reader :host, :api_username
|
32
|
+
attr_reader :host, :api_username, :timeout
|
33
|
+
|
34
|
+
DEFAULT_TIMEOUT = 30
|
33
35
|
|
34
36
|
include DiscourseApi::API::Categories
|
35
37
|
include DiscourseApi::API::Search
|
@@ -60,6 +62,11 @@ module DiscourseApi
|
|
60
62
|
@use_relative = check_subdirectory(host)
|
61
63
|
end
|
62
64
|
|
65
|
+
def timeout=(timeout)
|
66
|
+
@timeout = timeout
|
67
|
+
@connection.options.timeout = timeout if @connection
|
68
|
+
end
|
69
|
+
|
63
70
|
def api_username=(api_username)
|
64
71
|
@api_username = api_username
|
65
72
|
@connection.headers['Api-Username'] = api_username unless @connection.nil?
|
@@ -68,6 +75,9 @@ module DiscourseApi
|
|
68
75
|
def connection_options
|
69
76
|
@connection_options ||= {
|
70
77
|
url: @host,
|
78
|
+
request: {
|
79
|
+
timeout: @timeout || DEFAULT_TIMEOUT
|
80
|
+
},
|
71
81
|
headers: {
|
72
82
|
accept: 'application/json',
|
73
83
|
user_agent: user_agent,
|
@@ -158,6 +168,8 @@ module DiscourseApi
|
|
158
168
|
response.env
|
159
169
|
rescue Faraday::ClientError, JSON::ParserError
|
160
170
|
raise DiscourseApi::Error
|
171
|
+
rescue Faraday::ConnectionFailed
|
172
|
+
raise DiscourseApi::Timeout
|
161
173
|
end
|
162
174
|
|
163
175
|
def handle_error(response)
|
data/lib/discourse_api/error.rb
CHANGED
@@ -170,6 +170,14 @@ describe DiscourseApi::API::Topics do
|
|
170
170
|
expect(body['post_stream']['posts']).to be_an Array
|
171
171
|
expect(body['post_stream']['posts'].first).to be_a Hash
|
172
172
|
end
|
173
|
+
|
174
|
+
it "can retrieve a topic posts' raw attribute" do
|
175
|
+
body = subject.topic_posts(57, [123], { include_raw: true })
|
176
|
+
expect(body).to be_a Hash
|
177
|
+
expect(body['post_stream']['posts']).to be_an Array
|
178
|
+
expect(body['post_stream']['posts'].first).to be_a Hash
|
179
|
+
expect(body['post_stream']['posts'].first['raw']).to be_an Array
|
180
|
+
end
|
173
181
|
end
|
174
182
|
|
175
183
|
describe "#create_topic_with_tags" do
|
@@ -200,4 +208,28 @@ describe DiscourseApi::API::Topics do
|
|
200
208
|
expect(response['success']).to eq('OK')
|
201
209
|
end
|
202
210
|
end
|
211
|
+
|
212
|
+
describe "#bookmark_topic" do
|
213
|
+
before do
|
214
|
+
stub_put("#{host}/t/1/bookmark.json").to_return(body: "", headers: { content_type: "application/json" })
|
215
|
+
end
|
216
|
+
|
217
|
+
it "makes the put request" do
|
218
|
+
response = subject.bookmark_topic(1)
|
219
|
+
expect(a_put("#{host}/t/1/bookmark.json")).to have_been_made
|
220
|
+
expect(response.body).to eq(nil)
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
describe "#remove_topic_bookmark" do
|
225
|
+
before do
|
226
|
+
stub_put("#{host}/t/1/remove_bookmarks.json").to_return(body: "", headers: { content_type: "application/json" })
|
227
|
+
end
|
228
|
+
|
229
|
+
it "makes the put request" do
|
230
|
+
response = subject.remove_topic_bookmark(1)
|
231
|
+
expect(a_put("#{host}/t/1/remove_bookmarks.json")).to have_been_made
|
232
|
+
expect(response.body).to eq(nil)
|
233
|
+
end
|
234
|
+
end
|
203
235
|
end
|
@@ -28,6 +28,21 @@ describe DiscourseApi::Client do
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
+
describe "#timeout" do
|
32
|
+
context 'custom timeout' do
|
33
|
+
it "is set to Faraday connection" do
|
34
|
+
expect(subject.send(:connection).options.timeout).to eq(30)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'default timeout' do
|
39
|
+
it "is set to Faraday connection" do
|
40
|
+
subject.timeout = 25
|
41
|
+
expect(subject.send(:connection).options.timeout).to eq(25)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
31
46
|
describe "#api_key" do
|
32
47
|
it "is publically accessible" do
|
33
48
|
subject.api_key = "test_d7fd0429940"
|
@@ -34,6 +34,7 @@
|
|
34
34
|
"read":true,
|
35
35
|
"user_title":null,
|
36
36
|
"actions_summary":[{"id":2,"count":3,"can_act":true}],
|
37
|
+
"raw": [{"type":"paragraph","children":[{"text":"This is a raw post I've got white space!... and emojis 😈😈😈😈😈😈"}]}],
|
37
38
|
"moderator":false,
|
38
39
|
"admin":false,
|
39
40
|
"staff":false,
|
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.46.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: 2021-
|
14
|
+
date: 2021-04-12 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: faraday
|
@@ -204,6 +204,7 @@ files:
|
|
204
204
|
- discourse_api.gemspec
|
205
205
|
- examples/backups.rb
|
206
206
|
- examples/badges.rb
|
207
|
+
- examples/bookmark_topic.rb
|
207
208
|
- examples/category.rb
|
208
209
|
- examples/change_topic_status.rb
|
209
210
|
- examples/create_private_message.rb
|
@@ -344,7 +345,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
344
345
|
- !ruby/object:Gem::Version
|
345
346
|
version: '0'
|
346
347
|
requirements: []
|
347
|
-
rubygems_version: 3.1.
|
348
|
+
rubygems_version: 3.1.6
|
348
349
|
signing_key:
|
349
350
|
specification_version: 4
|
350
351
|
summary: Allows access to the Discourse API
|