discourse_api 0.38.0 → 0.39.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -2
  3. data/CHANGELOG.md +11 -0
  4. data/config_example.yml +11 -0
  5. data/discourse_api.gemspec +3 -1
  6. data/examples/backups.rb +5 -3
  7. data/examples/badges.rb +5 -3
  8. data/examples/category.rb +5 -3
  9. data/examples/change_topic_status.rb +5 -3
  10. data/examples/create_private_message.rb +5 -3
  11. data/examples/create_topic.rb +5 -3
  12. data/examples/create_update_category.rb +4 -7
  13. data/examples/create_user.rb +5 -3
  14. data/examples/dashboard.rb +5 -3
  15. data/examples/disposable_invite_tokens.rb +5 -3
  16. data/examples/example.rb +5 -3
  17. data/examples/group_set_user_notification_level.rb +5 -3
  18. data/examples/groups.rb +5 -3
  19. data/examples/invite_users.rb +5 -3
  20. data/examples/polls.rb +5 -3
  21. data/examples/post_action.rb +5 -3
  22. data/examples/search.rb +5 -3
  23. data/examples/sent_private_messages.rb +5 -3
  24. data/examples/sso.rb +5 -3
  25. data/examples/topic_lists.rb +5 -3
  26. data/examples/update_user.rb +5 -3
  27. data/examples/upload_file.rb +5 -3
  28. data/lib/discourse_api.rb +1 -0
  29. data/lib/discourse_api/api/categories.rb +3 -2
  30. data/lib/discourse_api/api/params.rb +3 -1
  31. data/lib/discourse_api/api/posts.rb +6 -0
  32. data/lib/discourse_api/api/topics.rb +5 -7
  33. data/lib/discourse_api/example_helper.rb +19 -0
  34. data/lib/discourse_api/version.rb +1 -1
  35. data/spec/discourse_api/api/params_spec.rb +4 -0
  36. data/spec/discourse_api/api/posts_spec.rb +19 -0
  37. data/spec/discourse_api/api/topics_spec.rb +37 -0
  38. data/spec/fixtures/posts_before.json +148 -0
  39. data/spec/fixtures/posts_latest.json +196 -0
  40. data/spec/fixtures/topic_posts.json +60 -0
  41. metadata +41 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 359440c0d7810ba745d422cb97b7465e55cb65d3abb145c7597f511d13e77609
4
- data.tar.gz: 7be49a42e09f7d16c5e4ad564b57305c2f8eb17c78ed8781a1b19bf1645564b8
3
+ metadata.gz: 949fba1e4447d9615d8d3457b79328a866cfe61f325c3cd4f6a2cf3083ad9322
4
+ data.tar.gz: 2cc4f93ec719eb99e0bbd02caeecc02c3ed36bcd33b4b6435b9cb56835e622ae
5
5
  SHA512:
6
- metadata.gz: 07ae95153a40f0b84fa64d439608a403e47ad46d75bb1f201364f621101158048345160725733d21540288c0588ed4fdbf3a43a7af3b2df969b1347fa2c9a91f
7
- data.tar.gz: 0e58fa5071debb6d6d62035c48c9494ee0c811ed8097dd147745a6aeba85fe06a6c8b699ed943c56d8a88af9c33c51d2a59563355c81324b41cd4aec5533fca5
6
+ metadata.gz: 781247a4d7644d9f58609f221da038f8f59e58114ba2450c63c1ef8e7adfda029c775e8b58b0237220c76d3db1d95232249a6d04ff9138da2aa759eaa6938fa2
7
+ data.tar.gz: 995b7de67aef36acab3ef778201032aa9c2e9c9762a02d80e6cfeeacccd8dac64c433fc5cda75bfca6fbbcade605ea3917fd6c92283253c7a79618b24d2b644d
data/.gitignore CHANGED
@@ -19,6 +19,6 @@ bin/
19
19
  .ruby-gemset
20
20
  .ruby-version
21
21
  .env
22
+ /config.yml
22
23
 
23
-
24
- .rubocop-https---raw-githubusercontent-com-discourse-discourse-master--rubocop-yml
24
+ .rubocop-https---raw-githubusercontent-com-discourse-discourse-master--rubocop-yml
@@ -2,6 +2,17 @@
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.39.0] - 2020-03-27
6
+ ### Added
7
+ - Get latest posts across topics via posts.json
8
+ - Allow more options parameters when creating a category
9
+ - Don't require topic slug when updating topic status
10
+ - Example files now read config.yml file when present for client settings
11
+
12
+ ### Fixed
13
+ - Issue with `topic_posts` and frozen strings
14
+ - Fixed some topic and category methods
15
+
5
16
  ## [0.38.0] - 2019-10-18
6
17
  ### Added
7
18
  - Allow setting locale in SingleSignOn
@@ -0,0 +1,11 @@
1
+ # Specify your environment by making a copy of this file to create a file in your root directory called config.yml with your environment settings.
2
+
3
+ # host e.g. localhost:3000 or discourse.my_domain.com
4
+ host: YOUR_HOST_NAME
5
+
6
+ # api user (can effect results returned, e.g. .categories method returns only the categories your api_username can see)
7
+ # create a new client with when changing api user
8
+ api_username: YOUR_API_USERNAME
9
+
10
+ # api key from Discourse admin panel /admin/api/keys
11
+ api_key: YOUR_API_KEY
@@ -28,9 +28,11 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency 'rake', '~> 11.1'
29
29
  spec.add_development_dependency 'rb-inotify', '~> 0.9'
30
30
  spec.add_development_dependency 'rspec', '~> 3.4'
31
- spec.add_development_dependency 'rubocop', '~> 0.67.2'
31
+ spec.add_development_dependency 'rubocop', '~> 0.69'
32
32
  spec.add_development_dependency 'simplecov', '~> 0.11'
33
33
  spec.add_development_dependency 'webmock', '~> 2.0'
34
+ spec.add_development_dependency 'rubocop-discourse', '~> 1.0'
35
+ spec.add_development_dependency 'rubocop-rspec', '~> 1.0'
34
36
 
35
37
  spec.required_ruby_version = '>= 2.2.3'
36
38
  end
@@ -2,9 +2,11 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require File.expand_path('../../lib/discourse_api', __FILE__)
4
4
 
5
- client = DiscourseApi::Client.new("http://localhost:3000")
6
- client.api_key = "YOUR_API_KEY"
7
- client.api_username = "YOUR_USERNAME"
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"
8
10
 
9
11
  # get list of backup files
10
12
  puts client.backups()
@@ -2,9 +2,11 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require File.expand_path('../../lib/discourse_api', __FILE__)
4
4
 
5
- client = DiscourseApi::Client.new("http://localhost:3000")
6
- client.api_key = "YOUR_API_KEY"
7
- client.api_username = "YOUR_USERNAME"
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"
8
10
 
9
11
  # get badges
10
12
  puts client.badges
@@ -2,9 +2,11 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require File.expand_path('../../lib/discourse_api', __FILE__)
4
4
 
5
- client = DiscourseApi::Client.new("http://localhost:3000")
6
- client.api_key = "YOUR_API_KEY"
7
- client.api_username = "YOUR_USERNAME"
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"
8
10
 
9
11
  # get categories
10
12
  puts client.categories()
@@ -2,9 +2,11 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require File.expand_path('../../lib/discourse_api', __FILE__)
4
4
 
5
- client = DiscourseApi::Client.new("http://localhost:3000")
6
- client.api_key = "YOUR_API_KEY"
7
- client.api_username = "YOUR_USERNAME"
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"
8
10
 
9
11
  response = client.create_topic(
10
12
  category: 1,
@@ -2,9 +2,11 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require File.expand_path('../../lib/discourse_api', __FILE__)
4
4
 
5
- client = DiscourseApi::Client.new("http://localhost:3000")
6
- client.api_key = "YOUR_API_KEY"
7
- client.api_username = "YOUR_USERNAME"
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"
8
10
 
9
11
  client.create_private_message(
10
12
  title: "Confidential: Hello World!",
@@ -2,9 +2,11 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require File.expand_path('../../lib/discourse_api', __FILE__)
4
4
 
5
- client = DiscourseApi::Client.new("http://localhost:3000")
6
- client.api_key = "YOUR_API_KEY"
7
- client.api_username = "YOUR_USERNAME"
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"
8
10
 
9
11
  client.create_topic(
10
12
  category: 1,
@@ -2,14 +2,11 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require File.expand_path('../../lib/discourse_api', __FILE__)
4
4
 
5
- # client = DiscourseApi::Client.new("http://localhost:3000")
6
- # client.api_key = "YOUR_API_KEY"
7
- # client.api_username = "YOUR_USERNAME"
8
- #
5
+ config = DiscourseApi::ExampleHelper.load_yml
9
6
 
10
- client = DiscourseApi::Client.new("http://localhost:8080")
11
- client.api_key = "a56a349e1870529d8d8da11453ea782ce8ab8de34d6564a65727171163be4338"
12
- client.api_username = "system"
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"
13
10
 
14
11
  ###
15
12
  # Required category params:
@@ -2,9 +2,11 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require File.expand_path('../../lib/discourse_api', __FILE__)
4
4
 
5
- client = DiscourseApi::Client.new("http://localhost:3000")
6
- client.api_key = "YOUR_API_KEY"
7
- client.api_username = "YOUR_USERNAME"
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"
8
10
 
9
11
  # create user
10
12
  user = client.create_user(
@@ -2,9 +2,11 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require File.expand_path('../../lib/discourse_api', __FILE__)
4
4
 
5
- client = DiscourseApi::Client.new("http://localhost:3000")
6
- client.api_key = "YOUR_API_KEY"
7
- client.api_username = "YOUR_USERNAME"
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"
8
10
 
9
11
  # get all dashboard status as json
10
12
  puts client.get_dashboard_stats
@@ -6,9 +6,11 @@ require 'csv'
6
6
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
7
7
  require File.expand_path('../../lib/discourse_api', __FILE__)
8
8
 
9
- client = DiscourseApi::Client.new("http://localhost:3000")
10
- client.api_key = "YOUR_API_KEY"
11
- client.api_username = "YOUR_USERNAME"
9
+ config = DiscourseApi::ExampleHelper.load_yml
10
+
11
+ client = DiscourseApi::Client.new(config['host'] || 'http://localhost:3000')
12
+ client.api_key = config['api_key'] || "YOUR_API_KEY"
13
+ client.api_username = config['api_username'] || "YOUR_USERNAME"
12
14
 
13
15
  # fetch email-less invite tokens
14
16
  invite_tokens = client.disposable_tokens(username: "eviltrout", quantity: 5, group_names: "security,support")
@@ -2,9 +2,11 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require File.expand_path('../../lib/discourse_api', __FILE__)
4
4
 
5
- client = DiscourseApi::Client.new("http://localhost:3000")
6
- client.api_key = "YOUR_API_KEY"
7
- client.api_username = "YOUR_USERNAME"
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"
8
10
 
9
11
  # get latest topics
10
12
  puts client.latest_topics
@@ -2,9 +2,11 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require File.expand_path('../../lib/discourse_api', __FILE__)
4
4
 
5
- client = DiscourseApi::Client.new("http://localhost:3000")
6
- client.api_key = "YOUR_API_KEY"
7
- client.api_username = "YOUR_USERNAME"
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"
8
10
 
9
11
  @target_username = "YOUR_TARGET_USERNAME"
10
12
  @target_group_id = # YOUR NUMERIC TARGET GROUP ID
@@ -2,9 +2,11 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require File.expand_path('../../lib/discourse_api', __FILE__)
4
4
 
5
- client = DiscourseApi::Client.new("http://localhost:3000")
6
- client.api_key = "YOUR_API_KEY"
7
- client.api_username = "YOUR_USERNAME"
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"
8
10
 
9
11
  response = client.create_group(name: "engineering_team")
10
12
  group_id = response["basic_group"]["id"]
@@ -2,9 +2,11 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require File.expand_path('../../lib/discourse_api', __FILE__)
4
4
 
5
- client = DiscourseApi::Client.new("http://localhost:3000")
6
- client.api_key = "YOUR_API_KEY"
7
- client.api_username = "YOUR_USERNAME"
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"
8
10
 
9
11
  # invite user
10
12
  client.invite_user(email: "name@example.com", group_ids: "41,42")
@@ -3,9 +3,11 @@
3
3
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
4
4
  require File.expand_path('../../lib/discourse_api', __FILE__)
5
5
 
6
- client = DiscourseApi::Client.new("http://localhost:3000")
7
- client.api_key = "YOUR_API_KEY"
8
- client.api_username = "YOUR_USERNAME"
6
+ config = DiscourseApi::ExampleHelper.load_yml
7
+
8
+ client = DiscourseApi::Client.new(config['host'] || 'http://localhost:3000')
9
+ client.api_key = config['api_key'] || "YOUR_API_KEY"
10
+ client.api_username = config['api_username'] || "YOUR_USERNAME"
9
11
 
10
12
  options = ['8b4736b1ae3dfb5a28088530f036f9e5']
11
13
  poll_option_votes = client.poll_vote post_id: 5, poll_name: 'poll', options: options
@@ -2,9 +2,11 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require File.expand_path('../../lib/discourse_api', __FILE__)
4
4
 
5
- client = DiscourseApi::Client.new("http://localhost:3000")
6
- client.api_key = "YOUR_API_KEY"
7
- client.api_username = "YOUR_USERNAME"
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"
8
10
 
9
11
  # Post Action Type IDs
10
12
  # 1 - Bookmark
@@ -2,9 +2,11 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require File.expand_path('../../lib/discourse_api', __FILE__)
4
4
 
5
- client = DiscourseApi::Client.new("http://localhost:3000")
6
- client.api_key = "YOUR_API_KEY"
7
- client.api_username = "YOUR_USERNAME"
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"
8
10
 
9
11
  # search for term
10
12
  puts client.search("discourse")
@@ -2,8 +2,10 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require File.expand_path('../../lib/discourse_api', __FILE__)
4
4
 
5
- client = DiscourseApi::Client.new("http://localhost:3000")
6
- client.api_key = "YOUR_API_KEY"
7
- client.api_username = "YOUR_USERNAME"
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"
8
10
 
9
11
  client.sent_private_messages('test_user')
@@ -2,9 +2,11 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require File.expand_path('../../lib/discourse_api', __FILE__)
4
4
 
5
- client = DiscourseApi::Client.new("http://localhost:3000")
6
- client.api_key = "YOUR_API_KEY"
7
- client.api_username = "YOUR_USERNAME"
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"
8
10
 
9
11
  client.sync_sso(
10
12
  sso_secret: "discourse_sso_rocks",
@@ -2,9 +2,11 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require File.expand_path('../../lib/discourse_api', __FILE__)
4
4
 
5
- client = DiscourseApi::Client.new("http://localhost:3000")
6
- client.api_key = "YOUR_API_KEY"
7
- client.api_username = "YOUR_USERNAME"
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"
8
10
 
9
11
  # get latest topics
10
12
  puts client.latest_topics({})
@@ -2,9 +2,11 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require File.expand_path('../../lib/discourse_api', __FILE__)
4
4
 
5
- client = DiscourseApi::Client.new("http://localhost:3000")
6
- client.api_key = "YOUR_API_KEY"
7
- client.api_username = "YOUR_USERNAME"
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"
8
10
 
9
11
  # update username from "robin" to "batman"
10
12
  puts client.update_username("robin", "batman")
@@ -2,9 +2,11 @@
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require File.expand_path('../../lib/discourse_api', __FILE__)
4
4
 
5
- client = DiscourseApi::Client.new("http://localhost:3000")
6
- client.api_key = "YOUR_API_KEY"
7
- client.api_username = "YOUR_USERNAME"
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"
8
10
 
9
11
  # Upload a file
10
12
  file = Faraday::UploadIO.new('grumpy_cat.pdf', "application/pdf")
@@ -3,4 +3,5 @@ require "discourse_api/api/params"
3
3
  require "discourse_api/client"
4
4
  require "discourse_api/error"
5
5
  require "discourse_api/version"
6
+ require "discourse_api/example_helper"
6
7
  require "discourse_api/single_sign_on"
@@ -8,7 +8,8 @@ module DiscourseApi
8
8
  def create_category(args = {})
9
9
  args = API.params(args)
10
10
  .required(:name, :color, :text_color)
11
- .optional(:description, :permissions, :custom_fields)
11
+ .optional(:slug, :permissions, :auto_close_hours, :auto_close_based_on_last_post, :position, :email_in,
12
+ :email_in_allow_strangers, :logo_url, :background_url, :allow_badges, :topic_template, :custom_fields, :description)
12
13
  .default(parent_category_id: nil)
13
14
  response = post("/categories", args)
14
15
  response['category']
@@ -19,7 +20,7 @@ module DiscourseApi
19
20
  args = API.params(args)
20
21
  .required(:id, :name, :color, :text_color)
21
22
  .optional(:slug, :permissions, :auto_close_hours, :auto_close_based_on_last_post, :position, :email_in,
22
- :email_in_allow_strangers, :logo_url, :background_url, :allow_badges, :topic_template, :custom_fields)
23
+ :email_in_allow_strangers, :logo_url, :background_url, :allow_badges, :topic_template, :custom_fields, :description)
23
24
  .default(parent_category_id: nil)
24
25
  response = put("/categories/#{category_id}", args)
25
26
  response['body']['category'] if response['body']
@@ -16,6 +16,9 @@ module DiscourseApi
16
16
 
17
17
  def required(*keys)
18
18
  @required.concat(keys)
19
+ @required.each do |k|
20
+ raise ArgumentError.new("#{k} is required but not specified") unless @args.key?(k)
21
+ end
19
22
  self
20
23
  end
21
24
 
@@ -36,7 +39,6 @@ module DiscourseApi
36
39
 
37
40
  @required.each do |k|
38
41
  h[k] = @args[k]
39
- raise ArgumentError.new("#{k} is required but not specified") unless h[k]
40
42
  end
41
43
 
42
44
  @optional.each do |k|
@@ -22,6 +22,12 @@ module DiscourseApi
22
22
  response[:body]
23
23
  end
24
24
 
25
+ def posts(args = {})
26
+ args = API.params(args).default(before: 0)
27
+ response = get("/posts.json", args)
28
+ response[:body]
29
+ end
30
+
25
31
  def wikify_post(id)
26
32
  put("/posts/#{id}/wiki", wiki: true)
27
33
  end
@@ -46,7 +46,7 @@ module DiscourseApi
46
46
  params = API.params(params)
47
47
  .required(:status, :enabled)
48
48
  .optional(:api_username)
49
- put("/t/#{topic_slug}/#{topic_id}/status", params.to_h)
49
+ put("/t/#{topic_id}/status", params.to_h)
50
50
  end
51
51
 
52
52
  def topic(id, params = {})
@@ -64,14 +64,12 @@ module DiscourseApi
64
64
  end
65
65
 
66
66
  def topic_posts(topic_id, post_ids = [])
67
- url = "/t/#{topic_id}/posts.json"
67
+ url = ["/t/#{topic_id}/posts.json"]
68
68
  if post_ids.count > 0
69
- url << '?'
70
- post_ids.each do |id|
71
- url << "post_ids[]=#{id}&"
72
- end
69
+ url.push('?')
70
+ url.push(post_ids.map { |id| "post_ids[]=#{id}" }.join('&'))
73
71
  end
74
- response = get(url)
72
+ response = get(url.join)
75
73
  response[:body]
76
74
  end
77
75
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+ require 'yaml'
3
+
4
+ module DiscourseApi
5
+ class ExampleHelper
6
+
7
+ def self.load_yml
8
+ config_yml = File.expand_path('../../../config.yml', __FILE__)
9
+ puts config_yml
10
+ begin
11
+ config = YAML.load_file config_yml
12
+ rescue Errno::ENOENT
13
+ config = {}
14
+ end
15
+ config
16
+ end
17
+
18
+ end
19
+ end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module DiscourseApi
3
- VERSION = "0.38.0"
3
+ VERSION = "0.39.0"
4
4
  end
@@ -9,6 +9,10 @@ describe DiscourseApi::API::Params do
9
9
  expect { params_for({o1: "test"}).to_h }.to raise_error(ArgumentError)
10
10
  end
11
11
 
12
+ it "should not raise when a required param is false" do
13
+ expect { params_for({r1: false}).to_h }.not_to raise_error
14
+ end
15
+
12
16
  it "should not include optional params when not provided" do
13
17
  expect(params_for({r1: "test"}).to_h).not_to include(:o1)
14
18
  end
@@ -15,6 +15,25 @@ describe DiscourseApi::API::Posts do
15
15
  end
16
16
  end
17
17
 
18
+ describe "#posts" do
19
+ before do
20
+ stub_get("#{host}/posts.json?before=0").to_return(body: fixture("posts_latest.json"), headers: { content_type: "application/json" })
21
+ stub_get("#{host}/posts.json?before=14").to_return(body: fixture("posts_before.json"), headers: { content_type: "application/json" })
22
+ end
23
+
24
+ it "fetches latest posts" do
25
+ the_posts = client.posts()
26
+ expect(the_posts).to be_a Hash
27
+ expect(the_posts['latest_posts'][0]['id']).to eq(15)
28
+ end
29
+
30
+ it "fetches posts before 14" do
31
+ the_posts = client.posts(before: 14)
32
+ expect(the_posts).to be_a Hash
33
+ expect(the_posts['latest_posts'][0]['id']).to eq(14)
34
+ end
35
+ end
36
+
18
37
  describe "#wikify_post" do
19
38
  before do
20
39
  stub_put("#{host}/posts/9999/wiki")
@@ -3,6 +3,17 @@ require 'spec_helper'
3
3
  describe DiscourseApi::API::Topics do
4
4
  subject { DiscourseApi::Client.new("#{host}", "test_d7fd0429940", "test_user") }
5
5
 
6
+ describe "#change_topic_status" do
7
+ before do
8
+ stub_put("#{host}/t/57/status").to_return(body: fixture("topic.json"), headers: { content_type: "application/json" })
9
+ end
10
+
11
+ it "changes the topic status" do
12
+ subject.change_topic_status(nil, 57, { status: 'visible', enabled: false })
13
+ expect(a_put("#{host}/t/57/status")).to have_been_made
14
+ end
15
+ end
16
+
6
17
  describe "#invite_user_to_topic" do
7
18
  before do
8
19
  stub_post("#{host}/t/12/invite").to_return(body: fixture("topic_invite_user.json"), headers: { content_type: "application/json" })
@@ -110,4 +121,30 @@ describe DiscourseApi::API::Topics do
110
121
  expect(topics.first).to be_a Hash
111
122
  end
112
123
  end
124
+
125
+ describe "#topic_posts" do
126
+ before do
127
+ stub_get(/#{host}\/t\/57\/posts\.json/).to_return(
128
+ body: fixture("topic_posts.json"),
129
+ headers: { content_type: "application/json" }
130
+ )
131
+ end
132
+
133
+ it "requests the correct resource" do
134
+ subject.topic_posts(57)
135
+ expect(a_get("#{host}/t/57/posts.json")).to have_been_made
136
+ end
137
+
138
+ it 'allows scoping to specific post ids' do
139
+ subject.topic_posts(57, [123, 456])
140
+ expect(a_get("#{host}/t/57/posts.json?post_ids[]=123&post_ids[]=456")).to have_been_made
141
+ end
142
+
143
+ it "returns the requested topic posts" do
144
+ body = subject.topic_posts(57, [123])
145
+ expect(body).to be_a Hash
146
+ expect(body['post_stream']['posts']).to be_an Array
147
+ expect(body['post_stream']['posts'].first).to be_a Hash
148
+ end
149
+ end
113
150
  end
@@ -0,0 +1,148 @@
1
+ {
2
+ "latest_posts": [
3
+ {
4
+ "id": 14,
5
+ "name": null,
6
+ "username": "johndoe",
7
+ "avatar_template": "/letter_avatar_proxy/v3/letter/p/df705f/{size}.png",
8
+ "created_at": "2020-01-25T00:58:35.475Z",
9
+ "cooked": "<p>hi there. hi there. hi there.</p>",
10
+ "post_number": 1,
11
+ "post_type": 1,
12
+ "updated_at": "2020-01-25T00:58:35.475Z",
13
+ "reply_count": 0,
14
+ "reply_to_post_number": null,
15
+ "quote_count": 0,
16
+ "avg_time": null,
17
+ "incoming_link_count": 0,
18
+ "reads": 1,
19
+ "score": 0.2,
20
+ "yours": false,
21
+ "topic_id": 11,
22
+ "topic_slug": "this-is-an-uncategorized-title",
23
+ "topic_title": "This is an uncategorized title",
24
+ "topic_html_title": "This is an uncategorized title",
25
+ "category_id": 1,
26
+ "display_username": null,
27
+ "primary_group_name": null,
28
+ "primary_group_flair_url": null,
29
+ "primary_group_flair_bg_color": null,
30
+ "primary_group_flair_color": null,
31
+ "version": 1,
32
+ "can_edit": false,
33
+ "can_delete": false,
34
+ "can_recover": false,
35
+ "can_wiki": false,
36
+ "user_title": null,
37
+ "raw": "hi there. hi there. hi there.",
38
+ "actions_summary": [],
39
+ "moderator": false,
40
+ "admin": true,
41
+ "staff": true,
42
+ "user_id": 1,
43
+ "hidden": false,
44
+ "trust_level": 1,
45
+ "deleted_at": null,
46
+ "user_deleted": false,
47
+ "edit_reason": null,
48
+ "can_view_edit_history": true,
49
+ "wiki": false
50
+ },
51
+ {
52
+ "id": 10,
53
+ "name": "system",
54
+ "username": "system",
55
+ "avatar_template": "/user_avatar/localhost/system/{size}/1_2.png",
56
+ "created_at": "2020-01-24T23:26:09.014Z",
57
+ "cooked": "<p>The first paragraph of this pinned topic will be visible as a welcome message to all new visitors on your homepage. It’s important!</p>\n<p><strong>Edit this</strong> into a brief description of your community:</p>\n<ul>\n<li>Who is it for?</li>\n<li>What can they find here?</li>\n<li>Why should they come here?</li>\n<li>Where can they read more (links, resources, etc)?</li>\n</ul>\n<p><img src=\"//localhost/images/welcome/discourse-edit-post-animated.gif\" width=\"508\" height=\"106\"></p>\n<p>You may want to close this topic via the admin <img src=\"//localhost/images/emoji/twitter/wrench.png?v=6\" title=\":wrench:\" class=\"emoji\" alt=\":wrench:\"> (at the upper right and bottom), so that replies don’t pile up on an announcement.</p>",
58
+ "post_number": 1,
59
+ "post_type": 1,
60
+ "updated_at": "2020-01-24T23:26:09.014Z",
61
+ "reply_count": 0,
62
+ "reply_to_post_number": null,
63
+ "quote_count": 0,
64
+ "avg_time": null,
65
+ "incoming_link_count": 0,
66
+ "reads": 1,
67
+ "score": 0.2,
68
+ "yours": false,
69
+ "topic_id": 7,
70
+ "topic_slug": "welcome-to-discourse",
71
+ "topic_title": "Welcome to Discourse",
72
+ "topic_html_title": "Welcome to Discourse",
73
+ "category_id": 1,
74
+ "display_username": "system",
75
+ "primary_group_name": null,
76
+ "primary_group_flair_url": null,
77
+ "primary_group_flair_bg_color": null,
78
+ "primary_group_flair_color": null,
79
+ "version": 1,
80
+ "can_edit": false,
81
+ "can_delete": false,
82
+ "can_recover": false,
83
+ "can_wiki": false,
84
+ "user_title": null,
85
+ "raw": "\nThe first paragraph of this pinned topic will be visible as a welcome message to all new visitors on your homepage. It's important!\n\n**Edit this** into a brief description of your community:\n\n- Who is it for?\n- What can they find here?\n- Why should they come here?\n- Where can they read more (links, resources, etc)?\n\n<img src=\"/images/welcome/discourse-edit-post-animated.gif\" width=\"508\" height=\"106\">\n\nYou may want to close this topic via the admin :wrench: (at the upper right and bottom), so that replies don't pile up on an announcement.",
86
+ "actions_summary": [],
87
+ "moderator": true,
88
+ "admin": true,
89
+ "staff": true,
90
+ "user_id": -1,
91
+ "hidden": false,
92
+ "trust_level": 4,
93
+ "deleted_at": null,
94
+ "user_deleted": false,
95
+ "edit_reason": null,
96
+ "can_view_edit_history": true,
97
+ "wiki": false
98
+ },
99
+ {
100
+ "id": 2,
101
+ "name": "system",
102
+ "username": "system",
103
+ "avatar_template": "/user_avatar/localhost/system/{size}/1_2.png",
104
+ "created_at": "2020-01-24T23:26:05.551Z",
105
+ "cooked": "<p>Discussion about this site, its organization, how it works, and how we can improve it.</p>",
106
+ "post_number": 1,
107
+ "post_type": 1,
108
+ "updated_at": "2020-01-24T23:26:05.551Z",
109
+ "reply_count": 0,
110
+ "reply_to_post_number": null,
111
+ "quote_count": 0,
112
+ "avg_time": null,
113
+ "incoming_link_count": 0,
114
+ "reads": 1,
115
+ "score": 0.2,
116
+ "yours": false,
117
+ "topic_id": 2,
118
+ "topic_slug": "about-the-site-feedback-category",
119
+ "topic_title": "About the Site Feedback category",
120
+ "topic_html_title": "About the Site Feedback category",
121
+ "category_id": 3,
122
+ "display_username": "system",
123
+ "primary_group_name": null,
124
+ "primary_group_flair_url": null,
125
+ "primary_group_flair_bg_color": null,
126
+ "primary_group_flair_color": null,
127
+ "version": 1,
128
+ "can_edit": false,
129
+ "can_delete": false,
130
+ "can_recover": false,
131
+ "can_wiki": false,
132
+ "user_title": null,
133
+ "raw": "Discussion about this site, its organization, how it works, and how we can improve it.",
134
+ "actions_summary": [],
135
+ "moderator": true,
136
+ "admin": true,
137
+ "staff": true,
138
+ "user_id": -1,
139
+ "hidden": false,
140
+ "trust_level": 4,
141
+ "deleted_at": null,
142
+ "user_deleted": false,
143
+ "edit_reason": null,
144
+ "can_view_edit_history": true,
145
+ "wiki": false
146
+ }
147
+ ]
148
+ }
@@ -0,0 +1,196 @@
1
+ {
2
+ "latest_posts": [
3
+ {
4
+ "id": 15,
5
+ "name": null,
6
+ "username": "johndoe",
7
+ "avatar_template": "/letter_avatar_proxy/v3/letter/p/df705f/{size}.png",
8
+ "created_at": "2020-01-25T02:10:07.971Z",
9
+ "cooked": "<p>holla bullhonky.</p>",
10
+ "post_number": 2,
11
+ "post_type": 1,
12
+ "updated_at": "2020-01-25T02:10:07.971Z",
13
+ "reply_count": 0,
14
+ "reply_to_post_number": null,
15
+ "quote_count": 0,
16
+ "avg_time": null,
17
+ "incoming_link_count": 0,
18
+ "reads": 1,
19
+ "score": 0.2,
20
+ "yours": false,
21
+ "topic_id": 11,
22
+ "topic_slug": "this-is-an-uncategorized-title",
23
+ "topic_title": "This is an uncategorized title",
24
+ "topic_html_title": "This is an uncategorized title",
25
+ "category_id": 1,
26
+ "display_username": null,
27
+ "primary_group_name": null,
28
+ "primary_group_flair_url": null,
29
+ "primary_group_flair_bg_color": null,
30
+ "primary_group_flair_color": null,
31
+ "version": 1,
32
+ "can_edit": false,
33
+ "can_delete": false,
34
+ "can_recover": false,
35
+ "can_wiki": false,
36
+ "user_title": null,
37
+ "raw": "holla bullhonky.",
38
+ "actions_summary": [],
39
+ "moderator": false,
40
+ "admin": true,
41
+ "staff": true,
42
+ "user_id": 1,
43
+ "hidden": false,
44
+ "trust_level": 1,
45
+ "deleted_at": null,
46
+ "user_deleted": false,
47
+ "edit_reason": null,
48
+ "can_view_edit_history": true,
49
+ "wiki": false
50
+ },
51
+ {
52
+ "id": 14,
53
+ "name": null,
54
+ "username": "johndoe",
55
+ "avatar_template": "/letter_avatar_proxy/v3/letter/p/df705f/{size}.png",
56
+ "created_at": "2020-01-25T00:58:35.475Z",
57
+ "cooked": "<p>hi there. hi there. hi there.</p>",
58
+ "post_number": 1,
59
+ "post_type": 1,
60
+ "updated_at": "2020-01-25T00:58:35.475Z",
61
+ "reply_count": 0,
62
+ "reply_to_post_number": null,
63
+ "quote_count": 0,
64
+ "avg_time": null,
65
+ "incoming_link_count": 0,
66
+ "reads": 1,
67
+ "score": 0.2,
68
+ "yours": false,
69
+ "topic_id": 11,
70
+ "topic_slug": "this-is-an-uncategorized-title",
71
+ "topic_title": "This is an uncategorized title",
72
+ "topic_html_title": "This is an uncategorized title",
73
+ "category_id": 1,
74
+ "display_username": null,
75
+ "primary_group_name": null,
76
+ "primary_group_flair_url": null,
77
+ "primary_group_flair_bg_color": null,
78
+ "primary_group_flair_color": null,
79
+ "version": 1,
80
+ "can_edit": false,
81
+ "can_delete": false,
82
+ "can_recover": false,
83
+ "can_wiki": false,
84
+ "user_title": null,
85
+ "raw": "hi there. hi there. hi there.",
86
+ "actions_summary": [],
87
+ "moderator": false,
88
+ "admin": true,
89
+ "staff": true,
90
+ "user_id": 1,
91
+ "hidden": false,
92
+ "trust_level": 1,
93
+ "deleted_at": null,
94
+ "user_deleted": false,
95
+ "edit_reason": null,
96
+ "can_view_edit_history": true,
97
+ "wiki": false
98
+ },
99
+ {
100
+ "id": 10,
101
+ "name": "system",
102
+ "username": "system",
103
+ "avatar_template": "/user_avatar/localhost/system/{size}/1_2.png",
104
+ "created_at": "2020-01-24T23:26:09.014Z",
105
+ "cooked": "<p>The first paragraph of this pinned topic will be visible as a welcome message to all new visitors on your homepage. It’s important!</p>\n<p><strong>Edit this</strong> into a brief description of your community:</p>\n<ul>\n<li>Who is it for?</li>\n<li>What can they find here?</li>\n<li>Why should they come here?</li>\n<li>Where can they read more (links, resources, etc)?</li>\n</ul>\n<p><img src=\"//localhost/images/welcome/discourse-edit-post-animated.gif\" width=\"508\" height=\"106\"></p>\n<p>You may want to close this topic via the admin <img src=\"//localhost/images/emoji/twitter/wrench.png?v=6\" title=\":wrench:\" class=\"emoji\" alt=\":wrench:\"> (at the upper right and bottom), so that replies don’t pile up on an announcement.</p>",
106
+ "post_number": 1,
107
+ "post_type": 1,
108
+ "updated_at": "2020-01-24T23:26:09.014Z",
109
+ "reply_count": 0,
110
+ "reply_to_post_number": null,
111
+ "quote_count": 0,
112
+ "avg_time": null,
113
+ "incoming_link_count": 0,
114
+ "reads": 1,
115
+ "score": 0.2,
116
+ "yours": false,
117
+ "topic_id": 7,
118
+ "topic_slug": "welcome-to-discourse",
119
+ "topic_title": "Welcome to Discourse",
120
+ "topic_html_title": "Welcome to Discourse",
121
+ "category_id": 1,
122
+ "display_username": "system",
123
+ "primary_group_name": null,
124
+ "primary_group_flair_url": null,
125
+ "primary_group_flair_bg_color": null,
126
+ "primary_group_flair_color": null,
127
+ "version": 1,
128
+ "can_edit": false,
129
+ "can_delete": false,
130
+ "can_recover": false,
131
+ "can_wiki": false,
132
+ "user_title": null,
133
+ "raw": "\nThe first paragraph of this pinned topic will be visible as a welcome message to all new visitors on your homepage. It's important!\n\n**Edit this** into a brief description of your community:\n\n- Who is it for?\n- What can they find here?\n- Why should they come here?\n- Where can they read more (links, resources, etc)?\n\n<img src=\"/images/welcome/discourse-edit-post-animated.gif\" width=\"508\" height=\"106\">\n\nYou may want to close this topic via the admin :wrench: (at the upper right and bottom), so that replies don't pile up on an announcement.",
134
+ "actions_summary": [],
135
+ "moderator": true,
136
+ "admin": true,
137
+ "staff": true,
138
+ "user_id": -1,
139
+ "hidden": false,
140
+ "trust_level": 4,
141
+ "deleted_at": null,
142
+ "user_deleted": false,
143
+ "edit_reason": null,
144
+ "can_view_edit_history": true,
145
+ "wiki": false
146
+ },
147
+ {
148
+ "id": 2,
149
+ "name": "system",
150
+ "username": "system",
151
+ "avatar_template": "/user_avatar/localhost/system/{size}/1_2.png",
152
+ "created_at": "2020-01-24T23:26:05.551Z",
153
+ "cooked": "<p>Discussion about this site, its organization, how it works, and how we can improve it.</p>",
154
+ "post_number": 1,
155
+ "post_type": 1,
156
+ "updated_at": "2020-01-24T23:26:05.551Z",
157
+ "reply_count": 0,
158
+ "reply_to_post_number": null,
159
+ "quote_count": 0,
160
+ "avg_time": null,
161
+ "incoming_link_count": 0,
162
+ "reads": 1,
163
+ "score": 0.2,
164
+ "yours": false,
165
+ "topic_id": 2,
166
+ "topic_slug": "about-the-site-feedback-category",
167
+ "topic_title": "About the Site Feedback category",
168
+ "topic_html_title": "About the Site Feedback category",
169
+ "category_id": 3,
170
+ "display_username": "system",
171
+ "primary_group_name": null,
172
+ "primary_group_flair_url": null,
173
+ "primary_group_flair_bg_color": null,
174
+ "primary_group_flair_color": null,
175
+ "version": 1,
176
+ "can_edit": false,
177
+ "can_delete": false,
178
+ "can_recover": false,
179
+ "can_wiki": false,
180
+ "user_title": null,
181
+ "raw": "Discussion about this site, its organization, how it works, and how we can improve it.",
182
+ "actions_summary": [],
183
+ "moderator": true,
184
+ "admin": true,
185
+ "staff": true,
186
+ "user_id": -1,
187
+ "hidden": false,
188
+ "trust_level": 4,
189
+ "deleted_at": null,
190
+ "user_deleted": false,
191
+ "edit_reason": null,
192
+ "can_view_edit_history": true,
193
+ "wiki": false
194
+ }
195
+ ]
196
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "post_stream":{
3
+ "posts":[
4
+ {
5
+ "id":123456,
6
+ "name":"Someones Name",
7
+ "username":"Some-username",
8
+ "avatar_template":"https://avatars.discourse.org/v4/letter/w/abcd123/{size}.png",
9
+ "created_at":"2020-01-27T11:32:03.646Z",
10
+ "cooked":"<p>Some text.</p>",
11
+ "post_number":2,
12
+ "post_type":1,
13
+ "updated_at":"2020-01-27T11:32:03.646Z",
14
+ "reply_count":0,
15
+ "reply_to_post_number":null,
16
+ "quote_count":0,
17
+ "incoming_link_count":0,
18
+ "reads":2,
19
+ "readers_count":1,
20
+ "score":45.2,
21
+ "yours":false,
22
+ "topic_id":57,
23
+ "topic_slug":"some-topic-slug",
24
+ "display_username":"Someones Name",
25
+ "primary_group_name":null,
26
+ "primary_group_flair_url":null,
27
+ "primary_group_flair_bg_color":null,
28
+ "primary_group_flair_color":null,
29
+ "version":1,
30
+ "can_edit":true,
31
+ "can_delete":true,
32
+ "can_recover":false,
33
+ "can_wiki":true,
34
+ "read":true,
35
+ "user_title":null,
36
+ "actions_summary":[{"id":2,"count":3,"can_act":true}],
37
+ "moderator":false,
38
+ "admin":false,
39
+ "staff":false,
40
+ "user_id":123,
41
+ "hidden":false,
42
+ "trust_level":3,
43
+ "deleted_at":null,
44
+ "user_deleted":false,
45
+ "edit_reason":null,
46
+ "can_view_edit_history":true,
47
+ "wiki":false,
48
+ "reviewable_id":0,
49
+ "reviewable_score_count":0,
50
+ "reviewable_score_pending_count":0,
51
+ "user_created_at":"2018-01-10T21:29:15.554Z",
52
+ "user_date_of_birth":null,
53
+ "can_accept_answer":false,
54
+ "can_unaccept_answer":false,
55
+ "accepted_answer":false
56
+ }
57
+ ]
58
+ },
59
+ "id":57
60
+ }
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.38.0
4
+ version: 0.39.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-10-18 00:00:00.000000000 Z
14
+ date: 2020-03-27 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: faraday
@@ -145,14 +145,14 @@ dependencies:
145
145
  requirements:
146
146
  - - "~>"
147
147
  - !ruby/object:Gem::Version
148
- version: 0.67.2
148
+ version: '0.69'
149
149
  type: :development
150
150
  prerelease: false
151
151
  version_requirements: !ruby/object:Gem::Requirement
152
152
  requirements:
153
153
  - - "~>"
154
154
  - !ruby/object:Gem::Version
155
- version: 0.67.2
155
+ version: '0.69'
156
156
  - !ruby/object:Gem::Dependency
157
157
  name: simplecov
158
158
  requirement: !ruby/object:Gem::Requirement
@@ -181,6 +181,34 @@ dependencies:
181
181
  - - "~>"
182
182
  - !ruby/object:Gem::Version
183
183
  version: '2.0'
184
+ - !ruby/object:Gem::Dependency
185
+ name: rubocop-discourse
186
+ requirement: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - "~>"
189
+ - !ruby/object:Gem::Version
190
+ version: '1.0'
191
+ type: :development
192
+ prerelease: false
193
+ version_requirements: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - "~>"
196
+ - !ruby/object:Gem::Version
197
+ version: '1.0'
198
+ - !ruby/object:Gem::Dependency
199
+ name: rubocop-rspec
200
+ requirement: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - "~>"
203
+ - !ruby/object:Gem::Version
204
+ version: '1.0'
205
+ type: :development
206
+ prerelease: false
207
+ version_requirements: !ruby/object:Gem::Requirement
208
+ requirements:
209
+ - - "~>"
210
+ - !ruby/object:Gem::Version
211
+ version: '1.0'
184
212
  description: Discourse API
185
213
  email:
186
214
  - sam.saffron@gmail.com
@@ -200,6 +228,7 @@ files:
200
228
  - LICENSE.txt
201
229
  - README.md
202
230
  - Rakefile
231
+ - config_example.yml
203
232
  - discourse_api.gemspec
204
233
  - examples/backups.rb
205
234
  - examples/badges.rb
@@ -247,6 +276,7 @@ files:
247
276
  - lib/discourse_api/api/users.rb
248
277
  - lib/discourse_api/client.rb
249
278
  - lib/discourse_api/error.rb
279
+ - lib/discourse_api/example_helper.rb
250
280
  - lib/discourse_api/single_sign_on.rb
251
281
  - lib/discourse_api/version.rb
252
282
  - spec/discourse_api/api/api_key_spec.rb
@@ -293,6 +323,8 @@ files:
293
323
  - spec/fixtures/polls_voters.json
294
324
  - spec/fixtures/post.json
295
325
  - spec/fixtures/post_action_users.json
326
+ - spec/fixtures/posts_before.json
327
+ - spec/fixtures/posts_latest.json
296
328
  - spec/fixtures/private_messages.json
297
329
  - spec/fixtures/regenerate_api_key.json
298
330
  - spec/fixtures/replies.json
@@ -300,6 +332,7 @@ files:
300
332
  - spec/fixtures/search.json
301
333
  - spec/fixtures/topic.json
302
334
  - spec/fixtures/topic_invite_user.json
335
+ - spec/fixtures/topic_posts.json
303
336
  - spec/fixtures/topics_created_by.json
304
337
  - spec/fixtures/update_trust_level.json
305
338
  - spec/fixtures/upload_avatar.json
@@ -335,7 +368,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
335
368
  - !ruby/object:Gem::Version
336
369
  version: '0'
337
370
  requirements: []
338
- rubygems_version: 3.0.1
371
+ rubygems_version: 3.0.3
339
372
  signing_key:
340
373
  specification_version: 4
341
374
  summary: Allows access to the Discourse API
@@ -384,6 +417,8 @@ test_files:
384
417
  - spec/fixtures/polls_voters.json
385
418
  - spec/fixtures/post.json
386
419
  - spec/fixtures/post_action_users.json
420
+ - spec/fixtures/posts_before.json
421
+ - spec/fixtures/posts_latest.json
387
422
  - spec/fixtures/private_messages.json
388
423
  - spec/fixtures/regenerate_api_key.json
389
424
  - spec/fixtures/replies.json
@@ -391,6 +426,7 @@ test_files:
391
426
  - spec/fixtures/search.json
392
427
  - spec/fixtures/topic.json
393
428
  - spec/fixtures/topic_invite_user.json
429
+ - spec/fixtures/topic_posts.json
394
430
  - spec/fixtures/topics_created_by.json
395
431
  - spec/fixtures/update_trust_level.json
396
432
  - spec/fixtures/upload_avatar.json