mailgun-ruby 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MjI5MjJkMTdmNGY4M2Q0OTRkY2I4MjY5YzRmNjBhYzVhYmUyNzNkMQ==
5
- data.tar.gz: !binary |-
6
- MGViNjllYzBlODY3NzhhZjc3OTczYzAyNTc0YTgxMDg4ODU1ZTZjNw==
2
+ SHA1:
3
+ metadata.gz: 7191c12a6dc2a08445f7cb623f10608e9208c9d2
4
+ data.tar.gz: 5033b5cd5eb92f6ce5c2d678222f8c7d9d118c78
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- YWNmMmRjZTU1OTZiNzA0NzMwM2QwN2E5ZGFiM2NkNjZmOWVkY2Q3MmQ3MjU5
10
- MDQxMjU4NzI4YjZkOGQ1NzRhMGY4NGE3NjE0ZWFhNTMxNWZiM2Y4Y2U2NDM5
11
- MWJkMTJhNmZiZTczZDZlM2JhNGIzNjg2YzAwNzQ2NTNlZjIzNmM=
12
- data.tar.gz: !binary |-
13
- YTg1M2UwNzdiMWIwNGZhMGVjYzJmY2FjMjhkMjJmMjljZWRkYzY5NGRmYmY3
14
- MDcxY2Q4MzVkY2M2NGQ4OWE1Mzc4ZTQyZGUyYTE4NjE5NzJiMGNiMjRlNTNi
15
- YWM1Y2VmODBlMWFiZTU1NmQ4ZmJkMmJmZjFiYzliOTBmOGJmOGI=
6
+ metadata.gz: 38dd19ded277a5566d738c88368b811607762ee258eaca48f7f1afe069b6fd84672bef1e6fb9637b028c06762c840dbd84b7a722ec2e6b7bd51828f99eedd406
7
+ data.tar.gz: a87aab066601ca346f897d551ff37165b862654d378c156df84b9443714c0795b9bb7299e16e0bce5666511d28900b0d0d7677ffe7ff826b2681d1d9c96ea7cc
data/MessageBuilder.md CHANGED
@@ -23,20 +23,20 @@ mg_client = Mailgun::Client.new("your-api-key")
23
23
  mb_obj = Mailgun::MessageBuilder.new()
24
24
 
25
25
  # Define the from address.
26
- mb_obj.set_from_address("me@example.com", {"first"=>"Ruby", "last" => "SDK"});
26
+ mb_obj.from("me@example.com", {"first"=>"Ruby", "last" => "SDK"});
27
27
  # Define a to recipient.
28
28
  mb_obj.add_recipient(:to, "john.doe@example.com", {"first" => "John", "last" => "Doe"});
29
29
  # Define a cc recipient.
30
30
  mb_obj.add_recipient(:cc, "sally.doe@example.com", {"first" => "Sally", "last" => "Doe"});
31
31
  # Define the subject.
32
- mb_obj.set_subject("A message from the Ruby SDK using Message Builder!");
32
+ mb_obj.subject("A message from the Ruby SDK using Message Builder!");
33
33
  # Define the body of the message.
34
- mb_obj.set_text_body("This is the text body of the message!");
34
+ mb_obj.body_text("This is the text body of the message!");
35
35
  # Set the Message-Id header, provide a valid Message-Id.
36
- mb_obj.set_message_id("<20141014000000.11111.11111@example.com>")
36
+ mb_obj.message_id("<20141014000000.11111.11111@example.com>")
37
37
  # Or clear the Message-Id header, provide nil or empty string.
38
- mb_obj.set_message_id(nil)
39
- mb_obj.set_message_id('')
38
+ mb_obj.message_id(nil)
39
+ mb_obj.message_id('')
40
40
  # Campaign and other headers.
41
41
  mb_obj.add_campaign_id("My-Awesome-Campaign");
42
42
  mb_obj.add_custom_parameter("h:Customer-Id", "12345");
@@ -45,7 +45,7 @@ mb_obj.add_custom_parameter("h:Customer-Id", "12345");
45
45
  mb_obj.add_attachment("/path/to/file/receipt_123491820.pdf", "Receipt.pdf");
46
46
 
47
47
  # Schedule message in the future
48
- mb_obj.set_delivery_time("tomorrow 8:00AM PST");
48
+ mb_obj.delivery_at("tomorrow 8:00AM PST");
49
49
 
50
50
  # Finally, send your message using the client
51
51
  result = mg_client.send_message("sending_domain.com", mb_obj)
@@ -64,11 +64,11 @@ mg_client = Mailgun::Client.new("your-api-key")
64
64
  mb_obj = Mailgun::BatchMessage.new(mg_client, "example.com")
65
65
 
66
66
  # Define the from address.
67
- mb_obj.set_from_address("me@example.com", {"first"=>"Ruby", "last" => "SDK"});
67
+ mb_obj.from("me@example.com", {"first"=>"Ruby", "last" => "SDK"});
68
68
  # Define the subject.
69
- mb_obj.set_subject("A message from the Ruby SDK using Message Builder!");
69
+ mb_obj.subject("A message from the Ruby SDK using Message Builder!");
70
70
  # Define the body of the message.
71
- mb_obj.set_text_body("This is the text body of the message!");
71
+ mb_obj.body_text("This is the text body of the message!");
72
72
 
73
73
 
74
74
  # Loop through all of your recipients
data/README.md CHANGED
@@ -19,7 +19,7 @@ gem install mailgun-ruby
19
19
  Gemfile:
20
20
 
21
21
  ```ruby
22
- gem 'mailgun-ruby', '~>1.1.1'
22
+ gem 'mailgun-ruby', '~>1.1.2'
23
23
  ```
24
24
 
25
25
  Usage
@@ -45,7 +45,7 @@ Or obtain the last couple log items:
45
45
 
46
46
  ```ruby
47
47
  # First, instantiate the Mailgun Client with your API key
48
- mg_client = Mailgun::Client.new 'your-api-key'
48
+ mg_client = Mailgun::Client.new 'your-secret-api-key'
49
49
 
50
50
  # Define the domain you wish to query
51
51
  domain = 'example.com'
@@ -60,7 +60,7 @@ Rails
60
60
  The library can be initialized with a Rails initializer containing similar:
61
61
  ```ruby
62
62
  Mailgun.configure do |config|
63
- config.api_key = 'your-secret-key'
63
+ config.api_key = 'your-secret-api-key'
64
64
  end
65
65
  ```
66
66
  Or have the initializer read your environment setting if you perfer.
@@ -12,13 +12,36 @@ module Mailgun
12
12
  def initialize(api_key = Mailgun.api_key,
13
13
  api_host = 'api.mailgun.net',
14
14
  api_version = 'v3',
15
- ssl = true)
15
+ ssl = true,
16
+ test_mode = false)
16
17
 
17
18
  endpoint = endpoint_generator(api_host, api_version, ssl)
18
19
  @http_client = RestClient::Resource.new(endpoint,
19
20
  user: 'api',
20
21
  password: api_key,
21
22
  user_agent: "mailgun-sdk-ruby/#{Mailgun::VERSION}")
23
+ @test_mode = test_mode
24
+ end
25
+
26
+ # Enable test mode
27
+ #
28
+ # Prevents sending of any messages.
29
+ def enable_test_mode!
30
+ @test_mode = true
31
+ end
32
+
33
+ # Disable test mode
34
+ #
35
+ # Reverts the test_mode flag and allows the client to send messages.
36
+ def disable_test_mode!
37
+ @test_mode = false
38
+ end
39
+
40
+ # Client is in test mode?
41
+ #
42
+ # @return [Boolean] Is the client set in test mode?
43
+ def test_mode?
44
+ @test_mode
22
45
  end
23
46
 
24
47
  # Simple Message Sending
@@ -28,6 +51,15 @@ module Mailgun
28
51
  # containing required parameters for the requested resource.
29
52
  # @return [Mailgun::Response] A Mailgun::Response object.
30
53
  def send_message(working_domain, data)
54
+ if test_mode? then
55
+ return Response.from_hash(
56
+ {
57
+ :body => '{"id": "test-mode-mail@localhost", "message": "Queued. Thank you."}',
58
+ :code => 200,
59
+ }
60
+ )
61
+ end
62
+
31
63
  case data
32
64
  when Hash
33
65
  if data.key?(:message)
@@ -37,16 +37,28 @@ module Mailgun
37
37
 
38
38
  # Public: initialization of new error given a message and/or object
39
39
  #
40
- # message - a String detailing the error
41
- # object - a RestClient::Reponse object
40
+ # message - a String detailing the error
41
+ # response - a RestClient::Response object
42
42
  #
43
- def initialize(message = nil, object = nil)
44
- @object = object
45
- @code = object.http_code || NOCODE
46
- super(JSON.parse(object.body)['message'])
43
+ def initialize(message = nil, response = nil)
44
+ @response = response
45
+ @code = response.code || NOCODE
46
+
47
+ begin
48
+ api_message = JSON.parse(response.body)['message']
49
+ rescue JSON::ParserError
50
+ api_message = response.body
51
+ rescue NoMethodError
52
+ api_message = "Unknown API error"
53
+ end
54
+
55
+ message = message || ''
56
+ message = message + ': ' + api_message
57
+
58
+ super(message, response)
47
59
  rescue NoMethodError, JSON::ParserError
48
60
  @code = NOCODE
49
- super(message)
61
+ super(message, response)
50
62
  end
51
63
 
52
64
  end
@@ -1,3 +1,5 @@
1
+ require 'ostruct'
2
+
1
3
  module Mailgun
2
4
  # A Mailgun::Response object is instantiated for each response generated
3
5
  # by the Client request. The Response object supports deserialization of
@@ -10,6 +12,11 @@ module Mailgun
10
12
  # slightly different
11
13
  attr_accessor :body, :code
12
14
 
15
+ def self.from_hash(h)
16
+ # Create a "fake" response object with the data passed from h
17
+ self.new OpenStruct.new(h)
18
+ end
19
+
13
20
  def initialize(response)
14
21
  @body = response.body
15
22
  @code = response.code
@@ -1,4 +1,4 @@
1
1
  # It's the version. Yeay!
2
2
  module Mailgun
3
- VERSION = '1.1.1'
3
+ VERSION = '1.1.2'
4
4
  end
@@ -1,5 +1,6 @@
1
1
  require 'spec_helper'
2
2
  require 'mailgun'
3
+ require 'mailgun/exceptions/exceptions'
3
4
 
4
5
  vcr_opts = { :cassette_name => "instance" }
5
6
 
@@ -9,6 +10,30 @@ describe 'Mailgun instantiation', vcr: vcr_opts do
9
10
  end
10
11
  end
11
12
 
13
+ vcr_opts = { :cassette_name => "exceptions" }
14
+
15
+ describe 'Client exceptions', vcr: vcr_opts do
16
+ before(:all) do
17
+ @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL)
18
+ @domain = TESTDOMAIN
19
+ end
20
+
21
+ it 'display useful error information' do
22
+ begin
23
+ @mg_obj.send_message("not-our-doma.in", {
24
+ :from => "sally@not-our-doma.in",
25
+ :to => "bob@#{@domain}",
26
+ :subject => 'Exception Integration Test',
27
+ :text => 'INTEGRATION TESTING'
28
+ })
29
+ rescue Mailgun::CommunicationError => err
30
+ expect(err.message).to eq('404 Not Found: Domain not found: not-our-doma.in')
31
+ else
32
+ fail
33
+ end
34
+ end
35
+ end
36
+
12
37
  vcr_opts = { :cassette_name => "send_message" }
13
38
 
14
39
  describe 'The method send_message()', vcr: vcr_opts do
@@ -16,7 +41,7 @@ describe 'The method send_message()', vcr: vcr_opts do
16
41
  @mg_obj = Mailgun::Client.new(APIKEY, APIHOST, APIVERSION, SSL)
17
42
  @domain = TESTDOMAIN
18
43
  end
19
-
44
+
20
45
  it 'sends a standard message in test mode.' do
21
46
  result = @mg_obj.send_message(@domain, {:from => "bob@#{@domain}",
22
47
  :to => "sally@#{@domain}",
@@ -29,6 +54,28 @@ describe 'The method send_message()', vcr: vcr_opts do
29
54
  expect(result.body).to include("id")
30
55
  end
31
56
 
57
+ it 'fakes message send while in *client* test mode' do
58
+ @mg_obj.enable_test_mode!
59
+
60
+ expect(@mg_obj.test_mode?).to eq(true)
61
+
62
+ data = { :from => "joe@#{@domain}",
63
+ :to => "bob@#{@domain}",
64
+ :subject => "Test",
65
+ :text => "Test Data" }
66
+
67
+ result = @mg_obj.send_message(@domain, data)
68
+
69
+ result.to_h!
70
+
71
+ expect(result.body).to include("message")
72
+ expect(result.body).to include("id")
73
+
74
+ expect(result.code).to eq(200)
75
+ expect(result.body['id']).to eq("test-mode-mail@localhost")
76
+ expect(result.body['message']).to eq("Queued. Thank you.")
77
+ end
78
+
32
79
  it 'sends a message builder message in test mode.' do
33
80
  mb_obj = Mailgun::MessageBuilder.new()
34
81
  mb_obj.from("sender@#{@domain}", {'first' => 'Sending', 'last' => 'User'})
@@ -25,9 +25,9 @@ describe 'The method send_message()' do
25
25
 
26
26
  it 'sends a message' do
27
27
  data = { 'from' => 'joe@test.com',
28
- 'to' => 'bob@example.com',
29
- 'subject' => 'Test',
30
- 'text' => 'Test Data'}
28
+ 'to' => 'bob@example.com',
29
+ 'subject' => 'Test',
30
+ 'text' => 'Test Data' }
31
31
  result = @mg_obj.send_message("testdomain.com", data)
32
32
 
33
33
  result.to_h!
@@ -42,7 +42,7 @@ describe 'The method send_message()' do
42
42
  result = @mg_obj.send_message("testdomain.com", data)
43
43
 
44
44
  result.to_h!
45
-
45
+
46
46
  expect(result.body).to include("message")
47
47
  expect(result.body).to include("id")
48
48
  end
@@ -61,7 +61,7 @@ describe 'The method post()' do
61
61
  result = @mg_obj.post("#{@domain}/messages", data)
62
62
 
63
63
  result.to_h!
64
-
64
+
65
65
  expect(result.body).to include("message")
66
66
  expect(result.body).to include("id")
67
67
  end
@@ -81,7 +81,7 @@ describe 'The method put()' do
81
81
  result = @mg_obj.put("lists/#{@list_address}/members#{@member_address}", data)
82
82
 
83
83
  result.to_h!
84
-
84
+
85
85
  expect(result.body).to include("member")
86
86
  expect(result.body["member"]).to include("vars")
87
87
  expect(result.body["member"]["vars"]).to include("age")
@@ -104,7 +104,7 @@ describe 'The method get()' do
104
104
  result = @mg_obj.get("#{@domain}/bounces", query_string)
105
105
 
106
106
  result.to_h!
107
-
107
+
108
108
  expect(result.body).to include("total_count")
109
109
  expect(result.body).to include("items")
110
110
  end
@@ -120,7 +120,7 @@ describe 'The method delete()' do
120
120
  result = @mg_obj.delete("#{@domain}/campaigns/ABC123")
121
121
 
122
122
  result.to_h!
123
-
123
+
124
124
  expect(result.body).to include("message")
125
125
  expect(result.body).to include("id")
126
126
  end
@@ -0,0 +1,45 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api:<APIKEY>@api.mailgun.net/v3/not-our-doma.in/messages
6
+ body:
7
+ encoding: UTF-8
8
+ string: from=sally%40not-our-doma.in&to=bob%40DOMAIN.TEST&subject=Exception+Integration+Test&text=INTEGRATION+TESTING
9
+ headers:
10
+ Accept:
11
+ - "*/*"
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - rest-client/2.0.0 (linux-gnu x86_64) ruby/2.3.1p112
16
+ Content-Length:
17
+ - '149'
18
+ Content-Type:
19
+ - application/x-www-form-urlencoded
20
+ Host:
21
+ - api.mailgun.net
22
+ response:
23
+ status:
24
+ code: 404
25
+ message: NOT FOUND
26
+ headers:
27
+ Server:
28
+ - nginx
29
+ Date:
30
+ - Wed, 02 Nov 2016 19:42:44 GMT
31
+ Content-Type:
32
+ - application/json
33
+ Content-Length:
34
+ - '52'
35
+ Connection:
36
+ - keep-alive
37
+ body:
38
+ encoding: UTF-8
39
+ string: |-
40
+ {
41
+ "message": "Domain not found: not-our-doma.in"
42
+ }
43
+ http_version:
44
+ recorded_at: Wed, 02 Nov 2016 19:43:40 GMT
45
+ recorded_with: VCR 3.0.3
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mailgun-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mailgun
@@ -9,118 +9,118 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-10-31 00:00:00.000000000 Z
12
+ date: 2016-11-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ~>
18
+ - - "~>"
19
19
  - !ruby/object:Gem::Version
20
20
  version: '1.5'
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ~>
25
+ - - "~>"
26
26
  - !ruby/object:Gem::Version
27
27
  version: '1.5'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rspec
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - ~>
32
+ - - "~>"
33
33
  - !ruby/object:Gem::Version
34
34
  version: '3.0'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ~>
39
+ - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: '3.0'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: rake
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ~>
46
+ - - "~>"
47
47
  - !ruby/object:Gem::Version
48
48
  version: '10.0'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ~>
53
+ - - "~>"
54
54
  - !ruby/object:Gem::Version
55
55
  version: '10.0'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: webmock
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - ~>
60
+ - - "~>"
61
61
  - !ruby/object:Gem::Version
62
62
  version: '1.22'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - ~>
67
+ - - "~>"
68
68
  - !ruby/object:Gem::Version
69
69
  version: '1.22'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: pry
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - ~>
74
+ - - "~>"
75
75
  - !ruby/object:Gem::Version
76
76
  version: '0.9'
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - ~>
81
+ - - "~>"
82
82
  - !ruby/object:Gem::Version
83
83
  version: '0.9'
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: vcr
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - ~>
88
+ - - "~>"
89
89
  - !ruby/object:Gem::Version
90
90
  version: '3.0'
91
91
  type: :development
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
- - - ~>
95
+ - - "~>"
96
96
  - !ruby/object:Gem::Version
97
97
  version: '3.0'
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: simplecov
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
- - - ~>
102
+ - - "~>"
103
103
  - !ruby/object:Gem::Version
104
104
  version: '0.11'
105
105
  type: :development
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
- - - ~>
109
+ - - "~>"
110
110
  - !ruby/object:Gem::Version
111
111
  version: '0.11'
112
112
  - !ruby/object:Gem::Dependency
113
113
  name: rest-client
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
- - - ~>
116
+ - - "~>"
117
117
  - !ruby/object:Gem::Version
118
118
  version: '2.0'
119
119
  type: :runtime
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
- - - ~>
123
+ - - "~>"
124
124
  - !ruby/object:Gem::Version
125
125
  version: '2.0'
126
126
  description: Mailgun's Official Ruby SDK for interacting with the Mailgun API.
@@ -129,11 +129,11 @@ executables: []
129
129
  extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
- - .gitignore
133
- - .rubocop.yml
134
- - .rubocop_todo.yml
135
- - .ruby-env.yml.example
136
- - .travis.yml
132
+ - ".gitignore"
133
+ - ".rubocop.yml"
134
+ - ".rubocop_todo.yml"
135
+ - ".ruby-env.yml.example"
136
+ - ".travis.yml"
137
137
  - Domains.md
138
138
  - Events.md
139
139
  - Gemfile
@@ -190,6 +190,7 @@ files:
190
190
  - vcr_cassettes/domains.yml
191
191
  - vcr_cassettes/email_validation.yml
192
192
  - vcr_cassettes/events.yml
193
+ - vcr_cassettes/exceptions.yml
193
194
  - vcr_cassettes/list_members.yml
194
195
  - vcr_cassettes/mailing_list.todo.yml
195
196
  - vcr_cassettes/mailing_list.yml
@@ -208,12 +209,12 @@ require_paths:
208
209
  - lib
209
210
  required_ruby_version: !ruby/object:Gem::Requirement
210
211
  requirements:
211
- - - ! '>='
212
+ - - ">="
212
213
  - !ruby/object:Gem::Version
213
214
  version: 2.0.0
214
215
  required_rubygems_version: !ruby/object:Gem::Requirement
215
216
  requirements:
216
- - - ! '>='
217
+ - - ">="
217
218
  - !ruby/object:Gem::Version
218
219
  version: '0'
219
220
  requirements: []