discourse_api 0.2.7 → 0.2.8

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,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 1f21e1da09f27385b726a7a6da00b6fd67a73bdb
4
- data.tar.gz: b637a2ef55860b8024718f0b74453b1a1ff71f8d
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MDE1ZjRkODM3YTU1NDc4YTM4Y2Q3YWFkMTc4YzM5MWY3ZjRhNDRjMw==
5
+ data.tar.gz: !binary |-
6
+ NTZmODMxODE2ZDAxNmY2MzYzMWY1YmE4YWJkYmMyMWE5NWM1OTM4NQ==
5
7
  SHA512:
6
- metadata.gz: 425557b85eb7f8b55607297b10b1ff2429004ba0b3de9956c983b273661a9a16f24a17574d2157b0abe2ba162f131a5288233d062584b213f1d86969bdc14c77
7
- data.tar.gz: a0bec4403e81185fe7a990c0bf585e30f02381283bd567bda29ad9b79b26bb633bce7ffd5a79e2e7d935e82137e6e05aaf9b790a3d9d52548aeed342e564faac
8
+ metadata.gz: !binary |-
9
+ NzFmOGNhMmRmY2IyMmM5YTAwYmQyNzRiNTI3YzVmYzcyZDhhMTBiZDFmZDNh
10
+ Njg3Mzc1NDkzZjdkMWFlOWQyMTk0OTM3MGExOGQ2ZDM4ZTI4MDYxOTVhNmE5
11
+ MTkzZjQwYjgwYjI3OTEzYTkyNDQ3ZTc1MzNlZGI0NTg4ZjBhZmM=
12
+ data.tar.gz: !binary |-
13
+ N2RmNDhiYzZiY2E1ZDQyMWMzZjRmZWYyZTMxOTI2ZmZjYTM4NDlkZTkwZTY3
14
+ ODVjMGJmNWZhNzU5YzI1YTNhMzI5ODdjNDgxMjMwMTA2MjQwYzFhOGNhOGNj
15
+ NjllMzUzMmE2NzZhYTQ1ZmQ4YTA0NzhhNGNhZmZmODNkYzkzZTI=
@@ -1,3 +1,4 @@
1
+ require "discourse_api/api/params"
1
2
  require "discourse_api/client"
2
3
  require "discourse_api/error"
3
4
  require "discourse_api/version"
@@ -2,12 +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(name:, color:, text_color:, parent_category_id: nil)
6
- post("/categories",
7
- name: name,
8
- color: color,
9
- text_color: text_color,
10
- parent_category_id: parent_category_id)
5
+ def create_category(args)
6
+ post("/categories", API.params(args)
7
+ .required(:name)
8
+ .optional(:color, :text_color)
9
+ .default(parent_category_id: nil)
10
+ )
11
11
  end
12
12
 
13
13
  def categories(*args)
@@ -1,8 +1,13 @@
1
1
  module DiscourseApi
2
2
  module API
3
3
  module Groups
4
- def create_group(name:, visible: true)
5
- post("/admin/groups", group: {name: name, visible: visible.to_s})
4
+ def create_group(args)
5
+
6
+ post("/admin/groups", group: API.params(args)
7
+ .required(:name)
8
+ .default(visible: true)
9
+ .to_h
10
+ )
6
11
  end
7
12
 
8
13
  def groups
@@ -0,0 +1,60 @@
1
+ module DiscourseApi
2
+ module API
3
+ def self.params(args)
4
+ Params.new(args)
5
+ end
6
+
7
+ class Params
8
+ def initialize(args)
9
+ @args = args
10
+ @required = []
11
+ @optional = []
12
+ @defaults = {}
13
+ end
14
+
15
+ def required(*keys)
16
+ @required.concat(keys)
17
+ self
18
+ end
19
+
20
+ def optional(*keys)
21
+ @optional.concat(keys)
22
+ self
23
+ end
24
+
25
+ def default(args)
26
+ args.each do |k,v|
27
+ @defaults[k] = v
28
+ end
29
+ self
30
+ end
31
+
32
+ def to_h
33
+ h = {}
34
+
35
+ @required.each do |k|
36
+ h[k] = @args[k]
37
+ raise ArgumentError.new("#{k} is required but not specified") unless h[k]
38
+ end
39
+
40
+ h =
41
+ if @optional.length == 0
42
+ @args.dup
43
+ else
44
+ @optional.each do |k|
45
+ h[k] = @args[k]
46
+ end
47
+ h
48
+ end
49
+
50
+ @defaults.each do |k,v|
51
+ h[k] = v unless h.key?(k)
52
+ end
53
+
54
+ h
55
+
56
+ end
57
+ end
58
+
59
+ end
60
+ end
@@ -1,8 +1,9 @@
1
1
  module DiscourseApi
2
2
  module API
3
3
  module Posts
4
- def create_post(topic_id:, raw:)
5
- post("/posts", topic_id: topic_id, raw: raw)
4
+ def create_post(args)
5
+ post("/posts", API.params(args)
6
+ .required(:topic_id, :raw))
6
7
  end
7
8
  end
8
9
  end
@@ -4,13 +4,14 @@ 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(title:, raw:, category: nil, skip_validations: nil, auto_track: nil)
8
- post("/posts",
9
- title: title,
10
- raw: raw,
11
- category: category,
12
- skip_validations: skip_validations,
13
- auto_track: auto_track)
7
+ def create_topic(args)
8
+
9
+ args =
10
+ API.params(args)
11
+ .required(:title, :raw)
12
+ .optional(:skip_validations, :category, :auto_track)
13
+
14
+ post("/posts", args.to_h)
14
15
  end
15
16
 
16
17
  def latest_topics(*args)
@@ -98,6 +98,9 @@ module DiscourseApi
98
98
  end
99
99
 
100
100
  def request(method, path, params={})
101
+ unless Hash === params
102
+ params = params.to_h if params.respond_to? :to_h
103
+ end
101
104
  response = connection.send(method.to_sym, path, params)
102
105
  response.env
103
106
  rescue Faraday::Error::ClientError, JSON::ParserError
@@ -1,3 +1,3 @@
1
1
  module DiscourseApi
2
- VERSION = "0.2.7"
2
+ VERSION = "0.2.8"
3
3
  end
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.2.7
4
+ version: 0.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Saffron
@@ -30,56 +30,56 @@ dependencies:
30
30
  name: faraday_middleware
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - "~>"
33
+ - - ~>
34
34
  - !ruby/object:Gem::Version
35
35
  version: '0.9'
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - "~>"
40
+ - - ~>
41
41
  - !ruby/object:Gem::Version
42
42
  version: '0.9'
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: rack
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - "~>"
47
+ - - ~>
48
48
  - !ruby/object:Gem::Version
49
49
  version: '1.5'
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - "~>"
54
+ - - ~>
55
55
  - !ruby/object:Gem::Version
56
56
  version: '1.5'
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: dotenv
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
- - - "~>"
61
+ - - ~>
62
62
  - !ruby/object:Gem::Version
63
63
  version: '1.0'
64
64
  type: :runtime
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - "~>"
68
+ - - ~>
69
69
  - !ruby/object:Gem::Version
70
70
  version: '1.0'
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: bundler
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
- - - "~>"
75
+ - - ~>
76
76
  - !ruby/object:Gem::Version
77
77
  version: '1.3'
78
78
  type: :development
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
- - - "~>"
82
+ - - ~>
83
83
  - !ruby/object:Gem::Version
84
84
  version: '1.3'
85
85
  - !ruby/object:Gem::Dependency
@@ -100,84 +100,84 @@ dependencies:
100
100
  name: rspec
101
101
  requirement: !ruby/object:Gem::Requirement
102
102
  requirements:
103
- - - "~>"
103
+ - - ~>
104
104
  - !ruby/object:Gem::Version
105
105
  version: '3.0'
106
106
  type: :development
107
107
  prerelease: false
108
108
  version_requirements: !ruby/object:Gem::Requirement
109
109
  requirements:
110
- - - "~>"
110
+ - - ~>
111
111
  - !ruby/object:Gem::Version
112
112
  version: '3.0'
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: webmock
115
115
  requirement: !ruby/object:Gem::Requirement
116
116
  requirements:
117
- - - "~>"
117
+ - - ~>
118
118
  - !ruby/object:Gem::Version
119
119
  version: '1.18'
120
120
  type: :development
121
121
  prerelease: false
122
122
  version_requirements: !ruby/object:Gem::Requirement
123
123
  requirements:
124
- - - "~>"
124
+ - - ~>
125
125
  - !ruby/object:Gem::Version
126
126
  version: '1.18'
127
127
  - !ruby/object:Gem::Dependency
128
128
  name: guard-rspec
129
129
  requirement: !ruby/object:Gem::Requirement
130
130
  requirements:
131
- - - "~>"
131
+ - - ~>
132
132
  - !ruby/object:Gem::Version
133
133
  version: '4.3'
134
134
  type: :development
135
135
  prerelease: false
136
136
  version_requirements: !ruby/object:Gem::Requirement
137
137
  requirements:
138
- - - "~>"
138
+ - - ~>
139
139
  - !ruby/object:Gem::Version
140
140
  version: '4.3'
141
141
  - !ruby/object:Gem::Dependency
142
142
  name: guard
143
143
  requirement: !ruby/object:Gem::Requirement
144
144
  requirements:
145
- - - "~>"
145
+ - - ~>
146
146
  - !ruby/object:Gem::Version
147
147
  version: '2.6'
148
148
  type: :development
149
149
  prerelease: false
150
150
  version_requirements: !ruby/object:Gem::Requirement
151
151
  requirements:
152
- - - "~>"
152
+ - - ~>
153
153
  - !ruby/object:Gem::Version
154
154
  version: '2.6'
155
155
  - !ruby/object:Gem::Dependency
156
156
  name: rb-inotify
157
157
  requirement: !ruby/object:Gem::Requirement
158
158
  requirements:
159
- - - "~>"
159
+ - - ~>
160
160
  - !ruby/object:Gem::Version
161
161
  version: '0.9'
162
162
  type: :development
163
163
  prerelease: false
164
164
  version_requirements: !ruby/object:Gem::Requirement
165
165
  requirements:
166
- - - "~>"
166
+ - - ~>
167
167
  - !ruby/object:Gem::Version
168
168
  version: '0.9'
169
169
  - !ruby/object:Gem::Dependency
170
170
  name: simplecov
171
171
  requirement: !ruby/object:Gem::Requirement
172
172
  requirements:
173
- - - "~>"
173
+ - - ~>
174
174
  - !ruby/object:Gem::Version
175
175
  version: '0.9'
176
176
  type: :development
177
177
  prerelease: false
178
178
  version_requirements: !ruby/object:Gem::Requirement
179
179
  requirements:
180
- - - "~>"
180
+ - - ~>
181
181
  - !ruby/object:Gem::Version
182
182
  version: '0.9'
183
183
  description: Discourse API
@@ -189,8 +189,8 @@ executables: []
189
189
  extensions: []
190
190
  extra_rdoc_files: []
191
191
  files:
192
- - ".gitignore"
193
- - ".travis.yml"
192
+ - .gitignore
193
+ - .travis.yml
194
194
  - CHANGELOG.md
195
195
  - Gemfile
196
196
  - Guardfile
@@ -211,6 +211,7 @@ files:
211
211
  - lib/discourse_api/api/groups.rb
212
212
  - lib/discourse_api/api/invite.rb
213
213
  - lib/discourse_api/api/notifications.rb
214
+ - lib/discourse_api/api/params.rb
214
215
  - lib/discourse_api/api/posts.rb
215
216
  - lib/discourse_api/api/private_messages.rb
216
217
  - lib/discourse_api/api/search.rb
@@ -257,17 +258,17 @@ require_paths:
257
258
  - lib
258
259
  required_ruby_version: !ruby/object:Gem::Requirement
259
260
  requirements:
260
- - - ">="
261
+ - - ! '>='
261
262
  - !ruby/object:Gem::Version
262
263
  version: '0'
263
264
  required_rubygems_version: !ruby/object:Gem::Requirement
264
265
  requirements:
265
- - - ">="
266
+ - - ! '>='
266
267
  - !ruby/object:Gem::Version
267
268
  version: '0'
268
269
  requirements: []
269
270
  rubyforge_project:
270
- rubygems_version: 2.2.2
271
+ rubygems_version: 2.1.8
271
272
  signing_key:
272
273
  specification_version: 4
273
274
  summary: Allows access to the Discourse API