docbase 1.0.1 → 2.1.2

Sign up to get free protection for your applications and to get access to all the features.
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