Class: Jbr::OAuth

Inherits:
Object
  • Object
show all
Defined in:
lib/jbr/oauth.rb

Constant Summary collapse

DISCONNECT_MUTATION =
<<~GRAPHQL.freeze
  mutation Disconnect {
    appDisconnect {
      app { name author }
      userErrors { message }
    }
  }
GRAPHQL

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(credentials = {}) ⇒ OAuth

Returns a new instance of OAuth.



12
13
14
15
16
17
18
# File 'lib/jbr/oauth.rb', line 12

def initialize(credentials = {})
  @access_token = credentials[:access_token]
  @refresh_token = credentials[:refresh_token]
  @expires_at = credentials[:expires_at]
  @account_id = credentials[:account_id]
  @invalid_at = credentials[:invalid_at]
end

Instance Attribute Details

#access_tokenObject (readonly)

Returns the value of attribute access_token.



20
21
22
# File 'lib/jbr/oauth.rb', line 20

def access_token
  @access_token
end

#account_idObject

Returns the value of attribute account_id.



21
22
23
# File 'lib/jbr/oauth.rb', line 21

def 
  @account_id
end

#expires_atObject (readonly)

Returns the value of attribute expires_at.



20
21
22
# File 'lib/jbr/oauth.rb', line 20

def expires_at
  @expires_at
end

#invalid_atObject (readonly)

Returns the value of attribute invalid_at.



20
21
22
# File 'lib/jbr/oauth.rb', line 20

def invalid_at
  @invalid_at
end

#refresh_tokenObject (readonly)

Returns the value of attribute refresh_token.



20
21
22
# File 'lib/jbr/oauth.rb', line 20

def refresh_token
  @refresh_token
end

Class Method Details

.client_idObject



68
# File 'lib/jbr/oauth.rb', line 68

def self.client_id = ENV['JOBBER_CLIENT_ID']

.client_secretObject



70
# File 'lib/jbr/oauth.rb', line 70

def self.client_secret = ENV['JOBBER_CLIENT_SECRET']

.create(code:, redirect_uri:) ⇒ Object



42
43
44
45
# File 'lib/jbr/oauth.rb', line 42

def self.create(code:, redirect_uri:)
  credentials = post code: code, redirect_uri: redirect_uri, grant_type: 'authorization_code'
  new(credentials).tap { |oauth| oauth. = oauth..id }
end

.post(params = {}) ⇒ Object

Raises:



59
60
61
62
63
64
65
66
# File 'lib/jbr/oauth.rb', line 59

def self.post(params = {})
  uri = URI 'https://api.getjobber.com/api/oauth/token'
  response = Net::HTTP.post_form uri, params.merge(client_id: client_id, client_secret: client_secret)
  raise Error, response.body unless response.is_a? Net::HTTPSuccess
  output = JSON.parse(response.body)
  { access_token: output['access_token'], refresh_token: output['refresh_token'],
    expires_at: (Time.current + output.fetch('expires_in', 3600).to_i) }
end

.url_for(params = {}) ⇒ Object



78
79
80
81
82
# File 'lib/jbr/oauth.rb', line 78

def self.url_for(params = {})
  uri = URI 'https://api.getjobber.com/api/oauth/authorize'
  uri.query ||= params.merge(response_type: 'code', client_id: client_id).to_query
  uri.to_s
end

Instance Method Details

#accountObject



23
# File 'lib/jbr/oauth.rb', line 23

def  = Account.new oauth: self

#clientsObject



24
# File 'lib/jbr/oauth.rb', line 24

def clients = Client.new oauth: self

#deleteObject

Delete a token. If the token is invalid, do nothing.



37
38
39
40
# File 'lib/jbr/oauth.rb', line 37

def delete
  client.query DISCONNECT_MUTATION
rescue GraphQL::Unauthorized => e
end

#invoicesObject



25
# File 'lib/jbr/oauth.rb', line 25

def invoices = Invoice.new oauth: self

#jobsObject



26
# File 'lib/jbr/oauth.rb', line 26

def jobs = Job.new oauth: self

#query(statement, variables: {}) ⇒ Object



30
31
32
33
34
# File 'lib/jbr/oauth.rb', line 30

def query(statement, variables: {})
  client.query statement, variables: variables
rescue GraphQL::Unauthorized => e
  refresh ? retry : {}
end

#quotesObject



27
# File 'lib/jbr/oauth.rb', line 27

def quotes = Quote.new oauth: self

#requestsObject



28
# File 'lib/jbr/oauth.rb', line 28

def requests = Request.new oauth: self