Class: Notifications::Client::Speaker

Inherits:
Object
  • Object
show all
Includes:
ErrorHandling
Defined in:
lib/notifications/client/speaker.rb

Constant Summary collapse

BASE_PATH =
"/v2/notifications".freeze
USER_AGENT =
"NOTIFY-API-RUBY-CLIENT/#{Notifications::Client::VERSION}".freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ErrorHandling

#build_error, #error_class_for_code

Constructor Details

#initialize(secret_token = nil, base_url = nil) ⇒ Speaker

Returns a new instance of Speaker.

Parameters:

  • secret (String)

    your service API secret

  • base_url (String) (defaults to: nil)

    host URL. This is the address to perform the requests. If left nil the production url is used.



23
24
25
26
27
28
29
# File 'lib/notifications/client/speaker.rb', line 23

def initialize(secret_token = nil, base_url = nil)
  @service_id = secret_token[secret_token.length - 73..secret_token.length - 38]
  @secret_token = secret_token[secret_token.length - 36..secret_token.length]
  @base_url = base_url || PRODUCTION_BASE_URL

  validate_uuids!
end

Instance Attribute Details

#base_urlObject (readonly)

Returns the value of attribute base_url.



12
13
14
# File 'lib/notifications/client/speaker.rb', line 12

def base_url
  @base_url
end

#secret_tokenObject (readonly)

Returns the value of attribute secret_token.



14
15
16
# File 'lib/notifications/client/speaker.rb', line 14

def secret_token
  @secret_token
end

#service_idObject (readonly)

Returns the value of attribute service_id.



13
14
15
# File 'lib/notifications/client/speaker.rb', line 13

def service_id
  @service_id
end

Instance Method Details

#get(id = nil, options = {}) ⇒ Object

Parameters:

  • id (String) (defaults to: nil)
  • options (Hash) (defaults to: {})

    query

See Also:

  • #perform_request!


64
65
66
67
68
69
70
# File 'lib/notifications/client/speaker.rb', line 64

def get(id = nil, options = {})
  path = BASE_PATH.dup
  path << "/" << id if id
  path << "?" << URI.encode_www_form(options) if options.any?
  request = Net::HTTP::Get.new(path, headers)
  perform_request!(request)
end

#get_pdf_for_letter(id) ⇒ Object



121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/notifications/client/speaker.rb', line 121

def get_pdf_for_letter(id)
  path = "/v2/notifications/" << id << "/pdf"
  request = Net::HTTP::Get.new(path, headers)

  # can't use `perform_request!` because we're just returning raw binary data
  response = open(request)
  if response.is_a?(Net::HTTPClientError) || response.is_a?(Net::HTTPServerError)
    raise build_error(response)
  else
    response.body
  end
end

#get_with_url(url, options = {}) ⇒ Object

Parameters:

  • url

    path of endpoint

  • id (String)
  • options (Hash) (defaults to: {})

    query

See Also:

  • #perform_request!


77
78
79
80
81
82
# File 'lib/notifications/client/speaker.rb', line 77

def get_with_url(url, options = {})
  path = url
  path << "?" << URI.encode_www_form(options) if options.any?
  request = Net::HTTP::Get.new(path, headers)
  perform_request!(request)
end

#post(kind, form_data) ⇒ Object

 @option form_data [String] :phone_number

phone number of the sms recipient

Parameters:

  • kind (String)

    ‘email’, ‘sms’ or ‘letter’

  • form_data (Hash)

Options Hash (form_data):

  • :email_address (String)

    email address of the email recipent

  • :template (String)

    template to render in notification

  • :personalisation (Hash)

    fields to use in the template

  • :reference (String)

    A reference specified by the service for the notification. Get all notifications can be filtered by this reference. This reference can be unique or used used to refer to a batch of notifications. Can be an empty string or nil, when you do not require a reference for the notifications.

  • :email_reply_to_id (String)

    id of the email address that replies to email notifications will be sent to

  • :sms_sender_id (String)

    id of the sender to be used for an sms notification

See Also:

  • #perform_request!


51
52
53
54
55
56
57
58
# File 'lib/notifications/client/speaker.rb', line 51

def post(kind, form_data)
  request = Net::HTTP::Post.new(
    "#{BASE_PATH}/#{kind}",
    headers
  )
  request.body = form_data.is_a?(Hash) ? form_data.to_json : form_data
  perform_request!(request)
end

#post_precompiled_letter(reference, pdf_file, postage = nil) ⇒ Object

Parameters:

  • reference (String)

    reference of the notification

  • pdf_file (File)

    PDF file opened for reading

See Also:

  • #perform_request!


105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/notifications/client/speaker.rb', line 105

def post_precompiled_letter(reference, pdf_file, postage = nil)
  content = Base64.strict_encode64(pdf_file.read)
  form_data = { reference: reference, content: content }

  if postage != nil
    form_data[:postage] = postage
  end

  request = Net::HTTP::Post.new(
    "#{BASE_PATH}/letter",
    headers
  )
  request.body = form_data.to_json
  perform_request!(request)
end

#post_with_url(url, form_data) ⇒ Object

Parameters:

  • url (String)

    path of the endpoint

  • form_data (Hash)

Options Hash (form_data):

  • :template_id (String)

    id of the template to render

  • :personalisation (Hash)

    fields to use in the template

See Also:

  • #perform_request!


92
93
94
95
96
97
98
99
# File 'lib/notifications/client/speaker.rb', line 92

def post_with_url(url, form_data)
  request = Net::HTTP::Post.new(
    url,
    headers
  )
  request.body = form_data.is_a?(Hash) ? form_data.to_json : form_data
  perform_request!(request)
end