Class: CircuitClient::Client
- Inherits:
-
Object
- Object
- CircuitClient::Client
- Defined in:
- lib/circuit_client/client.rb
Overview
client for accessing circuit API
Instance Attribute Summary collapse
-
#auth_method ⇒ Object
The authentication method to use (currently only :client_credentials supported).
-
#auth_scope ⇒ Object
Comma-delimited set of permissions that the application requests ALL, READ_USER_PROFILE, WRITE_USER_PROFILE, READ_CONVERSATIONS, WRITE_CONVERSATIONS, READ_USER, CALLS Default: ALL.
-
#base_path ⇒ Object
The base path of the API Default: /rest/v2.
-
#client_id ⇒ Object
The client_id for authentication.
-
#client_secret ⇒ Object
The client_secret for authentication.
-
#host ⇒ Object
Set the hostname of the circuit system Default: eu.yourcircuit.com.
-
#protocol ⇒ Object
The protocol to use ‘http’ or ‘https’ Default: ‘https’.
-
#timeout ⇒ Object
Timeout for http requests Default: 60.
-
#trace ⇒ Object
Enable tracing (outputs http requests to STDOUT) Default: false (disabled).
Instance Method Summary collapse
-
#access_token ⇒ Object
The token used for authentication.
-
#auth_client_credentials ⇒ Object
Authenticate using client_credentials method.
-
#base_uri ⇒ Object
Return URI with path elements.
-
#build_api_uri(path) ⇒ Object
Returns an URI and with a path relative to the base_path of the API.
-
#build_uri(path) ⇒ Object
Returns an URI with the base_uri and the supplied path.
-
#connection ⇒ Object
The faraday http connection object.
-
#create_direct_conversation(participant) ⇒ Object
Create a new 1:1 conversation.
-
#create_group_conversation(participants, topic) ⇒ Object
Create a new group conversation.
-
#create_message(conv, text, **options) ⇒ Object
Create a new message in a existing conversation.
-
#current_user ⇒ Object
A cached version of the current connections user profile.
-
#delete_group_conversation_participants(conv, participants) ⇒ Object
Remove participants from a conversation.
-
#get_user_profile ⇒ Object
Get the profile of the connections user.
-
#get_users(id) ⇒ Object
Get profile of a user.
-
#get_users_presence(id) ⇒ Object
Get presence information of a user.
-
#initialize {|_self| ... } ⇒ Client
constructor
Initialize a new client.
-
#leave_group_conversation(conv) ⇒ Object
Remove the current_user from a conversation.
-
#list_conversations ⇒ Object
List all conversation of the user.
Constructor Details
#initialize {|_self| ... } ⇒ Client
Initialize a new client
Examples
CircuitClient::Client.new do |c|
c.client_id = '4de34a3...'
c.client_secret = '234df2...'
end
Returns a new CircuitClient::Client
54 55 56 57 58 59 60 61 62 63 |
# File 'lib/circuit_client/client.rb', line 54 def initialize @host = 'eu.yourcircuit.com' @base_path = '/rest/v2' @protocol = 'https' @auth_method = :client_credentials @auth_scope = 'ALL' @timeout = 60 @trace = false yield self end |
Instance Attribute Details
#auth_method ⇒ Object
The authentication method to use (currently only :client_credentials supported)
33 34 35 |
# File 'lib/circuit_client/client.rb', line 33 def auth_method @auth_method end |
#auth_scope ⇒ Object
Comma-delimited set of permissions that the application requests ALL, READ_USER_PROFILE, WRITE_USER_PROFILE, READ_CONVERSATIONS, WRITE_CONVERSATIONS, READ_USER, CALLS Default: ALL
38 39 40 |
# File 'lib/circuit_client/client.rb', line 38 def auth_scope @auth_scope end |
#base_path ⇒ Object
The base path of the API Default: /rest/v2
16 17 18 |
# File 'lib/circuit_client/client.rb', line 16 def base_path @base_path end |
#client_id ⇒ Object
The client_id for authentication
27 28 29 |
# File 'lib/circuit_client/client.rb', line 27 def client_id @client_id end |
#client_secret ⇒ Object
The client_secret for authentication
30 31 32 |
# File 'lib/circuit_client/client.rb', line 30 def client_secret @client_secret end |
#host ⇒ Object
Set the hostname of the circuit system Default: eu.yourcircuit.com
12 13 14 |
# File 'lib/circuit_client/client.rb', line 12 def host @host end |
#protocol ⇒ Object
The protocol to use ‘http’ or ‘https’ Default: ‘https’
20 21 22 |
# File 'lib/circuit_client/client.rb', line 20 def protocol @protocol end |
#timeout ⇒ Object
Timeout for http requests Default: 60
24 25 26 |
# File 'lib/circuit_client/client.rb', line 24 def timeout @timeout end |
#trace ⇒ Object
Enable tracing (outputs http requests to STDOUT) Default: false (disabled)
42 43 44 |
# File 'lib/circuit_client/client.rb', line 42 def trace @trace end |
Instance Method Details
#access_token ⇒ Object
The token used for authentication
75 76 77 78 79 80 81 82 83 |
# File 'lib/circuit_client/client.rb', line 75 def access_token return @access_token unless @access_token.nil? case @auth_method when :client_credentials auth_client_credentials else raise "Unknown auth_method: #{@auth_method}" end end |
#auth_client_credentials ⇒ Object
Authenticate using client_credentials method
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/circuit_client/client.rb', line 86 def auth_client_credentials raise 'client_id parameter required' if @client_id.nil? raise 'client_secret parameter required' if @client_secret.nil? response = connection.post(build_uri('/oauth/token')) do |req| req.headers['Content-Type'] = 'application/x-www-form-urlencoded' req.body = URI.encode_www_form( client_id: @client_id, client_secret: @client_secret, grant_type: 'client_credentials', scope: @auth_scope ) end data = JSON.parse(response.body) data['access_token'] end |
#base_uri ⇒ Object
Return URI with path elements
105 106 107 |
# File 'lib/circuit_client/client.rb', line 105 def base_uri URI("#{@protocol}://#{@host}") end |
#build_api_uri(path) ⇒ Object
Returns an URI and with a path relative to the base_path of the API
117 118 119 |
# File 'lib/circuit_client/client.rb', line 117 def build_api_uri(path) build_uri("#{@base_path}#{path}") end |
#build_uri(path) ⇒ Object
Returns an URI with the base_uri and the supplied path
110 111 112 113 114 |
# File 'lib/circuit_client/client.rb', line 110 def build_uri(path) uri = base_uri uri.path = path uri.to_s end |
#connection ⇒ Object
The faraday http connection object
66 67 68 69 70 71 72 |
# File 'lib/circuit_client/client.rb', line 66 def connection @connection ||= Faraday.new(url: base_uri.to_s) do |c| c.response :logger if @trace c.use CircuitClient::ErrorMiddleware c.adapter Faraday.default_adapter end end |
#create_direct_conversation(participant) ⇒ Object
Create a new 1:1 conversation
168 169 170 171 172 173 174 |
# File 'lib/circuit_client/client.rb', line 168 def create_direct_conversation(participant) call( :post, '/conversations/direct', participant: participant ) end |
#create_group_conversation(participants, topic) ⇒ Object
Create a new group conversation
158 159 160 161 162 163 164 165 |
# File 'lib/circuit_client/client.rb', line 158 def create_group_conversation(participants, topic) call( :post, '/conversations/group', participants: participants, topic: topic ) end |
#create_message(conv, text, **options) ⇒ Object
Create a new message in a existing conversation
Examples
client.(
'<convId>',
'my message text...',
subject: 'Todays meeting'
)
To send to an existing message item use :item_id parameter:
client.(
'<convId>',
'my message text...',
item_id: 'itemId'
)
139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/circuit_client/client.rb', line 139 def (conv, text, **) item_id = [:item_id] path = "/conversations/#{conv}/messages" path += "/#{item_id}" unless item_id.nil? .delete(:item_id) call( :post, path, content: text, ** ) end |
#current_user ⇒ Object
A cached version of the current connections user profile
196 197 198 |
# File 'lib/circuit_client/client.rb', line 196 def current_user @current_user ||= get_user_profile end |
#delete_group_conversation_participants(conv, participants) ⇒ Object
Remove participants from a conversation
177 178 179 180 181 182 183 |
# File 'lib/circuit_client/client.rb', line 177 def delete_group_conversation_participants(conv, participants) call( :delete, "/conversations/group/#{conv}/participants", participants: participants ) end |
#get_user_profile ⇒ Object
Get the profile of the connections user
191 192 193 |
# File 'lib/circuit_client/client.rb', line 191 def get_user_profile call(:get, '/users/profile') end |
#get_users(id) ⇒ Object
Get profile of a user
201 202 203 |
# File 'lib/circuit_client/client.rb', line 201 def get_users(id) call(:get, "/users/#{id}") end |
#get_users_presence(id) ⇒ Object
Get presence information of a user
206 207 208 |
# File 'lib/circuit_client/client.rb', line 206 def get_users_presence(id) call(:get, "/users/#{id}/presence") end |
#leave_group_conversation(conv) ⇒ Object
Remove the current_user from a conversation
186 187 188 |
# File 'lib/circuit_client/client.rb', line 186 def leave_group_conversation(conv) delete_group_conversation_participants(conv, [current_user['userId']]) end |
#list_conversations ⇒ Object
List all conversation of the user
153 154 155 |
# File 'lib/circuit_client/client.rb', line 153 def list_conversations call(:get, '/conversations') end |