Class: Bob::API

Inherits:
Object
  • Object
show all
Defined in:
lib/bob/api/api.rb

Constant Summary collapse

BASE_URL =
'https://api.hibob.com'
SANDBOX_URL =
'https://api.sandbox.hibob.com'

Class Method Summary collapse

Class Method Details

.authorization_header(use_api_key: false) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
# File 'lib/bob/api/api.rb', line 72

def self.authorization_header(use_api_key: false)
  if use_api_key
    {
      Authorization: Bob.api_key
    }
  else
    {
      Authorization: "Basic #{Base64.strict_encode64("#{Bob.access_user_name}:#{Bob.access_token}")}"
    }
  end
end

.build_url(endpoint, params = {}) ⇒ Object



91
92
93
94
95
96
97
# File 'lib/bob/api/api.rb', line 91

def self.build_url(endpoint, params = {})
  url = "#{BASE_URL}/#{Bob.api_version}/#{endpoint}" unless Bob.use_sandbox
  url = "#{SANDBOX_URL}/#{Bob.api_version}/#{endpoint}" if Bob.use_sandbox
  url += "?#{URI.encode_www_form(params)}" unless params.empty?

  url
end

.content_headersObject



84
85
86
87
88
89
# File 'lib/bob/api/api.rb', line 84

def self.content_headers
  {
    Accept: 'application/json',
    'Content-Type': 'application/json'
  }
end

.create_csv(content) ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/bob/api/api.rb', line 99

def self.create_csv(content)
  file_name = SecureRandom.alphanumeric(15)

  content.gsub!("\r", '').gsub!('', '')
  splitted = content.split("\n")
  CSV.open("tmp/#{file_name}.csv", 'wb') do |csv|
    csv << splitted.shift.split(',')
    splitted.each do |row|
      csv << CSV.parse_line(row)
    end
  end

  "tmp/#{file_name}.csv"
end

.delete(endpoint) ⇒ Object



56
57
58
59
60
# File 'lib/bob/api/api.rb', line 56

def self.delete(endpoint)
  url = build_url(endpoint)
  response = RestClient.delete(url, authorization_header)
  response.code
end

.get(endpoint, params = {}, csv_response: false) ⇒ Object



14
15
16
17
18
19
20
# File 'lib/bob/api/api.rb', line 14

def self.get(endpoint, params = {}, csv_response: false)
  url = build_url(endpoint, params)
  response = RestClient.get(url, authorization_header)
  return create_csv(response.body) if csv_response

  JSON.parse(response.body)
end

.post(endpoint, params = {}, use_api_key: false) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
# File 'lib/bob/api/api.rb', line 22

def self.post(endpoint, params = {}, use_api_key: false)
  url = build_url(endpoint)
  response = RestClient.post(
    url,
    params.to_json,
    authorization_header(use_api_key: use_api_key).merge(content_headers)
  )
rescue RestClient::BadRequest => e
  p e
  response.code
end

.post_file(endpoint, file_path) ⇒ Object

rubocop:disable Metrics/MethodLength



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/bob/api/api.rb', line 40

def self.post_file(endpoint, file_path) # rubocop:disable Metrics/MethodLength
  url = build_url(endpoint)
  payload = {
    multipart: true,
    file: File.new(file_path)
  }

  headers = {
    Accept: 'application/json',
    'Content-Type': 'multipart/form-data',
    Authorization: "Basic #{Base64.strict_encode64("#{Bob.access_user_name}:#{Bob.access_token}")}"
  }
  response = RestClient.post(url, payload, headers)
  response.code
end

.post_media(endpoint, params = {}) ⇒ Object



34
35
36
37
38
# File 'lib/bob/api/api.rb', line 34

def self.post_media(endpoint, params = {})
  url = build_url(endpoint)
  response = RestClient.post(url, params.to_json, authorization_header.merge(content_headers))
  response.code
end

.put(endpoint, params = {}, use_api_key: false) ⇒ Object



62
63
64
65
66
67
68
69
70
# File 'lib/bob/api/api.rb', line 62

def self.put(endpoint, params = {}, use_api_key: false)
  url = build_url(endpoint)
  response = RestClient.put(
    url,
    params.to_json,
    authorization_header(use_api_key: use_api_key).merge(content_headers)
  )
  response.code
end