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
tags() click to toggle source
# File lib/docbase/client.rb, line 28
def tags
  request(method: :get, path: "/teams/#{team!}/tags")
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