Class: Stealth::Services::Facebook::Client

Inherits:
BaseClient
  • Object
show all
Defined in:
lib/stealth/services/facebook/client.rb

Constant Summary collapse

FB_ENDPOINT =
"https://graph.facebook.com/v2.10/me"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(reply:, endpoint: 'messages') ⇒ Client

Returns a new instance of Client.



19
20
21
22
23
# File 'lib/stealth/services/facebook/client.rb', line 19

def initialize(reply:, endpoint: 'messages')
  @reply = reply
  access_token = "access_token=#{Stealth.config.facebook.page_access_token}"
  @api_endpoint = [[FB_ENDPOINT, endpoint].join('/'), access_token].join('?')
end

Instance Attribute Details

#api_endpointObject (readonly)

Returns the value of attribute api_endpoint.



17
18
19
# File 'lib/stealth/services/facebook/client.rb', line 17

def api_endpoint
  @api_endpoint
end

#replyObject (readonly)

Returns the value of attribute reply.



17
18
19
# File 'lib/stealth/services/facebook/client.rb', line 17

def reply
  @reply
end

Class Method Details

.fetch_profile(recipient_id:, fields: nil) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/stealth/services/facebook/client.rb', line 31

def self.fetch_profile(recipient_id:, fields: nil)
  if fields.blank?
    fields = [:id, :name, :first_name, :last_name, :profile_pic]
  end

  query_hash = {
    fields: fields.join(','),
    access_token: Stealth.config.facebook.page_access_token
  }

  uri = URI::HTTPS.build(
    host: "graph.facebook.com",
    path: "/#{recipient_id}",
    query: query_hash.to_query
  )

  response = Faraday.get(uri.to_s)
  Stealth::Logger.l(topic: "facebook", message: "Requested user profile for #{recipient_id}. Response: #{response.status}: #{response.body}")

  if response.status.in?(200..299)
    MultiJson.load(response.body)
  else
    raise(Stealth::Errors::ServiceError, "Facebook error #{response.status}: #{response.body}")
  end
end

Instance Method Details

#transmitObject



25
26
27
28
29
# File 'lib/stealth/services/facebook/client.rb', line 25

def transmit
  headers = { "Content-Type" => "application/json" }
  response = Faraday.post(api_endpoint, reply.to_json, headers)
  Stealth::Logger.l(topic: "facebook", message: "Transmitting. Response: #{response.status}: #{response.body}")
end