mailjet 1.7.10 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a012dee3be1fc91064fb9295b7fe8b5a5b95785ccdd309b316ef36b38015b8ed
4
- data.tar.gz: 0e178063bcafbe5fc50630d0571821b0088dd85c05f8461eb0fecd64f3ab9855
3
+ metadata.gz: c9c74309f3d5e557d27fe01548e0998a987c90a9bd1e5e52c187c23d33fb5475
4
+ data.tar.gz: 3c44b00a89c535c6143d0011fa6e11ca1d6bcdbc82ed984eea4b5f23b0483b89
5
5
  SHA512:
6
- metadata.gz: f97b0f87b954c4d44496138a3dc278f662de15bba33b4a3975abc227a3b1ff91e75c1bb7fa56361f1bcc3ff2aa9d22918e8e127bfbec23a26c271268b7046aa5
7
- data.tar.gz: cefc2978569f6082de806bdc60b2d7ae86eb646ab2c9070d1c503a9da24992066bec53bf4eed1f9ba7f980ace1a2b4ff476935a72c11b3c676abacb220d687e0
6
+ metadata.gz: a35a75e7a661f72c28fda90a8403f363252f36cf9573786e512f1721b807b6f450d51dafdc6d8ae8c816b4bd0f32b4abe008f67b6189647a0caa70f0ebbc929d
7
+ data.tar.gz: 513f1178e1f7e625b177faa7220d60fbb4208a5d38f91642d173ee7a63d39fa3758d189f04e9a4a3e928d84e8d4921a17c22d281bb9fca2b8cf47c7f9f7348ca
@@ -1,40 +1,32 @@
1
- require 'rest_client'
1
+ require 'faraday'
2
2
  require 'yajl'
3
3
 
4
4
  module Mailjet
5
5
  class Connection
6
6
 
7
- attr_accessor :adapter, :public_operations, :read_only, :perform_api_call, :read_timeout, :open_timeout
7
+ attr_accessor :adapter, :public_operations, :read_only, :perform_api_call, :api_key, :secret_key, :options
8
8
  alias :read_only? :read_only
9
9
 
10
10
  def [](suburl, &new_block)
11
- broken_url = url.split("/")
11
+ broken_url = uri.path.split("/")
12
12
  if broken_url.include?("contactslist") && broken_url.include?("managemanycontacts") && broken_url.last.to_i > 0
13
- self.class.new(url, options[:user], options[:password], options)
13
+ self.class.new(uri, api_key, secret_key, options)
14
14
  else
15
- self.class.new(concat_urls(url, suburl), options[:user], options[:password], options)
15
+ self.class.new(concat_urls(suburl), api_key, secret_key, options)
16
16
  end
17
17
  end
18
18
 
19
19
  def initialize(end_point, api_key, secret_key, options = {})
20
- # #charles proxy
21
- # RestClient.proxy = "http://127.0.0.1:8888"
22
- # #
23
- # #Output for debugging
24
- # RestClient.log =
25
- # Object.new.tap do |proxy|
26
- # def proxy.<<(message)
27
- # Rails.logger.info message
28
- # end
29
- # end
30
- # #
31
- adapter_class = options[:adapter_class] || RestClient::Resource
20
+ self.options = options
21
+ self.api_key = api_key
22
+ self.secret_key = secret_key
32
23
  self.public_operations = options[:public_operations] || []
33
24
  self.read_only = options[:read_only]
34
- self.read_timeout = options[:read_timeout]
35
- self.open_timeout = options[:open_timeout]
36
- # self.adapter = adapter_class.new(end_point, options.merge(user: api_key, password: secret_key, :verify_ssl => false, content_type: 'application/json'))
37
- self.adapter = adapter_class.new(end_point, options.merge(user: api_key, password: secret_key, content_type: 'application/json', read_timeout: self.read_timeout, open_timeout: self.open_timeout))
25
+ self.adapter = Faraday.new(end_point, ssl: { verify: false }) do |conn|
26
+ conn.response :raise_error, include_request: true
27
+ conn.request :authorization, :basic, api_key, secret_key
28
+ conn.headers['Content-Type'] = 'application/json'
29
+ end
38
30
  self.perform_api_call = options.key?(:perform_api_call) ? options[:perform_api_call] : true
39
31
  end
40
32
 
@@ -54,34 +46,31 @@ module Mailjet
54
46
  handle_api_call(:delete, additional_headers, &block)
55
47
  end
56
48
 
57
- def options
58
- self.adapter.options
59
- end
60
-
61
- def concat_urls(*options)
62
- self.adapter.concat_urls(*options)
49
+ def concat_urls(suburl)
50
+ self.adapter.build_url(suburl.to_s)
63
51
  end
64
52
 
65
- def url
66
- self.adapter.url
53
+ def uri
54
+ self.adapter.build_url
67
55
  end
68
56
 
69
57
  private
70
58
 
71
59
  def handle_api_call(method, additional_headers = {}, payload = {}, &block)
72
- formatted_payload = (additional_headers[:content_type] == :json) ? Yajl::Encoder.encode(payload) : payload
60
+ formatted_payload = (additional_headers["Content-Type"] == 'application/json') ? Yajl::Encoder.encode(payload) : payload
73
61
  raise Mailjet::MethodNotAllowed unless method_allowed(method)
74
62
 
75
63
  if self.perform_api_call
76
64
  if [:get, :delete].include?(method)
77
- @adapter.send(method, additional_headers, &block)
65
+ @adapter.send(method, nil, additional_headers[:params], &block)
78
66
  else
79
- @adapter.send(method, formatted_payload, additional_headers, &block)
67
+ @adapter.send(method, nil, formatted_payload, additional_headers, &block)
80
68
  end
81
69
  else
82
70
  return Yajl::Encoder.encode({'Count' => 0, 'Data' => [mock_api_call: true], 'Total' => 0})
83
71
  end
84
- rescue RestClient::Exception => e
72
+
73
+ rescue Faraday::Error => e
85
74
  handle_exception(e, additional_headers, formatted_payload)
86
75
  end
87
76
 
@@ -91,20 +80,20 @@ module Mailjet
91
80
  end
92
81
 
93
82
  def handle_exception(e, additional_headers, payload = {})
94
- return e.http_body if e.http_headers[:content_type].include?("text/plain")
83
+ return e.response_body if e.response_headers[:content_type].include?("text/plain")
95
84
 
96
85
  params = additional_headers[:params] || {}
97
86
  formatted_payload = (additional_headers[:content_type] == :json) ? Yajl::Parser.parse(payload) : payload
98
87
  params = params.merge!(formatted_payload) if formatted_payload.is_a?(Hash)
99
88
 
100
- http_body = if e.http_headers[:content_type].include?("application/json")
101
- e.http_body
89
+ response_body = if e.response_headers[:content_type].include?("application/json")
90
+ e.response_body
102
91
  else
103
92
  "{}"
104
93
  end
105
94
 
106
- if sent_invalid_email?(e.http_body, @adapter.url)
107
- return e.http_body
95
+ if sent_invalid_email?(e.response_body, @adapter.build_url)
96
+ return e.response_body
108
97
  else
109
98
  raise communication_error(e)
110
99
  end
@@ -112,20 +101,20 @@ module Mailjet
112
101
 
113
102
  def communication_error(e)
114
103
  if e.respond_to?(:response) && e.response
115
- return case e.response.code
104
+ return case e.response_status
116
105
  when Unauthorized::CODE
117
- Unauthorized.new(e.message, e.response)
106
+ Unauthorized.new(e.message, e)
118
107
  when BadRequest::CODE
119
- BadRequest.new(e.message, e.response)
108
+ BadRequest.new(e.message, e)
120
109
  else
121
- CommunicationError.new(e.message, e.response)
110
+ CommunicationError.new(e.message, e)
122
111
  end
123
112
  end
124
113
  CommunicationError.new(e.message)
125
114
  end
126
115
 
127
- def sent_invalid_email?(error_http_body, url)
128
- return false unless url.include?('v3.1/send')
116
+ def sent_invalid_email?(error_http_body, uri)
117
+ return false unless uri.path.include?('v3.1/send')
129
118
  return unless error_http_body
130
119
 
131
120
  parsed_body = Yajl::Parser.parse(error_http_body)
@@ -138,6 +127,5 @@ module Mailjet
138
127
  end
139
128
 
140
129
  class MethodNotAllowed < StandardError
141
-
142
130
  end
143
131
  end
@@ -51,13 +51,13 @@ module Mailjet
51
51
  @code = if response.nil?
52
52
  NOCODE
53
53
  else
54
- response.code
54
+ response.response_status
55
55
  end
56
56
 
57
57
  api_message = begin
58
- Yajl::Parser.parse(response.body)['ErrorMessage']
58
+ Yajl::Parser.parse(response.response_body)['ErrorMessage']
59
59
  rescue Yajl::ParseError
60
- response.body
60
+ response.response_body
61
61
  rescue NoMethodError
62
62
  "Unknown API error"
63
63
  rescue
@@ -15,7 +15,7 @@ require 'active_support/core_ext/hash/indifferent_access'
15
15
  module Mailjet
16
16
  module Resource
17
17
  # define here available options for filtering
18
- OPTIONS = [:version, :url, :perform_api_call, :api_key, :secret_key, :read_timeout, :open_timeout]
18
+ OPTIONS = [:version, :url, :perform_api_call, :api_key, :secret_key]
19
19
 
20
20
  NON_JSON_URLS = ['v3/send/message'] # urls that don't accept JSON input
21
21
  DATA_URLS = ['plain', 'csv'] # url for send binary data , 'CSVError/text:csv'
@@ -39,21 +39,20 @@ module Mailjet
39
39
  options[:secret_key] || Mailjet.config.secret_key,
40
40
  public_operations: public_operations,
41
41
  read_only: read_only,
42
- perform_api_call: options[:perform_api_call],
43
- open_timeout: options[:open_timeout],
44
- read_timeout: options[:read_timeout])
42
+ perform_api_call: options[:perform_api_call])
45
43
  end
46
44
 
47
45
  def self.default_headers
48
46
  if NON_JSON_URLS.include?(self.resource_path) # don't use JSON if Send API
49
- default_headers = { accept: :json, accept_encoding: :deflate }
50
- elsif DATA_URLS.any? { |data_type| default_headers = { content_type: "text/#{data_type}" } if
51
- self.resource_path.include?(data_type)
52
- }
47
+ default_headers = { 'Accept' =>'application/json', 'Accept-Encoding' => 'deflate' }
48
+ elsif DATA_URLS.any? do |data_type|
49
+ default_headers = { 'Content-Type' => "text/#{data_type}" } if self.resource_path.include?(data_type)
50
+ end
53
51
  else
54
- default_headers = { accept: :json, accept_encoding: :deflate, content_type: :json } #use JSON if *not* Send API
52
+ # use JSON if *not* Send API
53
+ default_headers = {'Content-Type' =>'application/json', 'Accept' =>'application/json', 'Accept-Encoding' => 'deflate'}
55
54
  end
56
- return default_headers.merge!(user_agent: "mailjet-api-v3-ruby/#{Gem.loaded_specs["mailjet"].version}")
55
+ return default_headers.merge!('User-Agent' => "mailjet-api-v3-ruby/#{Gem.loaded_specs["mailjet"].version}")
57
56
  end
58
57
  end
59
58
  end
@@ -69,7 +68,7 @@ module Mailjet
69
68
  opts = define_options(options)
70
69
  params = format_params(params)
71
70
  response = connection(opts).get(default_headers.merge!(params: params))
72
- attribute_array = parse_api_json(response)
71
+ attribute_array = parse_api_json(response.body)
73
72
  attribute_array.map{ |attributes| instanciate_from_api(attributes) }
74
73
  rescue Mailjet::ApiError => error
75
74
  raise error
@@ -78,7 +77,7 @@ module Mailjet
78
77
  def count(options = {})
79
78
  opts = define_options(options)
80
79
  response_json = connection(opts).get(default_headers.merge!(params: {limit: 1, countrecords: 1}))
81
- response_hash = Yajl::Parser.parse(response_json)
80
+ response_hash = Yajl::Parser.parse(response_json.body)
82
81
  response_hash['Total']
83
82
  rescue Mailjet::ApiError => error
84
83
  raise error
@@ -95,7 +94,7 @@ module Mailjet
95
94
  opts = define_options(options)
96
95
  self.resource_path = create_action_resource_path(normalized_id, job_id) if self.action
97
96
 
98
- attributes = parse_api_json(connection(opts)[normalized_id].get(default_headers)).first
97
+ attributes = parse_api_json(connection(opts)[normalized_id].get(default_headers).body).first
99
98
  instanciate_from_api(attributes)
100
99
 
101
100
  rescue Mailjet::CommunicationError => e
@@ -106,6 +105,14 @@ module Mailjet
106
105
  end
107
106
  end
108
107
 
108
+
109
+ def find_by_id(id, options = {})
110
+ # if action method, ammend url to appropriate id
111
+ opts = define_options(options)
112
+ self.resource_path = create_action_resource_path(id) if self.action
113
+ connection(opts).get(default_headers)
114
+ end
115
+
109
116
  def create(attributes = {}, options = {})
110
117
  # if action method, ammend url to appropriate id
111
118
  opts = define_options(options)
@@ -139,19 +146,12 @@ module Mailjet
139
146
  def send_data(id, binary_data = nil, options = {})
140
147
  opts = define_options(options)
141
148
  self.resource_path = create_action_resource_path(id) if self.action
149
+ response = connection(opts).post(binary_data, default_headers.merge({'Content-Length' => "#{binary_data.size}", 'Transfer-Encoding' => 'chunked'}))
142
150
 
143
- response_hash = Yajl::Parser.parse(connection(opts).post(binary_data, default_headers))
151
+ response_hash = response.respond_to?(:body) ? Yajl::Parser.parse(response.body) : Yajl::Parser.parse(response)
144
152
  response_hash['ID'] ? response_hash['ID'] : response_hash
145
153
  end
146
154
 
147
- def find_by_id(id, options = {})
148
- # if action method, ammend url to appropriate id
149
- opts = define_options(options)
150
- self.resource_path = create_action_resource_path(id) if self.action
151
-
152
- connection(opts).get(default_headers)
153
- end
154
-
155
155
  def instanciate_from_api(attributes = {})
156
156
  self.new(attributes.merge!(persisted: true))
157
157
  end
@@ -284,9 +284,9 @@ module Mailjet
284
284
  if opts[:perform_api_call] && !persisted?
285
285
  # get attributes only for entity creation
286
286
  self.attributes = if self.resource_path == 'send'
287
- Yajl::Parser.parse(response)
287
+ Yajl::Parser.parse(response.body)
288
288
  else
289
- parse_api_json(response).first
289
+ parse_api_json(response.body).first
290
290
  end
291
291
  end
292
292
 
@@ -11,7 +11,7 @@ module Mailjet
11
11
  opts = define_options(options)
12
12
  self.resource_path = create_action_resource_path(id, job_id) if self.action
13
13
 
14
- raw_data = parse_api_json(connection(opts)[id].get(default_headers))
14
+ raw_data = parse_api_json(connection(opts)[id].get(default_headers).body)
15
15
 
16
16
  raw_data.map do |entity|
17
17
  instanciate_from_api(entity)
@@ -5,20 +5,15 @@ module Mailjet
5
5
  self.public_operations = [:get, :put, :post]
6
6
  self.filters = [:campaign, :contacts_list, :is_unsubscribed, :last_activity_at, :recipient, :status]
7
7
  self.resourceprop = [
8
- :created_at,
9
8
  :delivered_count,
10
9
  :email,
11
10
  :id,
12
11
  :is_opt_in_pending,
13
12
  :is_spam_complaining,
14
- :last_activity_at,
15
- :last_update_at,
16
13
  :name,
17
- :unsubscribed_at,
18
14
  :unsubscribed_by,
19
15
  :is_excluded_from_campaigns
20
16
  ]
21
17
  self.read_only_attributes = [:created_at, :last_activity_at, :last_update_at, :unsubscribed_at]
22
-
23
18
  end
24
19
  end
@@ -11,7 +11,7 @@ module Mailjet
11
11
  opts = define_options(options)
12
12
  self.resource_path = create_action_resource_path(id, job_id) if self.action
13
13
 
14
- raw_data = parse_api_json(connection(opts).get(default_headers))
14
+ raw_data = parse_api_json(connection(opts).get(default_headers).body)
15
15
 
16
16
  raw_data.map do |entity|
17
17
  instanciate_from_api(entity)
@@ -4,7 +4,8 @@ module Mailjet
4
4
  self.resource_path = 'REST/listrecipient'
5
5
  self.public_operations = [:get, :put, :post, :delete]
6
6
  self.filters = [:active, :blocked, :contact, :contact_email, :contacts_list, :last_activity_at, :list_name, :opened, :status, :unsub]
7
- self.resourceprop = [:contact, :id, :is_active, :is_unsubscribed, :list, :unsubscribed_at, :contact_id, :list_id, 'ContactID', 'ListID', 'ContactALT', 'ListALT']
7
+ self.resourceprop = [:contact, :id, :is_active, :is_unsubscribed, :list, :contact_id, :list_id, 'ContactID', 'ListID', 'ContactALT', 'ListALT']
8
8
 
9
+ self.read_only_attributes = [:subscribed_at, :unsubscribed_at]
9
10
  end
10
11
  end
@@ -12,7 +12,7 @@ module Mailjet
12
12
  opts = define_options(options)
13
13
  self.resource_path = create_action_resource_path(id, job_id) if self.action
14
14
 
15
- raw_data = parse_api_json(connection(opts)[id].get(default_headers))
15
+ raw_data = parse_api_json(connection(opts)[id].get(default_headers).body)
16
16
 
17
17
  raw_data.map do |entity|
18
18
  instanciate_from_api(entity)
@@ -12,7 +12,7 @@ module Mailjet
12
12
  opts = define_options(options)
13
13
  self.resource_path = create_action_resource_path(id, job_id) if self.action
14
14
 
15
- raw_data = parse_api_json(connection(opts)[id].get(default_headers))
15
+ raw_data = parse_api_json(connection(opts)[id].get(default_headers).body)
16
16
 
17
17
  raw_data.map do |entity|
18
18
  instanciate_from_api(entity)
@@ -12,7 +12,7 @@ module Mailjet
12
12
  opts = define_options(options)
13
13
  self.resource_path = create_action_resource_path(id, job_id) if self.action
14
14
 
15
- raw_data = parse_api_json(connection(opts)[id].get(default_headers))
15
+ raw_data = parse_api_json(connection(opts)[id].get(default_headers).body)
16
16
 
17
17
  raw_data.map do |entity|
18
18
  instanciate_from_api(entity)
@@ -12,7 +12,7 @@ module Mailjet
12
12
 
13
13
  opts = define_options(options)
14
14
  response = connection(opts).get(default_headers)
15
- attributes = parse_api_json(response).first
15
+ attributes = parse_api_json(response.body).first
16
16
 
17
17
  instanciate_from_api(attributes)
18
18
  rescue Mailjet::CommunicationError => e
@@ -1,3 +1,3 @@
1
1
  module Mailjet
2
- VERSION = "1.7.10"
2
+ VERSION = "1.8.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mailjet
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.10
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler Nappy
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2024-04-16 00:00:00.000000000 Z
14
+ date: 2024-08-30 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activesupport
@@ -42,19 +42,19 @@ dependencies:
42
42
  - !ruby/object:Gem::Version
43
43
  version: 1.4.0
44
44
  - !ruby/object:Gem::Dependency
45
- name: rest-client
45
+ name: faraday
46
46
  requirement: !ruby/object:Gem::Requirement
47
47
  requirements:
48
- - - ">="
48
+ - - "~>"
49
49
  - !ruby/object:Gem::Version
50
- version: 2.1.0
50
+ version: '2.1'
51
51
  type: :runtime
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
- - - ">="
55
+ - - "~>"
56
56
  - !ruby/object:Gem::Version
57
- version: 2.1.0
57
+ version: '2.1'
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: yajl-ruby
60
60
  requirement: !ruby/object:Gem::Requirement
@@ -306,7 +306,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
306
306
  - !ruby/object:Gem::Version
307
307
  version: '0'
308
308
  requirements: []
309
- rubygems_version: 3.4.21
309
+ rubygems_version: 3.1.6
310
310
  signing_key:
311
311
  specification_version: 4
312
312
  summary: Mailjet a powerful all-in-one email service provider clients can use to get