discourse_api 0.15.0 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 90d97e9771aa2f4cb2c06fed9c40b5dc731c19cf
4
- data.tar.gz: accbb8997a8343471fd23d156b0746f52551025d
3
+ metadata.gz: dbc919ed6b4b910836e7c49ee0eeeba549089ab0
4
+ data.tar.gz: 66a670a076264fed42fc8763358c94a698d2fc0d
5
5
  SHA512:
6
- metadata.gz: 6f177e29569f3d153f624590a066a3b13b64fda9356242928d114b6ff6bb3d713a1a6677e036c6098be9ac5b35e9e3199a5c10d71b5716f0a98d64569ef31780
7
- data.tar.gz: 7573dd18b98da929223a1cb6bfd0d7eda423222dd9a8817f433b744bcc738f53c8b279468b35451c9bb5a263e6e5f50348d1cf51459252349739e1897330fb7b
6
+ metadata.gz: d29e787eb57d150ee9ceac985e41ac185a56316a2083a59f756e9f4a04ca3bb1ee0440cc772f33198c7222b1ff322dc67080c8ff1ac0610a550938a8b09c4c69
7
+ data.tar.gz: 696ff6e30a2c947d7a3c4906ebff3cc43b55b71ca7c3c95e77d530b083ceece1a7bf6ffd2899da18a5976f7fc7becc817fc472c572e201f531979e5426b05f6e
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
  All notable changes to this project will be documented in this file.
3
3
  This project adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
+ ## [0.16.0] - 2017-05-14
6
+ ### Added
7
+ - added `upload_file`
8
+ ### Removed
9
+ - removed `upload_post_image`
10
+
5
11
  ## [0.15.0] - 2017-04-12
6
12
  ### Added
7
13
  - added the ability to create private messages
data/README.md CHANGED
@@ -54,6 +54,16 @@ client.sync_sso( #=> Synchronizes the SSO record
54
54
  email: "name@example.com",
55
55
  external_id: "2"
56
56
  )
57
+
58
+ # Private messages
59
+ client.private_messages("test_user") #=> Gets a list of private messages received by "test_user"
60
+ client.sent_private_messages("test_user") #=> Gets a list of private messages sent by "test_user"
61
+ client.create_private_message( #=> Creates a private messages by api_username user
62
+ title: "Confidential: Hello World!",
63
+ raw: "This is the raw markdown for my private message",
64
+ target_usernames: "user1,user2"
65
+ )
66
+
57
67
  ```
58
68
 
59
69
 
@@ -8,5 +8,5 @@ client.api_username = "YOUR_USERNAME"
8
8
  client.create_private_message(
9
9
  title: "Confidential: Hello World!",
10
10
  raw: "This is the raw markdown for my private message",
11
- target_usernames: ["user1", "user2"]
11
+ target_usernames: "user1,user2"
12
12
  )
@@ -5,8 +5,4 @@ client = DiscourseApi::Client.new("http://localhost:3000")
5
5
  client.api_key = "YOUR_API_KEY"
6
6
  client.api_username = "YOUR_USERNAME"
7
7
 
8
- # Upload an image via file
9
- client.upload_post_image(file: 'grumpy_cat.gif')
10
-
11
- # Upload an image via URL
12
- client.upload_post_image(url: 'https://giphy.com/grumpy_cat.gif')
8
+ client.sent_private_messages('test_user')
@@ -0,0 +1,13 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require File.expand_path('../../lib/discourse_api', __FILE__)
3
+
4
+ client = DiscourseApi::Client.new("http://localhost:3000")
5
+ client.api_key = "YOUR_API_KEY"
6
+ client.api_username = "YOUR_USERNAME"
7
+
8
+ # Upload a file
9
+ file = Faraday::UploadIO.new('grumpy_cat.pdf', "application/pdf")
10
+ client.upload_file(file: file)
11
+
12
+ # Upload a file via URL
13
+ client.upload_file(url: 'https://giphy.com/grumpy_cat.gif')
@@ -17,6 +17,11 @@ module DiscourseApi
17
17
  response = get("topics/private-messages/#{username}.json", args)
18
18
  response[:body]['topic_list']['topics']
19
19
  end
20
+
21
+ def sent_private_messages(username, *args)
22
+ response = get("topics/private-messages-sent/#{username}.json", args)
23
+ response[:body]['topic_list']['topics']
24
+ end
20
25
  end
21
26
  end
22
27
  end
@@ -1,7 +1,7 @@
1
1
  module DiscourseApi
2
2
  module API
3
3
  module Uploads
4
- def upload_post_image(args)
4
+ def upload_file(args)
5
5
  args = API.params(args)
6
6
  .optional(:file, :url)
7
7
  .default(type: 'composer', synchronous: true)
@@ -100,6 +100,8 @@ module DiscourseApi
100
100
  @connection ||= Faraday.new connection_options do |conn|
101
101
  # Follow redirects
102
102
  conn.use FaradayMiddleware::FollowRedirects, limit: 5
103
+ # Allow uploading of files
104
+ conn.request :multipart
103
105
  # Convert request params to "www-form-encoded"
104
106
  conn.request :url_encoded
105
107
  # Parse responses as JSON
@@ -135,6 +137,8 @@ module DiscourseApi
135
137
  raise DiscourseApi::UnprocessableEntity.new(response.env[:body])
136
138
  when 429
137
139
  raise DiscourseApi::TooManyRequests.new(response.env[:body])
140
+ when 500...600
141
+ raise DiscourseApi::Error.new(response.env[:body])
138
142
  end
139
143
  end
140
144
  end
@@ -1,3 +1,3 @@
1
1
  module DiscourseApi
2
- VERSION = "0.15.0"
2
+ VERSION = "0.16.0"
3
3
  end
@@ -19,19 +19,35 @@ describe DiscourseApi::API::PrivateMessages do
19
19
  end
20
20
  end
21
21
 
22
+ describe "#sent_private_messages" do
23
+ before do
24
+ stub_get("http://localhost:3000/topics/private-messages-sent/test_user.json?api_key=test_d7fd0429940&api_username=test_user").to_return(body: fixture("private_messages.json"), headers: { content_type: "application/json" })
25
+ end
26
+
27
+ it "requests the correct resource" do
28
+ subject.sent_private_messages('test_user')
29
+ expect(a_get("http://localhost:3000/topics/private-messages-sent/test_user.json?api_key=test_d7fd0429940&api_username=test_user")).to have_been_made
30
+ end
31
+
32
+ it "returns the requested sent private messages" do
33
+ private_messages = subject.sent_private_messages('test_user')
34
+ expect(private_messages).to be_an Array
35
+ end
36
+ end
37
+
22
38
  describe '#create_private_message' do
23
39
  before do
24
40
  stub_post("http://localhost:3000/posts?api_key=test_d7fd0429940&api_username=test_user")
25
41
  subject.create_private_message(
26
42
  title: "Confidential: Hello World!",
27
43
  raw: "This is the raw markdown for my private message",
28
- target_usernames: ["user1", "user2"]
44
+ target_usernames: "user1,user2"
29
45
  )
30
46
  end
31
47
 
32
48
  it "makes a create private message request" do
33
49
  expect(a_post("http://localhost:3000/posts?api_key=test_d7fd0429940&api_username=test_user").with(body:
34
- 'archetype=private_message&raw=This+is+the+raw+markdown+for+my+private+message&target_usernames%5B%5D=user1&target_usernames%5B%5D=user2&title=Confidential%3A+Hello+World%21')
50
+ 'archetype=private_message&raw=This+is+the+raw+markdown+for+my+private+message&target_usernames=user1%2Cuser2&title=Confidential%3A+Hello+World%21')
35
51
  ).to have_been_made
36
52
  end
37
53
  end
@@ -3,16 +3,24 @@ require 'spec_helper'
3
3
  describe DiscourseApi::API::Uploads do
4
4
  subject { DiscourseApi::Client.new("http://localhost:3000", "test_d7fd0429940", "test_user") }
5
5
 
6
- describe "#upload_post_image" do
6
+ describe "#upload_file" do
7
7
  before do
8
- stub_post("http://localhost:3000/uploads?api_key=test_d7fd0429940&api_username=test_user").to_return(body: fixture("upload_post_image.json"), headers: { content_type: "application/json" })
8
+ stub_post("http://localhost:3000/uploads?api_key=test_d7fd0429940&api_username=test_user").to_return(body: fixture("upload_file.json"), headers: { content_type: "application/json" })
9
9
  end
10
10
 
11
11
  it "uploads an image via URL" do
12
12
  image = "https://meta-discourse.global.ssl.fastly.net/user_avatar/meta.discourse.org/sam/120/5243.png"
13
13
  args = { url: image }
14
- response = subject.upload_post_image(args)
14
+ response = subject.upload_file(args)
15
15
  expect(response["url"]).to eq("/uploads/default/original/1X/417e624d2453925e6c68748b9aa67637c284b5aa.jpg")
16
16
  end
17
+
18
+ it "uploads a file" do
19
+ file = Faraday::UploadIO.new('spec/fixtures/upload_file.json', "application/json")
20
+ args = { file: file }
21
+ response = subject.upload_file(args)
22
+ expect(response["url"]).to eq("/uploads/default/original/1X/417e624d2453925e6c68748b9aa67637c284b5aa.jpg")
23
+ end
24
+
17
25
  end
18
26
  end
@@ -102,6 +102,13 @@ describe DiscourseApi::Client do
102
102
  end
103
103
 
104
104
  describe "#request" do
105
+ it "catches 500 errors" do
106
+ connection = instance_double(Faraday::Connection)
107
+ allow(connection).to receive(:get).and_return(OpenStruct.new(env: { body: 'error page html' }, status: 500))
108
+ allow(subject).to receive(:connection).and_return(connection)
109
+ expect{subject.send(:request, :get, "/test")}.to raise_error DiscourseApi::Error
110
+ end
111
+
105
112
  it "catches Faraday errors" do
106
113
  allow(subject).to receive(:connection).and_raise(Faraday::Error::ClientError.new("BOOM!"))
107
114
  expect{subject.send(:request, :get, "/test")}.to raise_error DiscourseApi::Error
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.15.0
4
+ version: 0.16.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: 2017-04-13 00:00:00.000000000 Z
14
+ date: 2017-05-14 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: faraday
@@ -201,10 +201,11 @@ files:
201
201
  - examples/invite_users.rb
202
202
  - examples/post_action.rb
203
203
  - examples/search.rb
204
+ - examples/sent_private_messages.rb
204
205
  - examples/sso.rb
205
206
  - examples/topic_lists.rb
206
207
  - examples/update_user.rb
207
- - examples/upload.rb
208
+ - examples/upload_file.rb
208
209
  - lib/discourse_api.rb
209
210
  - lib/discourse_api/api/api_key.rb
210
211
  - lib/discourse_api/api/backups.rb
@@ -272,7 +273,7 @@ files:
272
273
  - spec/fixtures/topics_created_by.json
273
274
  - spec/fixtures/update_trust_level.json
274
275
  - spec/fixtures/upload_avatar.json
275
- - spec/fixtures/upload_post_image.json
276
+ - spec/fixtures/upload_file.json
276
277
  - spec/fixtures/user.json
277
278
  - spec/fixtures/user_activate_success.json
278
279
  - spec/fixtures/user_badges.json
@@ -352,7 +353,7 @@ test_files:
352
353
  - spec/fixtures/topics_created_by.json
353
354
  - spec/fixtures/update_trust_level.json
354
355
  - spec/fixtures/upload_avatar.json
355
- - spec/fixtures/upload_post_image.json
356
+ - spec/fixtures/upload_file.json
356
357
  - spec/fixtures/user.json
357
358
  - spec/fixtures/user_activate_success.json
358
359
  - spec/fixtures/user_badges.json