Class: InstagramConnect::Connect

Inherits:
Object
  • Object
show all
Defined in:
lib/instagram_connect/connect.rb

Overview

Turns an OAuth authorization code into a persisted Account. Extracted from the callback controller so the flow is unit-testable without the HTTP layer.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ Connect

Returns a new instance of Connect.



9
10
11
12
# File 'lib/instagram_connect/connect.rb', line 9

def initialize(config)
  @config = config
  @strategy = Auth.for(config)
end

Class Method Details

.call(code:, redirect_uri:, config: InstagramConnect.configuration, connected_by_id: nil) ⇒ Object



5
6
7
# File 'lib/instagram_connect/connect.rb', line 5

def self.call(code:, redirect_uri:, config: InstagramConnect.configuration, connected_by_id: nil)
  new(config).call(code: code, redirect_uri: redirect_uri, connected_by_id: connected_by_id)
end

Instance Method Details

#call(code:, redirect_uri:, connected_by_id: nil) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/instagram_connect/connect.rb', line 14

def call(code:, redirect_uri:, connected_by_id: nil)
  data = @strategy.exchange_code(code: code, redirect_uri: redirect_uri)
  identity = resolve_identity(data)

   = Account.find_or_initialize_by(ig_user_id: identity[:ig_user_id])
  .assign_attributes(
    auth_path: @config.auth_path.to_s,
    access_token: data[:access_token],
    token_expires_at: data[:expires_at],
    page_id: identity[:page_id],
    active: true
  )
  .connected_by_id = connected_by_id unless connected_by_id.nil?
  .save!
  
end