Class: Twi::Conversation

Inherits:
Resource show all
Defined in:
lib/twi/conversation.rb

Overview

The representation of a (classic) group conversation.

Direct Known Subclasses

Mock::Conversation

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Resource

#initialize

Constructor Details

This class inherits a constructor from Twi::Resource

Instance Attribute Details

#idObject (readonly)

Returns the value of attribute id.



5
6
7
# File 'lib/twi/conversation.rb', line 5

def id
  @id
end

#statusObject (readonly)

Returns the value of attribute status.



5
6
7
# File 'lib/twi/conversation.rb', line 5

def status
  @status
end

Instance Method Details

#closeObject



25
26
27
# File 'lib/twi/conversation.rb', line 25

def close
  conversation.update state: :closed
end

#create_message(content:, image_ids: []) ⇒ Object



39
40
41
# File 'lib/twi/conversation.rb', line 39

def create_message(content:, image_ids: [])
  conversation.messages.create **message_params_for(content, image_ids)
end

#create_with(participants:) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/twi/conversation.rb', line 7

def create_with(participants:)
  params = create_params_for participants
  conversation = conversation_service.conversation_with_participants.create **params

  @id = conversation.sid
  @status = conversation.state
rescue Twilio::REST::RestError => error
  case error.code
    when 50438 then raise ExistingConversationError.new(code: error.code, message: error.error_message)
    when 50214 then raise TooManyConversationsError.new(code: error.code, message: error.error_message)
    else raise
  end
end

#deleteObject



29
30
31
# File 'lib/twi/conversation.rb', line 29

def delete
  conversation.delete
end

#rename(friendly_name) ⇒ Object



21
22
23
# File 'lib/twi/conversation.rb', line 21

def rename(friendly_name)
  conversation.update friendly_name: friendly_name
end

#upload(file) ⇒ Object

TODO: Move into Medium – this method doesn’t use anything from this class



44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/twi/conversation.rb', line 44

def upload(file)
  uri = URI "https://mcs.us1.twilio.com/v1/Services/#{Twi.lio.conversation_sid}/Media"
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true

  headers = { 'Content-Type' => file.content_type, 'Content-Size' => file.byte_size.to_s }
  request = Net::HTTP::Post.new uri.request_uri, headers
  request.basic_auth Twi.lio.api_key, Twi.lio.secret
  request.body = file.download
  response = http.request request
  JSON(response.body)['sid']
end

#urlObject



33
34
35
36
37
# File 'lib/twi/conversation.rb', line 33

def url
  url = "/console/conversations/services/#{Twi.lio.conversation_sid}/conversations/#{id}"
  query = "frameUrl=#{CGI.escape url}"
  "https://console.twilio.com/us1/develop/conversations/manage/services?#{query}"
end