Class: OpenSend::Client

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api_key:, base_url: DEFAULT_BASE_URL) ⇒ Client

Returns a new instance of Client.



58
59
60
61
62
# File 'lib/opensend.rb', line 58

def initialize(api_key:, base_url: DEFAULT_BASE_URL)
  @api_key = normalize_api_key(api_key)
  @base_uri = normalize_base_url(base_url)
  @base_url = @base_uri.to_s
end

Instance Attribute Details

#api_keyObject (readonly)

Returns the value of attribute api_key.



56
57
58
# File 'lib/opensend.rb', line 56

def api_key
  @api_key
end

#base_urlObject (readonly)

Returns the value of attribute base_url.



56
57
58
# File 'lib/opensend.rb', line 56

def base_url
  @base_url
end

Instance Method Details

#emailsObject



64
65
66
# File 'lib/opensend.rb', line 64

def emails
  EmailsResource.new(self)
end

#post(path, payload) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/opensend.rb', line 68

def post(path, payload)
  uri = endpoint(path)
  request = Net::HTTP::Post.new(uri)
  request["Authorization"] = "Bearer #{api_key}"
  request["Content-Type"] = "application/json"
  request["Accept"] = "application/json"
  request["User-Agent"] = USER_AGENT
  request.body = JSON.generate(payload)

  response = perform_request(uri, request)
  body = response.body.to_s

  unless response.is_a?(Net::HTTPSuccess)
    raise api_error(response, body)
  end

  body.empty? ? {} : JSON.parse(body)
rescue JSON::ParserError => error
  raise Error.new(
    "Invalid JSON response from OpenSend",
    status_code: 0,
    name: "parse_error",
    code: "parse_error",
    body: error.message
  )
rescue IOError, SystemCallError, Timeout::Error, SocketError => error
  raise Error.new(
    error.message,
    status_code: 0,
    name: "request_error",
    code: "request_error"
  )
end