discourse_api 0.4.4 → 0.5.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
  SHA1:
3
- metadata.gz: a8bfbf08cac232e8db407b3c443cf5c0a231b203
4
- data.tar.gz: 2d738a394e1bfafbc019055380adc1a865878e2d
3
+ metadata.gz: eac07223361b0ddc7428468198b3a764d602560a
4
+ data.tar.gz: be2c419474dd915e32a76eca7f7c5d1757ea761c
5
5
  SHA512:
6
- metadata.gz: e16cbaa04e7bc0976b85e7c56445d252ea166c724215349f4cef2389536e16b3f204dda6d4823f08d389e4e4c363b87ebc3c9b70d11924cb7c3da36a9a3935d0
7
- data.tar.gz: 9365bb0c6b7a48f744ac89bca8389def7655b1d74e10715488547298c1306f6c85da1f01394c16fdc969bd775f2c1d399821fced83a598d23a777167a4950223
6
+ metadata.gz: cc02e2ac5803e71f44f505071e8ea6564f2c606db45c2a6253464efd43d980d864b643b402a3d96b0922e1991d74a44495bfcb529c97e3ef66e3b22d23787d73
7
+ data.tar.gz: 5656c1a6228a091101c92536829fc40472807595e701f26b8ed3a8e810f1671d42f4587c5d2c8def889c4e34b7b4e32a2202af2fc77817976161f9e0315393dc
data/.travis.yml CHANGED
@@ -1,4 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.0.0
4
+ - 2.1
5
+ - 2.2
4
6
  script: 'bundle exec rake test'
data/CHANGELOG.md CHANGED
@@ -28,3 +28,7 @@
28
28
  - [FEATURE] revoke an api key for a user
29
29
  - [FEATURE] update user trust level
30
30
  - [FEATURE] grant user badge
31
+
32
+ ## 0.5.0
33
+
34
+ - [FEATURE] get latest category topics by page
data/examples/category.rb CHANGED
@@ -10,3 +10,12 @@ puts client.categories()
10
10
 
11
11
  # get sub categories for parent category with id 2
12
12
  puts client.categories(parent_category_id: 2)
13
+
14
+ # List topics in a category
15
+ category_topics = client.category_latest_topics(category_slug: "test-category")
16
+ puts category_topics
17
+
18
+ # List topics in a category paged
19
+ category_topics_paged = client.category_latest_topics(category_slug: "test-category", page: "5")
20
+ puts category_topics_paged
21
+
data/examples/groups.rb CHANGED
@@ -1,7 +1,9 @@
1
1
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
2
  require File.expand_path('../../lib/discourse_api', __FILE__)
3
3
 
4
- client = DiscourseApi::Client.new
4
+ client = DiscourseApi::Client.new("http://localhost:3000")
5
+ client.api_key = "YOUR_API_KEY"
6
+ client.api_username = "YOUR_USERNAME"
5
7
 
6
8
  response = client.create_group(name: "engineering_team")
7
9
  group_id = response["basic_group"]["id"]
@@ -14,3 +16,5 @@ client.group_add(group_id, user_ids: [123, 456])
14
16
 
15
17
  client.group_remove(group_id, username: "neil")
16
18
  client.group_remove(group_id, user_id: 123)
19
+
20
+ client.delete_group(group_id)
@@ -0,0 +1,9 @@
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
+ # search for term
9
+ puts client.search("discourse")
@@ -12,8 +12,11 @@ puts client.update_user("batman", name: "Bruce Wayne")
12
12
  # update email of user whose username is "batman"
13
13
  puts client.update_email("batman", "batman@gotham.com")
14
14
  # update avatar of user whose username is "batman"
15
- puts client.update_avatar("batman", "http://meta-discourse.r.worldssl.net/uploads/default/2497/724a6ef2e79d2bc7.png")
15
+ puts client.update_avatar(username: "batman", url: "http://meta-discourse.r.worldssl.net/uploads/default/2497/724a6ef2e79d2bc7.png")
16
16
  # update trust level of user whose id is "102"
17
17
  puts client.update_trust_level(user_id: 102, level: 2)
18
+ # update user bio, location or website
19
+ puts client.update_user("batman", bio_raw: "I am Batman.", location: "Gotham", website: "https://en.wikipedia.org/wiki/Batman")
20
+
18
21
  # log out everywhere and refresh browser of user whose id is "2"
19
22
  puts client.log_out(2)
@@ -14,6 +14,15 @@ module DiscourseApi
14
14
  def grant_user_badge(params={})
15
15
  post("/user_badges", params)
16
16
  end
17
+
18
+ def create_badge(params={})
19
+ args = API.params(params)
20
+ .required(:name, :badge_type_id)
21
+ .optional(:description, :allow_title, :multiple_grant, :icon, :listable,
22
+ :target_posts, :query, :enabled, :auto_revoke, :badge_grouping_id,
23
+ :trigger, :show_posts, :image, :long_description)
24
+ post("/admin/badges.json", args)
25
+ end
17
26
  end
18
27
  end
19
28
  end
@@ -2,10 +2,12 @@ module DiscourseApi
2
2
  module API
3
3
  module Categories
4
4
  # :color and :text_color are RGB hexadecimal strings
5
- def create_category(args)
5
+ # :permissions is a hash with the group name and permission_type which is
6
+ # an integer 1 = Full 2 = Create Post 3 = Read Only
7
+ def create_category(args={})
6
8
  args = API.params(args)
7
9
  .required(:name, :color, :text_color)
8
- .optional(:description)
10
+ .optional(:description, :permissions)
9
11
  .default(parent_category_id: nil)
10
12
  response = post("/categories", args)
11
13
  response['category']
@@ -16,8 +18,16 @@ module DiscourseApi
16
18
  response[:body]['category_list']['categories']
17
19
  end
18
20
 
19
- def category_latest_topics(category_slug)
20
- response = get("/category/#{category_slug}/l/latest.json")
21
+ def category_latest_topics(args={})
22
+ params = API.params(args)
23
+ .required(:category_slug)
24
+ .optional(:page).to_h
25
+ url = "/c/#{params[:category_slug]}/l/latest.json"
26
+ if params.include?(:page)
27
+ puts params[:page]
28
+ url = "#{url}?page=#{params[:page]}"
29
+ end
30
+ response = get(url)
21
31
  response[:body]['topic_list']['topics']
22
32
  end
23
33
 
@@ -34,6 +34,10 @@ module DiscourseApi
34
34
  def group_remove(group_id, user)
35
35
  delete("/admin/groups/#{group_id}/members.json", user)
36
36
  end
37
+
38
+ def delete_group(group_id)
39
+ delete("/admin/groups/#{group_id}.json")
40
+ end
37
41
  end
38
42
  end
39
43
  end
@@ -6,6 +6,7 @@ module DiscourseApi
6
6
 
7
7
  class Params
8
8
  def initialize(args)
9
+ raise ArgumentError.new("Required to be initialized with a Hash") unless args.is_a? Hash
9
10
  @args = args
10
11
  @required = []
11
12
  @optional = []
@@ -4,7 +4,7 @@ module DiscourseApi
4
4
  # :category OPTIONAL name of category, not ID
5
5
  # :skip_validations OPTIONAL boolean
6
6
  # :auto_track OPTIONAL boolean
7
- def create_topic(args)
7
+ def create_topic(args={})
8
8
  args = API.params(args)
9
9
  .required(:title, :raw)
10
10
  .optional(:skip_validations, :category, :auto_track)
@@ -17,11 +17,12 @@ module DiscourseApi
17
17
 
18
18
  def update_avatar(args)
19
19
  args = API.params(args)
20
- .required(:username, :file)
21
- .default(image_type: 'avatar')
20
+ .required(:username)
21
+ .optional(:file, :url)
22
+ .default(type: 'avatar', synchronous: true)
22
23
  .to_h
23
- upload_response = post("/users/#{args[:username]}/preferences/user_image", args)
24
- put("/users/#{args[:username]}/preferences/avatar/pick", { upload_id: upload_response['upload_id'] })
24
+ upload_response = post("/uploads", args)
25
+ put("/users/#{args[:username]}/preferences/avatar/pick", { upload_id: upload_response['id'] })
25
26
  end
26
27
 
27
28
  def update_email(username, email)
@@ -1,3 +1,3 @@
1
1
  module DiscourseApi
2
- VERSION = "0.4.4"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -5,7 +5,8 @@ describe DiscourseApi::API::Categories do
5
5
 
6
6
  describe "#categories" do
7
7
  before do
8
- stub_get("http://localhost:3000/categories.json?api_key=test_d7fd0429940&api_username=test_user").to_return(body: fixture("categories.json"), headers: { content_type: "application/json" })
8
+ stub_get("http://localhost:3000/categories.json?api_key=test_d7fd0429940&api_username=test_user")
9
+ .to_return(body: fixture("categories.json"), headers: { content_type: "application/json" })
9
10
  end
10
11
 
11
12
  it "requests the correct resource" do
@@ -28,11 +29,12 @@ describe DiscourseApi::API::Categories do
28
29
 
29
30
  describe '#category_latest_topics' do
30
31
  before do
31
- stub_get("http://localhost:3000/category/category-slug/l/latest.json?api_key=test_d7fd0429940&api_username=test_user").to_return(body: fixture("category_latest_topics.json"), headers: { content_type: "application/json" })
32
+ stub_get("http://localhost:3000/c/category-slug/l/latest.json?api_key=test_d7fd0429940&api_username=test_user")
33
+ .to_return(body: fixture("category_latest_topics.json"), headers: { content_type: "application/json" })
32
34
  end
33
35
 
34
36
  it "returns the latest topics in a category" do
35
- latest_topics = subject.category_latest_topics('category-slug')
37
+ latest_topics = subject.category_latest_topics(category_slug: 'category-slug')
36
38
  expect(latest_topics).to be_an Array
37
39
  end
38
40
  end
@@ -66,4 +68,20 @@ describe DiscourseApi::API::Categories do
66
68
  expect(topics).to be_an Array
67
69
  end
68
70
  end
71
+
72
+ describe '#category_new_category' do
73
+ before do
74
+ stub_post("http://localhost:3000/categories?api_key=test_d7fd0429940&api_username=test_user")
75
+ subject.create_category(name: "test_category", color: "283890", text_color: "FFFFFF",
76
+ description: "This is a description",
77
+ permissions: {"group_1" => 1, "admins" => 1})
78
+ end
79
+
80
+ it "makes a create category request" do
81
+ expect(a_post("http://localhost:3000/categories?api_key=test_d7fd0429940&api_username=test_user").with(body:
82
+ "color=283890&description=This+is+a+description&name=test_category&parent_category_id&permissions%5Badmins%5D=1&permissions%5Bgroup_1%5D=1&text_color=FFFFFF")
83
+ ).to have_been_made
84
+ end
85
+ end
86
+
69
87
  end
@@ -26,13 +26,13 @@ describe DiscourseApi::API::Users do
26
26
 
27
27
  describe "#update_avatar" do
28
28
  before do
29
- stub_post("http://localhost:3000/users/test_user/preferences/user_image?api_key=test_d7fd0429940&api_username=test_user").to_return(body: fixture("user_update_avatar_success.json"), headers: { content_type: "application/json" })
29
+ stub_post("http://localhost:3000/uploads?api_key=test_d7fd0429940&api_username=test_user").to_return(body: fixture("upload_avatar.json"), headers: { content_type: "application/json" })
30
30
  stub_put("http://localhost:3000/users/test_user/preferences/avatar/pick?api_key=test_d7fd0429940&api_username=test_user").to_return(body: fixture("user_update_avatar_success.json"), headers: { content_type: "application/json" })
31
31
  end
32
32
 
33
33
  it "uploads an image" do
34
34
  sam = "https://meta-discourse.global.ssl.fastly.net/user_avatar/meta.discourse.org/sam/120/5243.png"
35
- args = { username: 'test_user', file: sam }
35
+ args = { username: 'test_user', url: sam }
36
36
  response = subject.update_avatar(args)
37
37
  expect(response[:body]['success']).to eq('OK')
38
38
  end
@@ -0,0 +1,14 @@
1
+ {
2
+ "id": 11,
3
+ "user_id": 1,
4
+ "original_filename": "avatar.jpg",
5
+ "filesize": 86900,
6
+ "width": 360,
7
+ "height": 360,
8
+ "url": "/uploads/default/original/1X/417e624d2453925e6c68748b9aa67637c284b5aa.jpg",
9
+ "created_at": "2015-06-21T12:35:45.182Z",
10
+ "updated_at": "2015-06-21T12:35:45.195Z",
11
+ "sha1": "417e624d2453925e6c68748b9aa67637c284b5aa",
12
+ "origin": null,
13
+ "retain_hours": null
14
+ }
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.4
4
+ version: 0.5.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-06-17 00:00:00.000000000 Z
13
+ date: 2015-11-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: faraday
@@ -192,6 +192,7 @@ files:
192
192
  - examples/example.rb
193
193
  - examples/groups.rb
194
194
  - examples/invite_users.rb
195
+ - examples/search.rb
195
196
  - examples/sso.rb
196
197
  - examples/topic_lists.rb
197
198
  - examples/update_user.rb
@@ -255,6 +256,7 @@ files:
255
256
  - spec/fixtures/topic_invite_user.json
256
257
  - spec/fixtures/topics_created_by.json
257
258
  - spec/fixtures/update_trust_level.json
259
+ - spec/fixtures/upload_avatar.json
258
260
  - spec/fixtures/user.json
259
261
  - spec/fixtures/user_activate_success.json
260
262
  - spec/fixtures/user_badges.json
@@ -286,7 +288,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
286
288
  version: '0'
287
289
  requirements: []
288
290
  rubyforge_project:
289
- rubygems_version: 2.4.6
291
+ rubygems_version: 2.5.0
290
292
  signing_key:
291
293
  specification_version: 4
292
294
  summary: Allows access to the Discourse API
@@ -329,6 +331,7 @@ test_files:
329
331
  - spec/fixtures/topic_invite_user.json
330
332
  - spec/fixtures/topics_created_by.json
331
333
  - spec/fixtures/update_trust_level.json
334
+ - spec/fixtures/upload_avatar.json
332
335
  - spec/fixtures/user.json
333
336
  - spec/fixtures/user_activate_success.json
334
337
  - spec/fixtures/user_badges.json