docbase 1.0.1 → 2.1.2

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: 79387b87e93070c54a55c175ec428b0d6e457df3e05a78902a1f98b257df9551
4
- data.tar.gz: 357041378d3e422328d250390d2fe4d987f74c497ae98280d8fb8a3426e2d96b
3
+ metadata.gz: 20af66cc5d5085854e9aef5f65e57383291a8f217961a4fa6cead0bb2e678941
4
+ data.tar.gz: 24cf39072ac1eaf9c4cc700f6ee2bcc694939b5c4d26427cb932aedeabf499f0
5
5
  SHA512:
6
- metadata.gz: 0db6c5469d56c75f181f11121f6730da26e9ae7351e2c4298196f354385f1b8410641f023157f85bbda081ce25f38d21a679af2471174efbdbc25b2bb518d2e6
7
- data.tar.gz: d28405501b0f97b93eb653f5c97cefeed88b63a56c8a562ee0502ff5516aabe638f724a2fddcae3d5ed7cc2d69520bae7820a2a795695130b4d9065990ba4c32
6
+ metadata.gz: 12a494552034d86ba01f68a95e30a438ed068307223d83dd23b9e92fa23f15a85dc98cee60577342696b123ec2b5153f0935d77b58a3887f810da919beb7b0f8
7
+ data.tar.gz: d5dc0fea1f5d08a13ea5df13c38c504e11a80b5a82f121ce9afe7d087cb1d4b06d48188434939bd41758a67029aacc692fd7db8466fd5db9c1f2fe6023a3ef7c
data/.travis.yml CHANGED
@@ -1,10 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.0
4
- - 2.1
5
- - 2.2
6
- - 2.3
7
- - 2.4
8
- - 2.5
9
3
  - 2.6
4
+ - 2.7
5
+ - 3.0
10
6
  - ruby-head
data/CHANGELOG.md CHANGED
@@ -1,3 +1,26 @@
1
+ ## 2.1.2
2
+
3
+ * 利用制限時にリトライできるように
4
+
5
+ ## 2.1.1
6
+
7
+ * グループ取得APIにグループ名/ページネーションが渡せてるように fix: #17
8
+
9
+ ## 2.1.0
10
+
11
+ * faradayを1.0.0以上でも使えるように
12
+ * ruby 2.4をサポート対象外に
13
+
14
+ ## 2.0.1
15
+
16
+ * ファイルダウンロードAPIに対応
17
+
18
+ ## 2.0.0
19
+
20
+ * DocBaseAPIv2用としてリリース
21
+ * チーム一覧APIを廃止
22
+ * 環境変数`DOCBASE_ACCESS_TOKEN`でのトークン読み込みを廃止
23
+
1
24
  ## 1.0.0
2
25
 
3
26
  * DocBaseAPIv1用としてリリース
data/Gemfile CHANGED
@@ -4,6 +4,6 @@ source 'https://rubygems.org'
4
4
  gemspec
5
5
 
6
6
  group :test do
7
- gem 'rake', '~> 10.4'
8
- gem 'rspec', '~> 3.8.0'
7
+ gem 'rake', '~> 13.0'
8
+ gem 'rspec', '~> 3.10'
9
9
  end
data/README.md CHANGED
@@ -26,20 +26,15 @@ Or install it yourself as:
26
26
  client = DocBase::Client.new(access_token: 'your_access_token', team: 'your_team')
27
27
  ```
28
28
 
29
- or
29
+ ### Docbase::Client.new options
30
30
 
31
- ```ruby
32
- ENV['DOCBASE_ACCESS_TOKEN'] = 'your_access_token'
33
-
34
- client = DocBase::Client.new(team: 'your_team')
35
- ```
36
-
37
- ### teams
38
-
39
- ```ruby
40
- client.teams.body
41
- # => [{ domain: 'kray', name: 'kray' }, { domain: 'danny', name: 'danny' }]
42
- ```
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
43
38
 
44
39
  ### users
45
40
 
@@ -63,6 +58,8 @@ client.tags.body
63
58
 
64
59
  ```ruby
65
60
  client.groups.body
61
+ client.groups(name: 'developers').body
62
+ client.groups(page: 2, per_page: 10).body
66
63
  ```
67
64
 
68
65
  #### Show
@@ -200,6 +197,13 @@ client.upload('./test.jpg')
200
197
  client.upload(['./test.jpg', './README.md'])
201
198
  ```
202
199
 
200
+ #### Download
201
+
202
+ ```ruby
203
+ response = client.attachment(file_id)
204
+ File.open(file_id, 'wb') { |f| f.write(response.body) }
205
+ ```
206
+
203
207
  ### switch team
204
208
 
205
209
  ```ruby
@@ -208,6 +212,7 @@ client.tags.body
208
212
  # => [{ name: 'ruby' }, { name: 'rails' }]
209
213
 
210
214
  client.team = 'danny'
215
+ client.access_token = 'danny_team_access_token'
211
216
  client.tags.body
212
217
  # => [{ name: 'javascript' }, { name: 'react' }]
213
218
  ```
data/docbase.gemspec CHANGED
@@ -17,6 +17,6 @@ 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 'faraday', '~> 0.15.2'
21
- spec.add_dependency 'faraday_middleware', '~> 0.12.2'
20
+ spec.add_dependency 'faraday', '>= 0.15.2'
21
+ spec.add_dependency 'faraday_middleware', '>= 0.12.2'
22
22
  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
10
+ attr_accessor :team, :access_token, :retry_on_rate_limit_exceeded
10
11
 
11
- def initialize(access_token: nil, url: nil, team: nil)
12
- @access_token = access_token || ENV['DOCBASE_ACCESS_TOKEN']
12
+ def initialize(access_token: nil, url: nil, team: nil, retry_on_rate_limit_exceeded: false)
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,28 +21,24 @@ module DocBase
19
21
  @team
20
22
  end
21
23
 
22
- def teams
23
- connection.get('/teams')
24
- end
25
-
26
24
  def users(q: nil, page: 1, per_page: 100, include_user_groups: false)
27
- connection.get("/teams/#{team!}/users", q: q, page: page, per_page: per_page, include_user_groups: include_user_groups)
25
+ request(method: :get, path: "/teams/#{team!}/users", params: { q: q, page: page, per_page: per_page, include_user_groups: include_user_groups })
28
26
  end
29
27
 
30
28
  def tags
31
- connection.get("/teams/#{team!}/tags")
29
+ request(method: :get, path: "/teams/#{team!}/tags")
32
30
  end
33
31
 
34
- def groups
35
- connection.get("/teams/#{team!}/groups")
32
+ def groups(name: nil, page: 1, per_page: 100)
33
+ request(method: :get, path: "/teams/#{team!}/groups", params: { name: name, page: page, per_page: per_page })
36
34
  end
37
35
 
38
36
  def group(id)
39
- connection.get("/teams/#{team!}/groups/#{id}")
37
+ request(method: :get, path: "/teams/#{team!}/groups/#{id}")
40
38
  end
41
39
 
42
40
  def create_group(params)
43
- connection.post("/teams/#{team!}/groups", params)
41
+ request(method: :post, path: "/teams/#{team!}/groups", params: params)
44
42
  end
45
43
 
46
44
  def add_users_to_group(params)
@@ -48,7 +46,7 @@ module DocBase
48
46
  raise NotSetTeamError if group_id <= 0
49
47
 
50
48
  users_params = except(params, :group_id)
51
- connection.post("/teams/#{team!}/groups/#{group_id}/users", users_params)
49
+ request(method: :post, path: "/teams/#{team!}/groups/#{group_id}/users", params: users_params)
52
50
  end
53
51
 
54
52
  def remove_users_from_group(params)
@@ -56,19 +54,19 @@ module DocBase
56
54
  raise NotSetTeamError if group_id <= 0
57
55
 
58
56
  users_params = except(params, :group_id)
59
- connection.delete("/teams/#{team!}/groups/#{group_id}/users", users_params)
57
+ request(method: :delete, path: "/teams/#{team!}/groups/#{group_id}/users", params: users_params)
60
58
  end
61
59
 
62
60
  def post(id)
63
- connection.get("/teams/#{team!}/posts/#{id}")
61
+ request(method: :get, path: "/teams/#{team!}/posts/#{id}")
64
62
  end
65
63
 
66
64
  def posts(q: '*', page: 1, per_page: 20)
67
- connection.get("/teams/#{team!}/posts", q: q, page: page, per_page: per_page)
65
+ request(method: :get, path: "/teams/#{team!}/posts", params: { q: q, page: page, per_page: per_page })
68
66
  end
69
67
 
70
68
  def create_post(params)
71
- connection.post("/teams/#{team!}/posts", params)
69
+ request(method: :post, path: "/teams/#{team!}/posts", params: params)
72
70
  end
73
71
 
74
72
  def update_post(params)
@@ -76,19 +74,19 @@ module DocBase
76
74
  raise NotSetTeamError if post_id <= 0
77
75
 
78
76
  post_params = except(params, :id)
79
- connection.patch("/teams/#{team!}/posts/#{post_id}", post_params)
77
+ request(method: :patch, path: "/teams/#{team!}/posts/#{post_id}", params: post_params)
80
78
  end
81
79
 
82
80
  def delete_post(id)
83
- connection.delete("/teams/#{team!}/posts/#{id}")
81
+ request(method: :delete, path: "/teams/#{team!}/posts/#{id}")
84
82
  end
85
83
 
86
84
  def archive_post(id)
87
- connection.put("/teams/#{team!}/posts/#{id}/archive")
85
+ request(method: :put, path: "/teams/#{team!}/posts/#{id}/archive")
88
86
  end
89
87
 
90
88
  def unarchive_post(id)
91
- connection.put("/teams/#{team!}/posts/#{id}/unarchive")
89
+ request(method: :put, path: "/teams/#{team!}/posts/#{id}/unarchive")
92
90
  end
93
91
 
94
92
  def create_comment(params)
@@ -96,11 +94,11 @@ module DocBase
96
94
  raise NotSetTeamError if post_id <= 0
97
95
 
98
96
  comment_params = except(params, :post_id)
99
- connection.post("/teams/#{team!}/posts/#{post_id}/comments", params)
97
+ request(method: :post, path: "/teams/#{team!}/posts/#{post_id}/comments", params: params)
100
98
  end
101
99
 
102
100
  def delete_comment(id)
103
- connection.delete("/teams/#{team!}/comments/#{id}")
101
+ request(method: :delete, path: "/teams/#{team!}/comments/#{id}")
104
102
  end
105
103
 
106
104
  def upload(paths)
@@ -114,7 +112,11 @@ module DocBase
114
112
  }
115
113
  end
116
114
 
117
- connection.post("/teams/#{team!}/attachments", params)
115
+ request(method: :post, path: "/teams/#{team!}/attachments", params: params)
116
+ end
117
+
118
+ def attachment(id)
119
+ request(method: :get, path: "/teams/#{team!}/attachments/#{id}", for_binary: true)
118
120
  end
119
121
 
120
122
  private
@@ -131,13 +133,37 @@ module DocBase
131
133
  end
132
134
  end
133
135
 
136
+ def connection_for_binary
137
+ @connection ||= Faraday.new({ url: @url, headers: headers }) do |faraday|
138
+ faraday.request :json
139
+ faraday.adapter Faraday.default_adapter
140
+ end
141
+ end
142
+
134
143
  def headers
135
144
  {
136
145
  'Accept' => 'application/json',
137
146
  'User-Agent' => USER_AGENT,
138
- 'X-DocBaseToken' => @access_token,
139
- 'X-Api-Version' => '1',
147
+ 'X-DocBaseToken' => access_token,
148
+ 'X-Api-Version' => '2',
140
149
  }
141
150
  end
151
+
152
+ def request(method:, path:, params: nil, for_binary: false)
153
+ response = for_binary ? connection_for_binary.send(method, path, params) : connection.send(method, path, params)
154
+ raise TooManyRequestError if retry_on_rate_limit_exceeded && response.status == 429
155
+ response
156
+ rescue TooManyRequestError
157
+ reset_time = response.headers['x-ratelimit-reset'].to_i
158
+ puts "DocBase API Rate limit exceeded: will retry at #{Time.at(reset_time).strftime("%Y/%m/%d %H:%M:%S")}."
159
+ wait_for(reset_time)
160
+ retry
161
+ end
162
+
163
+ def wait_for(reset_time)
164
+ wait_time = reset_time - Time.now.to_i
165
+ return if wait_time <= 0
166
+ sleep wait_time
167
+ end
142
168
  end
143
169
  end
@@ -1,3 +1,3 @@
1
1
  module DocBase
2
- VERSION = '1.0.1'
2
+ VERSION = '2.1.2'
3
3
  end
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docbase
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 2.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - ttakuru88
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-08 00:00:00.000000000 Z
11
+ date: 2021-05-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 0.15.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.15.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: faraday_middleware
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.12.2
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.12.2
41
41
  description: DocBase API Client, written in Ruby
@@ -79,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
79
  - !ruby/object:Gem::Version
80
80
  version: '0'
81
81
  requirements: []
82
- rubygems_version: 3.0.3
82
+ rubygems_version: 3.1.4
83
83
  signing_key:
84
84
  specification_version: 4
85
85
  summary: DocBase API Client, written in Ruby