docbase 2.1.1 → 3.0.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: b6c70d4491502f49f4510006bcc8f630d7b207c2e33b4d40dc11cbd4749b0ae4
4
- data.tar.gz: 206860601acdc3d22e1a315c0ddce113f6b6776a309570cbe4804e7f878a0cf4
3
+ metadata.gz: 04de1814e9cdba377e46783519ead41b3471972cd19d4e32c058eb952ad9261d
4
+ data.tar.gz: 30f7944856b0157e89cc178b72f2d437a2ae1b1a6352b6437840566d461115fa
5
5
  SHA512:
6
- metadata.gz: dbe5ff0494d2605b6aacea6a1b95b417ca710e302233bce291da160cd6b311785e684a4d5492f5c2824500d9a6b0d67f1966cc1d5733dedb8283c5d88f9bf8a9
7
- data.tar.gz: a9b8d6813eb18db3599a1ad4019f9d45f29441caea3c0e5d47ee33734e7eacd8b1837e9cdffbee281c6cc726dd08e8e006d81d61c972e83607296db395ea2468
6
+ metadata.gz: 63c7b0575d1b5ca821ae2cf0c6cde0ba94514321ce061f7f8f4c1e8a63e6ab8040e2d219a857d87b5b71e375e539faf16e427f900fa5265b2fcda755bc901644
7
+ data.tar.gz: af1764af0574365f63fdc14e9a206fb983632cb17c705cb442f68f9228c92b87a4c4c8af2fa66bf31200c77b0b02a408c85fa023445d62c0cfe9c4565d61dc2c
data/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## 3.0.0
2
+
3
+ * DocBase API v3対応
4
+ * プロフィール、所属グループ一覧、メンバー削除、コメント一覧、メモ本文部分更新、グッジョブAPIを追加
5
+ * `users`の`include_user_groups`引数を削除(v3で廃止)
6
+ * Ruby 3.4以降向けに`base64`依存を追加
7
+ * `X-Api-Version`ヘッダを削除(v3トークンでAPIバージョンが決まる)
8
+ * `create_comment`が`post_id`をリクエストボディに含めてしまう不具合を修正
9
+ * バイナリ取得用コネクションがJSON用と共有されていた不具合を修正
10
+
11
+ ## 2.1.2
12
+
13
+ * 利用制限時にリトライできるように
14
+
1
15
  ## 2.1.1
2
16
 
3
17
  * グループ取得APIにグループ名/ページネーションが渡せてるように fix: #17
data/README.md CHANGED
@@ -26,13 +26,43 @@ Or install it yourself as:
26
26
  client = DocBase::Client.new(access_token: 'your_access_token', team: 'your_team')
27
27
  ```
28
28
 
29
+ ### Docbase::Client.new options
30
+
31
+ * access_token
32
+ * access token
33
+ * team
34
+ * team subdomain
35
+ * retry_on_rate_limit_exceeded
36
+ * [#16](https://github.com/krayinc/docbase-ruby/issues/16)
37
+ * true or false
38
+
39
+ ### profile
40
+
41
+ ```ruby
42
+ client.profile.body
43
+ ```
44
+
29
45
  ### users
30
46
 
31
47
  ```ruby
32
48
  client.users(q: 'name')
33
49
  client.users(q: 'name', page: 2)
34
50
  client.users(q: 'name', page: 1, per_page: 100)
35
- client.users(q: 'name', page: 1, per_page: 100, include_user_groups: true)
51
+ ```
52
+
53
+ 所属グループはv3ではユーザー検索APIのレスポンスに含まれません。`user_groups`を利用してください。
54
+
55
+ #### User groups
56
+
57
+ ```ruby
58
+ client.user_groups(1).body
59
+ client.user_groups(1, page: 2, per_page: 20).body
60
+ ```
61
+
62
+ #### Delete user
63
+
64
+ ```ruby
65
+ client.delete_user(1)
36
66
  ```
37
67
 
38
68
  ### tags
@@ -140,6 +170,25 @@ params = {
140
170
  client.update_post(params)
141
171
  ```
142
172
 
173
+ #### Partial body update
174
+
175
+ ```ruby
176
+ params = {
177
+ id: 1,
178
+ operations: [
179
+ {
180
+ start: 3,
181
+ end: 5,
182
+ old_content: "line3\r\nline4\r\nline5",
183
+ content: 'new text',
184
+ },
185
+ ],
186
+ notice: true,
187
+ }
188
+
189
+ client.update_post_body(params)
190
+ ```
191
+
143
192
  #### Archive
144
193
 
145
194
  ```ruby
@@ -160,6 +209,13 @@ client.delete_post(1)
160
209
 
161
210
  ### Comment
162
211
 
212
+ #### List
213
+
214
+ ```ruby
215
+ client.comments(1).body
216
+ client.comments(1, page: 2, per_page: 20, order: 'desc').body
217
+ ```
218
+
163
219
  #### Create
164
220
 
165
221
  ```ruby
@@ -178,6 +234,28 @@ client.create_comment(params)
178
234
  client.delete_comment(1)
179
235
  ```
180
236
 
237
+ ### good jobs
238
+
239
+ #### List
240
+
241
+ ```ruby
242
+ client.good_jobs(1).body
243
+ client.good_jobs(1, page: 2, per_page: 100, order: 'desc').body
244
+ ```
245
+
246
+ #### Create
247
+
248
+ ```ruby
249
+ client.create_good_job(1)
250
+ client.create_good_job(1, notice: false)
251
+ ```
252
+
253
+ #### Delete
254
+
255
+ ```ruby
256
+ client.delete_good_job(1, 111)
257
+ ```
258
+
181
259
  ### attachments
182
260
 
183
261
  #### Create
data/docbase.gemspec CHANGED
@@ -17,6 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
18
18
  spec.require_paths = ['lib']
19
19
 
20
+ spec.add_dependency 'base64'
20
21
  spec.add_dependency 'faraday', '>= 0.15.2'
21
22
  spec.add_dependency 'faraday_middleware', '>= 0.12.2'
22
23
  end
@@ -5,13 +5,15 @@ module DocBase
5
5
 
6
6
  class NotSetTeamError < StandardError; end
7
7
  class NotSetPostIdError < StandardError; end
8
+ class TooManyRequestError < StandardError; end
8
9
 
9
- attr_accessor :team, :access_token
10
+ attr_accessor :team, :access_token, :retry_on_rate_limit_exceeded
10
11
 
11
- def initialize(access_token: nil, url: nil, team: nil)
12
+ def initialize(access_token: nil, url: nil, team: nil, retry_on_rate_limit_exceeded: false)
12
13
  self.access_token = access_token
13
14
  self.team = team
14
15
  @url = url || DEFAULT_URL
16
+ self.retry_on_rate_limit_exceeded = retry_on_rate_limit_exceeded
15
17
  end
16
18
 
17
19
  def team!
@@ -19,24 +21,44 @@ module DocBase
19
21
  @team
20
22
  end
21
23
 
22
- def users(q: nil, page: 1, per_page: 100, include_user_groups: false)
23
- connection.get("/teams/#{team!}/users", q: q, page: page, per_page: per_page, include_user_groups: include_user_groups)
24
+ def profile
25
+ request(method: :get, path: "/teams/#{team!}/profile")
26
+ end
27
+
28
+ def users(q: nil, page: 1, per_page: 100)
29
+ request(
30
+ method: :get,
31
+ path: "/teams/#{team!}/users",
32
+ params: { q: q, page: page, per_page: per_page }
33
+ )
34
+ end
35
+
36
+ def user_groups(user_id, page: 1, per_page: 20)
37
+ request(
38
+ method: :get,
39
+ path: "/teams/#{team!}/users/#{user_id}/groups",
40
+ params: { page: page, per_page: per_page }
41
+ )
42
+ end
43
+
44
+ def delete_user(id)
45
+ request(method: :delete, path: "/teams/#{team!}/users/#{id}")
24
46
  end
25
47
 
26
48
  def tags
27
- connection.get("/teams/#{team!}/tags")
49
+ request(method: :get, path: "/teams/#{team!}/tags")
28
50
  end
29
51
 
30
52
  def groups(name: nil, page: 1, per_page: 100)
31
- connection.get("/teams/#{team!}/groups", name: name, page: page, per_page: per_page)
53
+ request(method: :get, path: "/teams/#{team!}/groups", params: { name: name, page: page, per_page: per_page })
32
54
  end
33
55
 
34
56
  def group(id)
35
- connection.get("/teams/#{team!}/groups/#{id}")
57
+ request(method: :get, path: "/teams/#{team!}/groups/#{id}")
36
58
  end
37
59
 
38
60
  def create_group(params)
39
- connection.post("/teams/#{team!}/groups", params)
61
+ request(method: :post, path: "/teams/#{team!}/groups", params: params)
40
62
  end
41
63
 
42
64
  def add_users_to_group(params)
@@ -44,7 +66,7 @@ module DocBase
44
66
  raise NotSetTeamError if group_id <= 0
45
67
 
46
68
  users_params = except(params, :group_id)
47
- connection.post("/teams/#{team!}/groups/#{group_id}/users", users_params)
69
+ request(method: :post, path: "/teams/#{team!}/groups/#{group_id}/users", params: users_params)
48
70
  end
49
71
 
50
72
  def remove_users_from_group(params)
@@ -52,51 +74,95 @@ module DocBase
52
74
  raise NotSetTeamError if group_id <= 0
53
75
 
54
76
  users_params = except(params, :group_id)
55
- connection.delete("/teams/#{team!}/groups/#{group_id}/users", users_params)
77
+ request(method: :delete, path: "/teams/#{team!}/groups/#{group_id}/users", params: users_params)
56
78
  end
57
79
 
58
80
  def post(id)
59
- connection.get("/teams/#{team!}/posts/#{id}")
81
+ request(method: :get, path: "/teams/#{team!}/posts/#{id}")
60
82
  end
61
83
 
62
84
  def posts(q: '*', page: 1, per_page: 20)
63
- connection.get("/teams/#{team!}/posts", q: q, page: page, per_page: per_page)
85
+ request(method: :get, path: "/teams/#{team!}/posts", params: { q: q, page: page, per_page: per_page })
64
86
  end
65
87
 
66
88
  def create_post(params)
67
- connection.post("/teams/#{team!}/posts", params)
89
+ request(method: :post, path: "/teams/#{team!}/posts", params: params)
68
90
  end
69
91
 
70
92
  def update_post(params)
71
93
  post_id = params[:id].to_i
72
- raise NotSetTeamError if post_id <= 0
94
+ raise NotSetPostIdError if post_id <= 0
73
95
 
74
96
  post_params = except(params, :id)
75
- connection.patch("/teams/#{team!}/posts/#{post_id}", post_params)
97
+ request(method: :patch, path: "/teams/#{team!}/posts/#{post_id}", params: post_params)
98
+ end
99
+
100
+ def update_post_body(params)
101
+ post_id = params[:id].to_i
102
+ raise NotSetPostIdError if post_id <= 0
103
+
104
+ body_params = except(params, :id)
105
+ request(method: :patch, path: "/teams/#{team!}/posts/#{post_id}/body", params: body_params)
76
106
  end
77
107
 
78
108
  def delete_post(id)
79
- connection.delete("/teams/#{team!}/posts/#{id}")
109
+ request(method: :delete, path: "/teams/#{team!}/posts/#{id}")
80
110
  end
81
111
 
82
112
  def archive_post(id)
83
- connection.put("/teams/#{team!}/posts/#{id}/archive")
113
+ request(method: :put, path: "/teams/#{team!}/posts/#{id}/archive")
84
114
  end
85
115
 
86
116
  def unarchive_post(id)
87
- connection.put("/teams/#{team!}/posts/#{id}/unarchive")
117
+ request(method: :put, path: "/teams/#{team!}/posts/#{id}/unarchive")
118
+ end
119
+
120
+ def comments(post_id, page: 1, per_page: 20, order: 'asc', created_after: nil, created_before: nil)
121
+ request(
122
+ method: :get,
123
+ path: "/teams/#{team!}/posts/#{post_id}/comments",
124
+ params: {
125
+ page: page,
126
+ per_page: per_page,
127
+ order: order,
128
+ created_after: created_after,
129
+ created_before: created_before,
130
+ }
131
+ )
88
132
  end
89
133
 
90
134
  def create_comment(params)
91
135
  post_id = params[:post_id].to_i
92
- raise NotSetTeamError if post_id <= 0
136
+ raise NotSetPostIdError if post_id <= 0
93
137
 
94
138
  comment_params = except(params, :post_id)
95
- connection.post("/teams/#{team!}/posts/#{post_id}/comments", params)
139
+ request(method: :post, path: "/teams/#{team!}/posts/#{post_id}/comments", params: comment_params)
96
140
  end
97
141
 
98
142
  def delete_comment(id)
99
- connection.delete("/teams/#{team!}/comments/#{id}")
143
+ request(method: :delete, path: "/teams/#{team!}/comments/#{id}")
144
+ end
145
+
146
+ def good_jobs(post_id, page: 1, per_page: 100, order: 'asc', created_after: nil, created_before: nil)
147
+ request(
148
+ method: :get,
149
+ path: "/teams/#{team!}/posts/#{post_id}/good_jobs",
150
+ params: {
151
+ page: page,
152
+ per_page: per_page,
153
+ order: order,
154
+ created_after: created_after,
155
+ created_before: created_before,
156
+ }
157
+ )
158
+ end
159
+
160
+ def create_good_job(post_id, params = {})
161
+ request(method: :post, path: "/teams/#{team!}/posts/#{post_id}/good_jobs", params: params)
162
+ end
163
+
164
+ def delete_good_job(post_id, good_job_id)
165
+ request(method: :delete, path: "/teams/#{team!}/posts/#{post_id}/good_jobs/#{good_job_id}")
100
166
  end
101
167
 
102
168
  def upload(paths)
@@ -110,11 +176,11 @@ module DocBase
110
176
  }
111
177
  end
112
178
 
113
- connection.post("/teams/#{team!}/attachments", params)
179
+ request(method: :post, path: "/teams/#{team!}/attachments", params: params)
114
180
  end
115
181
 
116
182
  def attachment(id)
117
- connection_for_binary.get("/teams/#{team!}/attachments/#{id}")
183
+ request(method: :get, path: "/teams/#{team!}/attachments/#{id}", for_binary: true)
118
184
  end
119
185
 
120
186
  private
@@ -132,7 +198,7 @@ module DocBase
132
198
  end
133
199
 
134
200
  def connection_for_binary
135
- @connection ||= Faraday.new({ url: @url, headers: headers }) do |faraday|
201
+ @connection_for_binary ||= Faraday.new({ url: @url, headers: headers }) do |faraday|
136
202
  faraday.request :json
137
203
  faraday.adapter Faraday.default_adapter
138
204
  end
@@ -143,8 +209,25 @@ module DocBase
143
209
  'Accept' => 'application/json',
144
210
  'User-Agent' => USER_AGENT,
145
211
  'X-DocBaseToken' => access_token,
146
- 'X-Api-Version' => '2',
147
212
  }
148
213
  end
214
+
215
+ def request(method:, path:, params: nil, for_binary: false)
216
+ conn = for_binary ? connection_for_binary : connection
217
+ response = conn.send(method, path, params)
218
+ raise TooManyRequestError if retry_on_rate_limit_exceeded && response.status == 429
219
+ response
220
+ rescue TooManyRequestError
221
+ reset_time = response.headers['x-ratelimit-reset'].to_i
222
+ puts "DocBase API Rate limit exceeded: will retry at #{Time.at(reset_time).strftime("%Y/%m/%d %H:%M:%S")}."
223
+ wait_for(reset_time)
224
+ retry
225
+ end
226
+
227
+ def wait_for(reset_time)
228
+ wait_time = reset_time - Time.now.to_i
229
+ return if wait_time <= 0
230
+ sleep wait_time
231
+ end
149
232
  end
150
233
  end
@@ -1,3 +1,3 @@
1
1
  module DocBase
2
- VERSION = '2.1.1'
2
+ VERSION = '3.0.0'
3
3
  end
metadata CHANGED
@@ -1,15 +1,28 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docbase
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ttakuru88
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2021-03-30 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: base64
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
13
26
  - !ruby/object:Gem::Dependency
14
27
  name: faraday
15
28
  requirement: !ruby/object:Gem::Requirement
@@ -64,7 +77,6 @@ homepage: https://github.com/krayinc/docbase-ruby
64
77
  licenses:
65
78
  - MIT
66
79
  metadata: {}
67
- post_install_message:
68
80
  rdoc_options: []
69
81
  require_paths:
70
82
  - lib
@@ -79,8 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
91
  - !ruby/object:Gem::Version
80
92
  version: '0'
81
93
  requirements: []
82
- rubygems_version: 3.2.3
83
- signing_key:
94
+ rubygems_version: 4.0.10
84
95
  specification_version: 4
85
96
  summary: DocBase API Client, written in Ruby
86
97
  test_files: []