discourse_api 0.35.0 → 0.36.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c528dfd53262df7af997ea5f9da09b4ea423e9425dc98d18c944af293f15ef94
4
- data.tar.gz: e0df934c4e39a5eed50f080bf6d02be0aec29aa3b21ddd21875782ad456867eb
3
+ metadata.gz: 5f10d2acddddb15742c1a996952b9fabffade3d803a57bc8fd4a418891d491ad
4
+ data.tar.gz: a16816326aa5d4adf54262b8a043de73703e0437d76bc19216f7c09b4b22bc87
5
5
  SHA512:
6
- metadata.gz: bf4d4859413e6c923bd0c0162b13997133536e6d9d176ba8220364ed7cdbb58962e3a4ce27940bc5c5d96bd2e39fe601accc27fe813eabd1aabb209913351fe4
7
- data.tar.gz: 46117b013a50ccc7fc3e6bd7f1fa4f117b1166cb846e34f76821db62ef66eeb4d7a87b21cbc6273494bcece664c1b6520639c016b430b0a47d970556df8b9ea9
6
+ metadata.gz: 4810cfb72e3eeca6828759ba8ddd6480767626f24ef8831bb8ff164ed68a4f295117042f4a072813ff2305cd3bc2a88427a6cdb9b5acfad64307bcd2b5ba4699
7
+ data.tar.gz: a3f9a96b2b7ef9c4f37257f0e17cbac2fa9f86d67062808cdb2f55807349512b3d7ca6b968a83ac6912b833a4871d9f664f701967a06fc30422de7dd186553bb
@@ -2,7 +2,14 @@
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.35.0] - 2019-04-02
5
+ ## [0.36.0] - 2019-07-18
6
+ ### Added
7
+ - Added poll methods
8
+ ### Fixed
9
+ - Updated create topic example
10
+ - Fixed capialization for header auth keys
11
+
12
+ ## [0.35.0] - 2019-05-15
6
13
  ### Added
7
14
  - Added `custom_fields` param to create/update category
8
15
  - Added `frozen_string_literal: true` to all the files
@@ -7,7 +7,7 @@ client.api_key = "YOUR_API_KEY"
7
7
  client.api_username = "YOUR_USERNAME"
8
8
 
9
9
  response = client.create_topic(
10
- category: "Boing Boing",
10
+ category: 1,
11
11
  skip_validations: true,
12
12
  auto_track: false,
13
13
  title: "Concert Master: A new way to choose",
@@ -7,7 +7,7 @@ client.api_key = "YOUR_API_KEY"
7
7
  client.api_username = "YOUR_USERNAME"
8
8
 
9
9
  client.create_topic(
10
- category: "Boing Boing",
10
+ category: 1,
11
11
  skip_validations: true,
12
12
  auto_track: false,
13
13
  title: "Concert Master: A new way to choose",
@@ -16,7 +16,7 @@ client.create_topic(
16
16
 
17
17
  # create Poll topic
18
18
  client.create_topic(
19
- category: "general",
19
+ category: 2,
20
20
  skip_validations: false,
21
21
  auto_track: false,
22
22
  title: "Your Favorite Color?",
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
4
+ require File.expand_path('../../lib/discourse_api', __FILE__)
5
+
6
+ client = DiscourseApi::Client.new("http://localhost:3000")
7
+ client.api_key = "YOUR_API_KEY"
8
+ client.api_username = "YOUR_USERNAME"
9
+
10
+ options = ['8b4736b1ae3dfb5a28088530f036f9e5']
11
+ poll_option_votes = client.poll_vote post_id: 5, poll_name: 'poll', options: options
12
+ puts poll_option_votes.body['vote']
13
+
14
+ poll_option_votes = client.toggle_poll_status(post_id: 5, poll_name: 'poll', status: 'closed')
15
+ puts poll_option_votes[:body]['poll']['status']
16
+
17
+ poll_option_votes = client.poll_voters(post_id: 5, poll_name: 'poll')
18
+ puts poll_option_votes['voters']
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DiscourseApi
4
+ module API
5
+ module Polls
6
+ def poll_vote(args)
7
+ args = API.params(args)
8
+ .required(:post_id, :poll_name, :options)
9
+ .optional(:created_at)
10
+ put("/polls/vote", args)
11
+ end
12
+
13
+ def toggle_poll_status(args)
14
+ args = API.params(args)
15
+ .required(:post_id, :poll_name, :status)
16
+ .optional(:api_username)
17
+ .optional(:raise_errors)
18
+ put("/polls/toggle_status", args)
19
+ end
20
+
21
+ def poll_voters(args)
22
+ args = API.params(args)
23
+ .required(:post_id, :poll_name)
24
+ .optional(:opts)
25
+ response = get("/polls/voters.json", args)
26
+ response[:body]
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -9,6 +9,7 @@ require 'discourse_api/api/search'
9
9
  require 'discourse_api/api/sso'
10
10
  require 'discourse_api/api/tags'
11
11
  require 'discourse_api/api/topics'
12
+ require 'discourse_api/api/polls'
12
13
  require 'discourse_api/api/posts'
13
14
  require 'discourse_api/api/users'
14
15
  require 'discourse_api/api/groups'
@@ -34,6 +35,7 @@ module DiscourseApi
34
35
  include DiscourseApi::API::SSO
35
36
  include DiscourseApi::API::Tags
36
37
  include DiscourseApi::API::Topics
38
+ include DiscourseApi::API::Polls
37
39
  include DiscourseApi::API::Posts
38
40
  include DiscourseApi::API::Users
39
41
  include DiscourseApi::API::Groups
@@ -59,7 +61,7 @@ module DiscourseApi
59
61
 
60
62
  def api_username=(api_username)
61
63
  @api_username = api_username
62
- @connection.headers['Api-username'] = api_username unless @connection.nil?
64
+ @connection.headers['Api-Username'] = api_username unless @connection.nil?
63
65
  end
64
66
 
65
67
  def connection_options
@@ -118,12 +120,14 @@ module DiscourseApi
118
120
  conn.request :url_encoded
119
121
  # Parse responses as JSON
120
122
  conn.use FaradayMiddleware::ParseJson, content_type: 'application/json'
123
+ # For HTTP debugging, uncomment
124
+ # conn.response :logger
121
125
  # Use Faraday's default HTTP adapter
122
126
  conn.adapter Faraday.default_adapter
123
127
  #pass api_key and api_username on every request
124
128
  unless api_username.nil?
125
- conn.headers['Api-key'] = api_key
126
- conn.headers['Api-username'] = api_username
129
+ conn.headers['Api-Key'] = api_key
130
+ conn.headers['Api-Username'] = api_username
127
131
  end
128
132
  end
129
133
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module DiscourseApi
3
- VERSION = "0.35.0"
3
+ VERSION = "0.36.0"
4
4
  end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+
3
+ describe DiscourseApi::API::Polls do
4
+ subject { DiscourseApi::Client.new("http://localhost:3000", "test_d7fd0429940", "test_user" )}
5
+
6
+ describe "#poll vote" do
7
+ before do
8
+ path = "http://localhost:3000/polls/vote"
9
+ stub_put(path)
10
+ .to_return(body: fixture("polls_vote.json"), headers: { content_type: "application/json" })
11
+
12
+ end
13
+
14
+ it "requests the correct resource" do
15
+ options = ['8b4736b1ae3dfb5a28088530f036f9e5']
16
+ subject.poll_vote post_id: 5, poll_name: 'poll', options: options
17
+ expect(a_put("http://localhost:3000/polls/vote")).to have_been_made
18
+ end
19
+
20
+ it "returns the expected votes" do
21
+ options = ['8b4736b1ae3dfb5a28088530f036f9e5']
22
+ vote = subject.poll_vote post_id: 5, poll_name: 'poll', options: options
23
+ expect(vote.body).to be_a Hash
24
+ expect(vote.body['poll']['options']).to be_an Array
25
+ expect(vote.body['vote']).to eq(['8b4736b1ae3dfb5a28088530f036f9e5'])
26
+ end
27
+
28
+ describe "#poll toggle_status" do
29
+ before do
30
+ path = "http://localhost:3000/polls/toggle_status"
31
+ stub_put(path)
32
+ .to_return(body: fixture("polls_toggle_status.json"), headers: { content_type: "application/json" })
33
+
34
+ end
35
+
36
+ it "toggles the poll status to closed" do
37
+ subject.toggle_poll_status post_id: 5, poll_name: 'poll', status: 'closed'
38
+ expect(a_put("http://localhost:3000/polls/toggle_status")).to have_been_made
39
+ end
40
+
41
+ it "returns the expected results of closed poll" do
42
+ returned_poll_status = subject.toggle_poll_status post_id: 5, poll_name: 'poll', status: 'closed'
43
+ expect(returned_poll_status.body).to be_a Hash
44
+ returned_poll_status.body['poll']['options'].each { |g| expect(g).to be_a Hash }
45
+ end
46
+
47
+ end
48
+
49
+ describe "#poll voters" do
50
+ before do
51
+ stub_get("http://localhost:3000/polls/voters.json?post_id=5&poll_name=poll")
52
+ .to_return(body: fixture("polls_voters.json"), headers: { content_type: "application/json" })
53
+ end
54
+
55
+ it "requests the correct resource" do
56
+ subject.poll_voters post_id: 5, poll_name: 'poll'
57
+ expect(a_get("http://localhost:3000/polls/voters.json?post_id=5&poll_name=poll")).to have_been_made
58
+ end
59
+
60
+ it "returns the expected votes" do
61
+ voters = subject.poll_voters post_id: 5, poll_name: 'poll'
62
+ expect(voters).to be_a Hash
63
+ voters.each { |g| expect(g).to be_an Array }
64
+ expect(voters['voters']['e539a9df8700d0d05c69356a07b768cf']).to be_an Array
65
+ expect(voters['voters']['e539a9df8700d0d05c69356a07b768cf'][0]['id']).to eq(356)
66
+ end
67
+ end
68
+
69
+ end
70
+ end
@@ -0,0 +1,54 @@
1
+ {
2
+ "poll": {
3
+ "name": "poll",
4
+ "type": "regular",
5
+ "status": "closed",
6
+ "public": true,
7
+ "results": "always",
8
+ "options": [
9
+ {
10
+ "id": "8b4736b1ae3dfb5a28088530f036f9e5",
11
+ "html": "I will attend the Apr 25, 2019 Launchpad meeting.",
12
+ "votes": 1
13
+ },
14
+ {
15
+ "id": "e09884fbf9b72d83e804050078847643",
16
+ "html": "I want to lead the meeting.",
17
+ "votes": 0
18
+ },
19
+ {
20
+ "id": "e539a9df8700d0d05c69356a07b768cf",
21
+ "html": "I’ll not attend this meeting.",
22
+ "votes": 2
23
+ }
24
+ ],
25
+ "voters": 3,
26
+ "preloaded_voters": {
27
+ "8b4736b1ae3dfb5a28088530f036f9e5": [
28
+ {
29
+ "id": 17,
30
+ "username": "Kim_Miller",
31
+ "name": "Kim Miller",
32
+ "avatar_template": "/user_avatar/discourse.gomomentum.org/user_one/{size}/3220_2.png",
33
+ "title": "New Owners Council"
34
+ }
35
+ ],
36
+ "e539a9df8700d0d05c69356a07b768cf": [
37
+ {
38
+ "id": 356,
39
+ "username": "David_Ashby",
40
+ "name": "David Ashby",
41
+ "avatar_template": "/user_avatar/discourse.gomomentum.org/user_two/{size}/2403_2.png",
42
+ "title": "Team Agape"
43
+ },
44
+ {
45
+ "id": 72,
46
+ "username": "David_Kirk",
47
+ "name": "David Kirk",
48
+ "avatar_template": "/user_avatar/discourse.gomomentum.org/user_three/{size}/236_2.png",
49
+ "title": "Foundry"
50
+ }
51
+ ]
52
+ }
53
+ }
54
+ }
@@ -0,0 +1,64 @@
1
+ {
2
+ "poll": {
3
+ "name": "poll",
4
+ "type": "regular",
5
+ "status": "open",
6
+ "public": true,
7
+ "results": "always",
8
+ "options": [
9
+ {
10
+ "id": "8b4736b1ae3dfb5a28088530f036f9e5",
11
+ "html": "I will attend the Apr 25, 2019 Launchpad meeting.",
12
+ "votes": 2
13
+ },
14
+ {
15
+ "id": "e09884fbf9b72d83e804050078847643",
16
+ "html": "I want to lead the meeting.",
17
+ "votes": 0
18
+ },
19
+ {
20
+ "id": "e539a9df8700d0d05c69356a07b768cf",
21
+ "html": "I’ll not attend this meeting.",
22
+ "votes": 2
23
+ }
24
+ ],
25
+ "voters": 4,
26
+ "preloaded_voters": {
27
+ "8b4736b1ae3dfb5a28088530f036f9e5": [
28
+ {
29
+ "id": 17,
30
+ "username": "Kim_Miller",
31
+ "name": "Kim Miller",
32
+ "avatar_template": "/user_avatar/discourse.gomomentum.org/kim_miller/{size}/3220_2.png",
33
+ "title": "New Owners Council"
34
+ },
35
+ {
36
+ "id": 150,
37
+ "username": "KM_Admin",
38
+ "name": "Kim Miller",
39
+ "avatar_template": "/user_avatar/discourse.gomomentum.org/km_admin/{size}/1232_2.png",
40
+ "title": "Admin"
41
+ }
42
+ ],
43
+ "e539a9df8700d0d05c69356a07b768cf": [
44
+ {
45
+ "id": 356,
46
+ "username": "David_Ashby",
47
+ "name": "David Ashby",
48
+ "avatar_template": "/user_avatar/discourse.gomomentum.org/david_ashby/{size}/2403_2.png",
49
+ "title": "Team Agape"
50
+ },
51
+ {
52
+ "id": 72,
53
+ "username": "David_Kirk",
54
+ "name": "David Kirk",
55
+ "avatar_template": "/user_avatar/discourse.gomomentum.org/david_kirk/{size}/236_2.png",
56
+ "title": "Foundry"
57
+ }
58
+ ]
59
+ }
60
+ },
61
+ "vote": [
62
+ "8b4736b1ae3dfb5a28088530f036f9e5"
63
+ ]
64
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "voters": {
3
+ "e539a9df8700d0d05c69356a07b768cf": [
4
+ {
5
+ "id": 356,
6
+ "username": "David_Ashby",
7
+ "name": "David Ashby",
8
+ "avatar_template": "/user_avatar/discourse.gomomentum.org/david_ashby/{size}/2403_2.png",
9
+ "title": "Team Agape"
10
+ },
11
+ {
12
+ "id": 72,
13
+ "username": "David_Kirk",
14
+ "name": "David Kirk",
15
+ "avatar_template": "/user_avatar/discourse.gomomentum.org/david_kirk/{size}/236_2.png",
16
+ "title": "Foundry"
17
+ }
18
+ ]
19
+ }
20
+ }
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.35.0
4
+ version: 0.36.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: 2019-05-15 00:00:00.000000000 Z
14
+ date: 2019-07-18 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: faraday
@@ -215,6 +215,7 @@ files:
215
215
  - examples/group_set_user_notification_level.rb
216
216
  - examples/groups.rb
217
217
  - examples/invite_users.rb
218
+ - examples/polls.rb
218
219
  - examples/post_action.rb
219
220
  - examples/search.rb
220
221
  - examples/sent_private_messages.rb
@@ -233,6 +234,7 @@ files:
233
234
  - lib/discourse_api/api/invite.rb
234
235
  - lib/discourse_api/api/notifications.rb
235
236
  - lib/discourse_api/api/params.rb
237
+ - lib/discourse_api/api/polls.rb
236
238
  - lib/discourse_api/api/posts.rb
237
239
  - lib/discourse_api/api/private_messages.rb
238
240
  - lib/discourse_api/api/search.rb
@@ -255,6 +257,7 @@ files:
255
257
  - spec/discourse_api/api/groups_spec.rb
256
258
  - spec/discourse_api/api/notifications_spec.rb
257
259
  - spec/discourse_api/api/params_spec.rb
260
+ - spec/discourse_api/api/polls_spec.rb
258
261
  - spec/discourse_api/api/posts_spec.rb
259
262
  - spec/discourse_api/api/private_messages_spec.rb
260
263
  - spec/discourse_api/api/search_spec.rb
@@ -284,6 +287,9 @@ files:
284
287
  - spec/fixtures/members_1.json
285
288
  - spec/fixtures/new.json
286
289
  - spec/fixtures/notifications.json
290
+ - spec/fixtures/polls_toggle_status.json
291
+ - spec/fixtures/polls_vote.json
292
+ - spec/fixtures/polls_voters.json
287
293
  - spec/fixtures/post.json
288
294
  - spec/fixtures/post_action_users.json
289
295
  - spec/fixtures/private_messages.json
@@ -340,6 +346,7 @@ test_files:
340
346
  - spec/discourse_api/api/groups_spec.rb
341
347
  - spec/discourse_api/api/notifications_spec.rb
342
348
  - spec/discourse_api/api/params_spec.rb
349
+ - spec/discourse_api/api/polls_spec.rb
343
350
  - spec/discourse_api/api/posts_spec.rb
344
351
  - spec/discourse_api/api/private_messages_spec.rb
345
352
  - spec/discourse_api/api/search_spec.rb
@@ -369,6 +376,9 @@ test_files:
369
376
  - spec/fixtures/members_1.json
370
377
  - spec/fixtures/new.json
371
378
  - spec/fixtures/notifications.json
379
+ - spec/fixtures/polls_toggle_status.json
380
+ - spec/fixtures/polls_vote.json
381
+ - spec/fixtures/polls_voters.json
372
382
  - spec/fixtures/post.json
373
383
  - spec/fixtures/post_action_users.json
374
384
  - spec/fixtures/private_messages.json