class DocBase::Client
Constants
- DEFAULT_URL
- USER_AGENT
Attributes
access_token[RW]
retry_on_rate_limit_exceeded[RW]
team[RW]
Public Class Methods
new(access_token: nil, url: nil, team: nil, retry_on_rate_limit_exceeded: false)
click to toggle source
# File lib/docbase/client.rb, line 12 def initialize(access_token: nil, url: nil, team: nil, retry_on_rate_limit_exceeded: false) self.access_token = access_token self.team = team @url = url || DEFAULT_URL self.retry_on_rate_limit_exceeded = retry_on_rate_limit_exceeded end
Public Instance Methods
add_users_to_group(params)
click to toggle source
# File lib/docbase/client.rb, line 44 def add_users_to_group(params) group_id = params[:group_id].to_i raise NotSetTeamError if group_id <= 0 users_params = except(params, :group_id) request(method: :post, path: "/teams/#{team!}/groups/#{group_id}/users", params: users_params) end
archive_post(id)
click to toggle source
# File lib/docbase/client.rb, line 84 def archive_post(id) request(method: :put, path: "/teams/#{team!}/posts/#{id}/archive") end
attachment(id)
click to toggle source
# File lib/docbase/client.rb, line 118 def attachment(id) request(method: :get, path: "/teams/#{team!}/attachments/#{id}", for_binary: true) end
create_comment(params)
click to toggle source
# File lib/docbase/client.rb, line 92 def create_comment(params) post_id = params[:post_id].to_i raise NotSetTeamError if post_id <= 0 comment_params = except(params, :post_id) request(method: :post, path: "/teams/#{team!}/posts/#{post_id}/comments", params: params) end
create_group(params)
click to toggle source
# File lib/docbase/client.rb, line 40 def create_group(params) request(method: :post, path: "/teams/#{team!}/groups", params: params) end
create_post(params)
click to toggle source
# File lib/docbase/client.rb, line 68 def create_post(params) request(method: :post, path: "/teams/#{team!}/posts", params: params) end
delete_comment(id)
click to toggle source
# File lib/docbase/client.rb, line 100 def delete_comment(id) request(method: :delete, path: "/teams/#{team!}/comments/#{id}") end
delete_post(id)
click to toggle source
# File lib/docbase/client.rb, line 80 def delete_post(id) request(method: :delete, path: "/teams/#{team!}/posts/#{id}") end
group(id)
click to toggle source
# File lib/docbase/client.rb, line 36 def group(id) request(method: :get, path: "/teams/#{team!}/groups/#{id}") end
groups(name: nil, page: 1, per_page: 100)
click to toggle source
# File lib/docbase/client.rb, line 32 def groups(name: nil, page: 1, per_page: 100) request(method: :get, path: "/teams/#{team!}/groups", params: { name: name, page: page, per_page: per_page }) end
post(id)
click to toggle source
# File lib/docbase/client.rb, line 60 def post(id) request(method: :get, path: "/teams/#{team!}/posts/#{id}") end
posts(q: '*', page: 1, per_page: 20)
click to toggle source
# File lib/docbase/client.rb, line 64 def posts(q: '*', page: 1, per_page: 20) request(method: :get, path: "/teams/#{team!}/posts", params: { q: q, page: page, per_page: per_page }) end
remove_users_from_group(params)
click to toggle source
# File lib/docbase/client.rb, line 52 def remove_users_from_group(params) group_id = params[:group_id].to_i raise NotSetTeamError if group_id <= 0 users_params = except(params, :group_id) request(method: :delete, path: "/teams/#{team!}/groups/#{group_id}/users", params: users_params) end
team!()
click to toggle source
# File lib/docbase/client.rb, line 19 def team! raise NotSetTeamError unless @team @team end
unarchive_post(id)
click to toggle source
# File lib/docbase/client.rb, line 88 def unarchive_post(id) request(method: :put, path: "/teams/#{team!}/posts/#{id}/unarchive") end
update_post(params)
click to toggle source
# File lib/docbase/client.rb, line 72 def update_post(params) post_id = params[:id].to_i raise NotSetTeamError if post_id <= 0 post_params = except(params, :id) request(method: :patch, path: "/teams/#{team!}/posts/#{post_id}", params: post_params) end
upload(paths)
click to toggle source
# File lib/docbase/client.rb, line 104 def upload(paths) paths = [paths] unless paths.instance_of?(Array) params = paths.map do |path| file = File.new(path, 'r+b') { name: file.path.split('/').last, content: Base64.strict_encode64(file.read), } end request(method: :post, path: "/teams/#{team!}/attachments", params: params) end
users(q: nil, page: 1, per_page: 100, include_user_groups: false)
click to toggle source
# File lib/docbase/client.rb, line 24 def users(q: nil, page: 1, per_page: 100, include_user_groups: false) request(method: :get, path: "/teams/#{team!}/users", params: { q: q, page: page, per_page: per_page, include_user_groups: include_user_groups }) end
Private Instance Methods
connection()
click to toggle source
# File lib/docbase/client.rb, line 128 def connection @connection ||= Faraday.new({ url: @url, headers: headers }) do |faraday| faraday.request :json faraday.response :json faraday.adapter Faraday.default_adapter end end
connection_for_binary()
click to toggle source
# File lib/docbase/client.rb, line 136 def connection_for_binary @connection ||= Faraday.new({ url: @url, headers: headers }) do |faraday| faraday.request :json faraday.adapter Faraday.default_adapter end end
except(hash, reject_key)
click to toggle source
# File lib/docbase/client.rb, line 124 def except(hash, reject_key) hash.reject { |key, _| key == reject_key } end
headers()
click to toggle source
# File lib/docbase/client.rb, line 143 def headers { 'Accept' => 'application/json', 'User-Agent' => USER_AGENT, 'X-DocBaseToken' => access_token, 'X-Api-Version' => '2', } end
request(method:, path:, params: nil, for_binary: false)
click to toggle source
# File lib/docbase/client.rb, line 152 def request(method:, path:, params: nil, for_binary: false) response = for_binary ? connection_for_binary.send(method, path, params) : connection.send(method, path, params) raise TooManyRequestError if retry_on_rate_limit_exceeded && response.status == 429 response rescue TooManyRequestError reset_time = response.headers['x-ratelimit-reset'].to_i puts "DocBase API Rate limit exceeded: will retry at #{Time.at(reset_time).strftime("%Y/%m/%d %H:%M:%S")}." wait_for(reset_time) retry end
wait_for(reset_time)
click to toggle source
# File lib/docbase/client.rb, line 163 def wait_for(reset_time) wait_time = reset_time - Time.now.to_i return if wait_time <= 0 sleep wait_time end