mailgun-ruby 1.0.3 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +8 -0
  4. data/.rubocop_todo.yml +22 -0
  5. data/.ruby-env.yml.example +12 -0
  6. data/.travis.yml +6 -12
  7. data/Domains.md +36 -0
  8. data/MessageBuilder.md +14 -14
  9. data/Messages.md +44 -30
  10. data/OptInHandler.md +34 -34
  11. data/README.md +74 -24
  12. data/Rakefile +22 -20
  13. data/Snippets.md +26 -26
  14. data/Webhooks.md +40 -0
  15. data/lib/mailgun.rb +26 -228
  16. data/lib/mailgun/chains.rb +16 -0
  17. data/lib/mailgun/client.rb +143 -0
  18. data/lib/mailgun/domains/domains.rb +84 -0
  19. data/lib/mailgun/events/events.rb +53 -35
  20. data/lib/mailgun/exceptions/exceptions.rb +43 -10
  21. data/lib/mailgun/lists/opt_in_handler.rb +18 -19
  22. data/lib/mailgun/messages/batch_message.rb +31 -48
  23. data/lib/mailgun/messages/message_builder.rb +160 -144
  24. data/lib/mailgun/response.rb +55 -0
  25. data/lib/mailgun/version.rb +2 -3
  26. data/lib/mailgun/webhooks/webhooks.rb +101 -0
  27. data/mailgun.gemspec +16 -10
  28. data/spec/integration/bounces_spec.rb +44 -0
  29. data/spec/integration/campaign_spec.rb +60 -0
  30. data/spec/integration/complaints_spec.rb +38 -0
  31. data/spec/integration/domains_spec.rb +39 -0
  32. data/spec/integration/email_validation_spec.rb +29 -0
  33. data/spec/integration/events_spec.rb +20 -0
  34. data/spec/integration/list_members_spec.rb +63 -0
  35. data/spec/integration/list_spec.rb +58 -0
  36. data/spec/integration/mailgun_spec.rb +26 -550
  37. data/spec/integration/routes_spec.rb +74 -0
  38. data/spec/integration/stats_spec.rb +15 -0
  39. data/spec/integration/unsubscribes_spec.rb +42 -0
  40. data/spec/integration/webhook_spec.rb +54 -0
  41. data/spec/spec_helper.rb +37 -7
  42. data/spec/unit/connection/test_client.rb +15 -95
  43. data/spec/unit/events/events_spec.rb +9 -6
  44. data/spec/unit/lists/opt_in_handler_spec.rb +6 -4
  45. data/spec/unit/mailgun_spec.rb +25 -19
  46. data/spec/unit/messages/batch_message_spec.rb +47 -38
  47. data/spec/unit/messages/message_builder_spec.rb +282 -111
  48. data/vcr_cassettes/bounces.yml +175 -0
  49. data/vcr_cassettes/complaints.yml +175 -0
  50. data/vcr_cassettes/domains.todo.yml +42 -0
  51. data/vcr_cassettes/domains.yml +360 -0
  52. data/vcr_cassettes/email_validation.yml +104 -0
  53. data/vcr_cassettes/events.yml +61 -0
  54. data/vcr_cassettes/list_members.yml +320 -0
  55. data/vcr_cassettes/mailing_list.todo.yml +43 -0
  56. data/vcr_cassettes/mailing_list.yml +390 -0
  57. data/vcr_cassettes/routes.yml +359 -0
  58. data/vcr_cassettes/send_message.yml +107 -0
  59. data/vcr_cassettes/stats.yml +44 -0
  60. data/vcr_cassettes/unsubscribes.yml +191 -0
  61. data/vcr_cassettes/webhooks.yml +276 -0
  62. metadata +114 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 523ed8383a3318e626e33482a72431daf0453235
4
- data.tar.gz: 67a635eb9b247d1fdaeaf2cb1e2944d2b85261d5
3
+ metadata.gz: 15c6226ce2745501543bd148db41a0297f2d58df
4
+ data.tar.gz: 2110bec8de2f21d49fee5d56ad41aef0d4fbc2b7
5
5
  SHA512:
6
- metadata.gz: 9f3a6cfd00e2c88bc755411b4953139bd6115062236904edce82334d495b7edc4e529ad01f8e0ed68e35974105d0763f6175dbb5da2be44deb7b488ccc7391ba
7
- data.tar.gz: df50ed26167e1cf88271ca954a0b084da8b135c006b2a27fe2050e3f10b7b795e6b4b283be159fbee0b5b8507aba899881e8d311ff670e18aba0523c275c0f7f
6
+ metadata.gz: 04f6a82d67c5d8cda08c7a38956edfab2ff28b9c16b9344fcee2e3ec3caf1e0e69f901797de3a98640a962af9c28fff58d7151deb3cffbc32bee740df48eb901
7
+ data.tar.gz: 4fc8aec4b0e5e5c100a707c3cf44151b9eb2fe1e1cd047bf0df3c0122c1443c9264e048d27fe65390e23a9718be2ce5ab8d6009deaaf7ec0f512e9a7217f3552
data/.gitignore CHANGED
@@ -18,3 +18,5 @@ tmp
18
18
  .DS_Store
19
19
  test.rb
20
20
  ruby
21
+ .ruby-env.yml
22
+ .rspec-local
@@ -0,0 +1,8 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ Metrics/LineLength:
4
+ Enabled: false
5
+ Style/EmptyLinesAroundModuleBody:
6
+ Enabled: false
7
+ Style/EmptyLinesAroundClassBody:
8
+ Enabled: false
@@ -0,0 +1,22 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2016-01-07 12:11:06 -0500 using RuboCop version 0.35.1.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 1
10
+ # Configuration parameters: CountComments.
11
+ Metrics/ClassLength:
12
+ Max: 169
13
+
14
+ # Offense count: 1
15
+ # Configuration parameters: CountComments.
16
+ Metrics/MethodLength:
17
+ Max: 14
18
+
19
+ # Offense count: 9
20
+ Style/AccessorMethodName:
21
+ Exclude:
22
+ - 'lib/mailgun/messages/message_builder.rb'
@@ -0,0 +1,12 @@
1
+ ---
2
+ # To assist with testing.
3
+ #
4
+ # DO NOT CHANGE AND COMMIT. YOU HAVE BEEN WARNED.
5
+ # Alternatively, use environment variables of the same.
6
+ #
7
+ # Replace <THESE_VALUES> with yours from
8
+ # https://mailgun.com/app/dashboard (don't include <brackets>)
9
+ # and rename to/save as: .ruby-env.yml
10
+ MAILGUN_APIKEY : '<MAILGUN_APIKEY'>
11
+ MAILGUN_PUB_APIKEY : '<MAILGUN_PUBLIC_APIKEY>'
12
+ MAILGUN_TESTDOMAIN : '<MAILGUN_SANDBOX_DOMAIN>'
@@ -1,15 +1,9 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
3
+ - 2.2
4
+ - 2.1
4
5
  - 2.0.0
5
- - 2.1.0
6
- - 2.1.1
7
- - 2.1.2
8
- - 2.1.3
9
- - 2.1.4
10
- - 2.1.5
11
- - 2.2.0-preview1
12
- gemfile:
13
- - Gemfile
14
- script:
15
- - bundle exec rake spec
6
+ - 1.9.3
7
+ sudo: false
8
+ gemfile: Gemfile
9
+ script: bundle exec rake spec
@@ -0,0 +1,36 @@
1
+ Mailgun - Domains
2
+ ====================
3
+
4
+ This is the Mailgun Ruby *Domain* utilities.
5
+
6
+ The below assumes you've already installed the Mailgun Ruby SDK in to your
7
+ project. If not, go back to the master README for instructions. It currently supports
8
+ all calls except credentials.
9
+
10
+ Usage - Domains
11
+ -----------------------
12
+
13
+ ```ruby
14
+ # First, instantiate the Mailgun Client with your API key
15
+ mg_client = Mailgun::Client.new('your-api-key')
16
+ domainer = Mailgun::Domains.new(mg_client)
17
+
18
+ # Get a list of current domains.
19
+ domainer.list
20
+
21
+ # View details of a domain
22
+ domainer.info 'my.perfect.domain'
23
+
24
+ # Add a new domain
25
+ domainer.create 'my.new.moreness'
26
+ # or with options
27
+ domainer.create 'my.new.moreness', { some: 'options' }
28
+
29
+ # Remove a domain
30
+ domainer.remove 'this.one.is.not.needed.'
31
+ ```
32
+
33
+ More Documentation
34
+ ------------------
35
+ See the official [Mailgun Domain Docs](https://documentation.mailgun.com/api-domains.html)
36
+ for more information
@@ -1,21 +1,21 @@
1
1
  Mailgun - Messages
2
2
  ====================
3
3
 
4
- This is the Mailgun Ruby *Message* utilities.
4
+ This is the Mailgun Ruby *Message* utilities.
5
5
 
6
6
  The below assumes you've already installed the Mailgun Gem. If not, go back to the master README for instructions.
7
7
 
8
- There are two utilities included, Message Builder and Batch Message.
8
+ There are two utilities included, Message Builder and Batch Message.
9
9
 
10
- Message Builder: Allows you to build a message object by calling methods for
11
- each attribute.
12
- Batch Message: Inherits Message Builder and allows you to iterate through
13
- recipients from a list. Messages will fire after the 1,000th recipient has been
14
- added.
10
+ Message Builder: Allows you to build a message object by calling methods for
11
+ each attribute.
12
+ Batch Message: Inherits Message Builder and allows you to iterate through
13
+ recipients from a list. Messages will fire after the 1,000th recipient has been
14
+ added.
15
15
 
16
16
  Usage - Message Builder
17
17
  -----------------------
18
- Here's how to use Message Builder to build your Message.
18
+ Here's how to use Message Builder to build your Message.
19
19
 
20
20
  ```ruby
21
21
  # First, instantiate the Mailgun Client with your API key
@@ -28,7 +28,7 @@ mb_obj.set_from_address("me@example.com", {"first"=>"Ruby", "last" => "SDK"});
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
- # Define the subject.
31
+ # Define the subject.
32
32
  mb_obj.set_subject("A message from the Ruby SDK using Message Builder!");
33
33
  # Define the body of the message.
34
34
  mb_obj.set_text_body("This is the text body of the message!");
@@ -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.set_delivery_time("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)
@@ -55,7 +55,7 @@ puts result.body.to_s
55
55
 
56
56
  Usage - Batch Message
57
57
  ---------------------
58
- Here's how to use Batch Message to easily handle batch sending jobs.
58
+ Here's how to use Batch Message to easily handle batch sending jobs.
59
59
 
60
60
  ```ruby
61
61
  # First, instantiate the Mailgun Client with your API key
@@ -65,7 +65,7 @@ mb_obj = Mailgun::BatchMessage.new(mg_client, "example.com")
65
65
 
66
66
  # Define the from address.
67
67
  mb_obj.set_from_address("me@example.com", {"first"=>"Ruby", "last" => "SDK"});
68
- # Define the subject.
68
+ # Define the subject.
69
69
  mb_obj.set_subject("A message from the Ruby SDK using Message Builder!");
70
70
  # Define the body of the message.
71
71
  mb_obj.set_text_body("This is the text body of the message!");
@@ -85,5 +85,5 @@ message_ids = mb_obj.finalize
85
85
 
86
86
  More Documentation
87
87
  ------------------
88
- See the official [Mailgun Docs](http://documentation.mailgun.com/api-sending.html)
89
- for more information.
88
+ See the official [Mailgun Docs](http://documentation.mailgun.com/api-sending.html)
89
+ for more information.
@@ -24,26 +24,36 @@ mg_client = Mailgun::Client.new("your-api-key")
24
24
  mb_obj = Mailgun::MessageBuilder.new
25
25
 
26
26
  # Define the from address.
27
- mb_obj.set_from_address("me@example.com", {"first"=>"Ruby", "last" => "SDK"});
27
+ mb_obj.set_from_address("me@example.com", {"first"=>"Ruby", "last" => "SDK"})
28
+
28
29
  # Define a to recipient.
29
- mb_obj.add_recipient(:to, "john.doe@example.com", {"first" => "John", "last" => "Doe"});
30
+ mb_obj.add_recipient(:to, "john.doe@example.com", {"first" => "John", "last" => "Doe"})
31
+
30
32
  # Define a cc recipient.
31
- mb_obj.add_recipient(:cc, "sally.doe@example.com", {"first" => "Sally", "last" => "Doe"});
33
+ mb_obj.add_recipient(:cc, "sally.doe@example.com", {"first" => "Sally", "last" => "Doe"})
34
+
32
35
  # Define the subject.
33
- mb_obj.set_subject("A message from the Ruby SDK using Message Builder!");
36
+ mb_obj.set_subject("A message from the Ruby SDK using Message Builder!")
37
+
34
38
  # Define the body of the message.
35
- mb_obj.set_text_body("This is the text body of the message!");
39
+ mb_obj.set_text_body("This is the text body of the message!")
40
+
41
+ # Define the HTML text of the message
42
+ mb_obj.set_html_body("<html><body><p>This is the text body of the message</p></body></html>")
43
+
36
44
  # Set the Message-Id header. Pass in a valid Message-Id.
37
45
  mb_obj.set_message_id("<20141014000000.11111.11111@example.com>")
46
+
38
47
  # Clear the Message-Id header. Pass in nil or empty string.
39
48
  mb_obj.set_message_id(nil)
40
49
  mb_obj.set_message_id('')
50
+
41
51
  # Other Optional Parameters.
42
- mb_obj.add_campaign_id("My-Awesome-Campaign");
43
- mb_obj.add_custom_parameter("h:Customer-Id", "12345");
44
- mb_obj.add_attachment("@/tron.jpg");
45
- mb_obj.set_delivery_time("tomorrow 8:00AM", "PST");
46
- mb_obj.set_click_tracking(true);
52
+ mb_obj.add_campaign_id("My-Awesome-Campaign")
53
+ mb_obj.add_custom_parameter("h:Customer-Id", "12345")
54
+ mb_obj.add_attachment("@/tron.jpg")
55
+ mb_obj.set_delivery_time("tomorrow 8:00AM PST")
56
+ mb_obj.set_click_tracking(true)
47
57
 
48
58
  # Send your message through the client
49
59
  mg_client.send_message("sending_domain.com", mb_obj)
@@ -59,29 +69,33 @@ mg_client = Mailgun::Client.new("your-api-key")
59
69
  mb_obj = Mailgun::BatchMessage.new(mg_client, "example.com")
60
70
 
61
71
  # Define the from address.
62
- mb_obj.set_from_address("me@example.com", {"first"=>"Ruby", "last" => "SDK"});
72
+ mb_obj.set_from_address("me@example.com", {"first"=>"Ruby", "last" => "SDK"})
73
+
63
74
  # Define the subject.
64
- mb_obj.set_subject("A message from the Ruby SDK using Message Builder!");
75
+ mb_obj.set_subject("A message from the Ruby SDK using Message Builder!")
76
+
65
77
  # Define the body of the message.
66
- mb_obj.set_text_body("Hello %recipient.first%,
67
- This is the text body of the message
78
+ mb_obj.set_text_body("Hello %recipient.first%,
79
+ This is the text body of the message
68
80
  using recipient variables!
69
- If you need to include custom data,
70
- you could do it like this: %account-id%.");
71
-
72
- mb_obj.add_recipient(:to, "john.doe@example.com", {"first" => "John",
73
- "last" => "Doe",
74
- "account-id" => 1234});
75
- mb_obj.add_recipient(:to, "jane.doe@example.com", {"first" => "Jane",
76
- "last" => "Doe",
77
- "account-id" => 5678});
78
- mb_obj.add_recipient(:to, "bob.doe@example.com", {"first" => "Bob",
79
- "last" => "Doe",
80
- "account-id" => 91011});
81
+ If you need to include custom data,
82
+ you could do it like this: %account-id%.")
83
+
84
+ mb_obj.add_recipient(:to, "john.doe@example.com", {"first" => "John",
85
+ "last" => "Doe",
86
+ "account-id" => 1234})
87
+
88
+ mb_obj.add_recipient(:to, "jane.doe@example.com", {"first" => "Jane",
89
+ "last" => "Doe",
90
+ "account-id" => 5678})
91
+
92
+ mb_obj.add_recipient(:to, "bob.doe@example.com", {"first" => "Bob",
93
+ "last" => "Doe",
94
+ "account-id" => 91011})
81
95
  ...
82
- mb_obj.add_recipient(:to, "sally.doe@example.com", {"first" => "Sally",
83
- "last" => "Doe",
84
- "account-id" => 121314});
96
+ mb_obj.add_recipient(:to, "sally.doe@example.com", {"first" => "Sally",
97
+ "last" => "Doe",
98
+ "account-id" => 121314})
85
99
 
86
100
  # Send your message through the client
87
101
  message_ids = mb_obj.finalize
@@ -89,5 +103,5 @@ message_ids = mb_obj.finalize
89
103
 
90
104
  More Documentation
91
105
  ------------------
92
- See the official [Mailgun Docs](http://documentation.mailgun.com/api-sending.html)
106
+ See the official [Mailgun Docs](https://documentation.mailgun.com/api-sending.html)
93
107
  for more information.
@@ -1,25 +1,25 @@
1
1
  Mailgun - Lists
2
2
  ====================
3
3
 
4
- This is the Mailgun Ruby *Lists* utilities.
4
+ This is the Mailgun Ruby *Lists* utilities.
5
5
 
6
- The below assumes you've already installed the Mailgun Ruby SDK in your project.
6
+ The below assumes you've already installed the Mailgun Ruby SDK in your project.
7
7
  If not, go back to the master README for a few quick install steps.
8
8
 
9
- OptInHandler: Provides methods for authenticating an Opt-In Request.
9
+ OptInHandler: Provides methods for authenticating an Opt-In Request.
10
10
 
11
- The typical flow for using this utility would be as follows:
12
- **Recipient Requests Subscribe** -> [Validate Recipient Address] -> [Generate Opt-In Link] -> [Email Recipient Opt-In Link]
13
- **Recipient Clicks Opt-In Link** -> [Validate Opt-In Link] -> [Subscribe User] -> [Send final confirmation]
11
+ The typical flow for using this utility would be as follows:
12
+ **Recipient Requests Subscribe** -> [Validate Recipient Address] -> [Generate Opt-In Link] -> [Email Recipient Opt-In Link]
13
+ **Recipient Clicks Opt-In Link** -> [Validate Opt-In Link] -> [Subscribe User] -> [Send final confirmation]
14
14
 
15
15
  The above flow is modeled below.
16
16
 
17
17
  Usage - Opt-In Handler (Recipient Requests Subscribe)
18
18
  -----------------------------------------------------
19
- Here's how to use Opt-In Handler to validate Opt-In requests.
19
+ Here's how to use Opt-In Handler to validate Opt-In requests.
20
20
 
21
21
  ```ruby
22
- # First, instantiate the SDK with your API credentials, domain, and required parameters for example.
22
+ # First, instantiate the SDK with your API credentials, domain, and required parameters for example.
23
23
  mg_client = Mailgun::Client.new("your-api-key")
24
24
  mg_validate = Mailgun::Client.new("your-pub-api-key")
25
25
 
@@ -31,22 +31,23 @@ recipient_address = 'recipient@example.com';
31
31
 
32
32
  # Let's validate the customer's email address, using Mailgun's validation endpoint.
33
33
  result = mg_validate.get('address/validate', {:address => recipient_address});
34
+ body = JSON.parse(result.body)
34
35
 
35
- if result[:body]["is_valid"] == true
36
+ if body['is_valid'] == true
36
37
  # Next, generate a hash.
37
38
  generated_hash = Mailgun::OptInHandler.generate_hash(mailing_list, secret_app_id, recipient_address);
38
39
 
39
40
  # Now, let's send a confirmation to the recipient with our link.
40
- mg_client.send_message(domain, {:from => 'bob@example.com',
41
- :to => recipient_address,
42
- :subject => 'Please Confirm!',
43
- :html => "<html><body>Hello,<br><br>You have requested to be subscribed
44
- to the mailing list #{mailing_list}. Please <a
41
+ mg_client.send_message(domain, {:from => 'bob@example.com',
42
+ :to => recipient_address,
43
+ :subject => 'Please Confirm!',
44
+ :html => "<html><body>Hello,<br><br>You have requested to be subscribed
45
+ to the mailing list #{mailing_list}. Please <a
45
46
  href=\"http://yourdomain.com/subscribe.php?hash=#{generated_hash}\">
46
47
  confirm</a> your subscription.<br><br>Thank you!</body></html>"});
47
48
 
48
49
  # Finally, let's add the subscriber to a Mailing List, as unsubscribed, so we can track non-conversions.
49
- mg_client.post("lists/#{mailing_list}/members", {:address => recipient_address,
50
+ mg_client.post("lists/#{mailing_list}/members", {:address => recipient_address,
50
51
  :subscribed => 'no',
51
52
  :upsert => 'yes'});
52
53
  end
@@ -54,10 +55,10 @@ end
54
55
 
55
56
  Usage - Opt-In Handler (Recipient Clicks Opt In Link)
56
57
  -----------------------------------------------------
57
- Here's how to use Opt-In Handler to validate an Opt-In Hash.
58
+ Here's how to use Opt-In Handler to validate an Opt-In Hash.
58
59
 
59
60
  ```ruby
60
- # First, instantiate the SDK with your API credentials and domain.
61
+ # First, instantiate the SDK with your API credentials and domain.
61
62
  mg_client = Mailgun::Client.new("your-api-key")
62
63
  domain = 'example.com';
63
64
 
@@ -69,35 +70,34 @@ if !hash_validation.nil?
69
70
  validated_list = hash_validation['mailing_list'];
70
71
  validated_recipient = hash_validation['recipient_address'];
71
72
 
72
- mg_client.put("lists/#{validated_list}/members/#{validated_recipient}",
73
- {:address => validated_recipient,
73
+ mg_client.put("lists/#{validated_list}/members/#{validated_recipient}",
74
+ {:address => validated_recipient,
74
75
  :subscribed => 'yes'})
75
76
 
76
- mg_client.send_message(domain, {:from => 'bob@example.com',
77
- :to => validated_recipient,
78
- :subject => 'Confirmation Received!',
77
+ mg_client.send_message(domain, {:from => 'bob@example.com',
78
+ :to => validated_recipient,
79
+ :subject => 'Confirmation Received!',
79
80
  :html => "<html><body>Hello,<br><br>We've successfully subscribed you to the list, #{validated_list}!<br><br>Thank you!
80
- </body></html>"));
81
+ </body></html>"});
81
82
  end
82
83
  ```
83
84
 
84
- A few notes:
85
- 1. 'secret_app_id' can be anything. It's used as the *key* in hashing,
86
- since your email address will vary. It should be secured like a password.
87
- 2. validateHash will return an array containing the recipient address and list
88
- address.
89
- 3. You should *always* send an email confirmation before and after the
90
- subscription request. This is what double-opt in means.
85
+ A few notes:
86
+ 1. 'secret_app_id' can be anything. It's used as the *key* in hashing,
87
+ since your email address will vary. It should be secured like a password.
88
+ 2. validateHash will return an array containing the recipient address and list
89
+ address.
90
+ 3. You should *always* send an email confirmation before and after the
91
+ subscription request. This is what double-opt in means.
91
92
 
92
93
 
93
94
  Available Functions
94
95
  -----------------------------------------------------
95
96
 
96
- `string generate_hash(string mailing_list, string secret_app_id, string recipient_address)`
97
+ `string generate_hash(string mailing_list, string secret_app_id, string recipient_address)`
97
98
 
98
- `array validate_hash(string secret_app_id, string unique_hash)`
99
+ `array validate_hash(string secret_app_id, string unique_hash)`
99
100
 
100
101
  More Documentation
101
102
  ------------------
102
- See the official [Mailgun Docs](http://documentation.mailgun.com/api-sending.html)
103
- for more information.
103
+ See the official [Mailgun Docs](https://documentation.mailgun.com/api-sending.html) for more information.
data/README.md CHANGED
@@ -6,8 +6,7 @@ Mailgun-Ruby
6
6
  This is the Mailgun Ruby Library. This library contains methods for easily interacting
7
7
  with the Mailgun API.
8
8
  Below are examples to get you started. For additional examples, please see our
9
- official documentation
10
- at http://documentation.mailgun.com
9
+ official documentation at https://documentation.mailgun.com
11
10
 
12
11
  Installation
13
12
  ------------
@@ -20,7 +19,7 @@ gem install mailgun-ruby
20
19
  Gemfile:
21
20
 
22
21
  ```ruby
23
- gem 'mailgun-ruby', '~>1.0.3', require: 'mailgun'
22
+ gem 'mailgun-ruby', '~>1.0.5', require: 'mailgun'
24
23
  ```
25
24
 
26
25
  Include
@@ -36,31 +35,44 @@ Here's how to send a message using the library:
36
35
 
37
36
  ```ruby
38
37
  # First, instantiate the Mailgun Client with your API key
39
- mg_client = Mailgun::Client.new "your-api-key"
38
+ mg_client = Mailgun::Client.new 'your-api-key'
40
39
 
41
40
  # Define your message parameters
42
- message_params = {:from => 'bob@sending_domain.com',
43
- :to => 'sally@example.com',
44
- :subject => 'The Ruby SDK is awesome!',
45
- :text => 'It is really easy to send a message!'}
41
+ message_params = { from: 'bob@sending_domain.com',
42
+ to: 'sally@example.com',
43
+ subject: 'The Ruby SDK is awesome!',
44
+ text: 'It is really easy to send a message!'
45
+ }
46
46
 
47
47
  # Send your message through the client
48
- mg_client.send_message "sending_domain.com", message_params
48
+ mg_client.send_message 'sending_domain.com', message_params
49
49
  ```
50
50
 
51
51
  Or obtain the last couple log items:
52
52
 
53
53
  ```ruby
54
54
  # First, instantiate the Mailgun Client with your API key
55
- mg_client = Mailgun::Client.new "your-api-key"
55
+ mg_client = Mailgun::Client.new 'your-api-key'
56
56
 
57
57
  # Define the domain you wish to query
58
- domain = "example.com"
58
+ domain = 'example.com'
59
59
 
60
60
  # Issue the get request
61
61
  result = mg_client.get("#{domain}/events", {:event => 'delivered'})
62
62
  ```
63
63
 
64
+ Rails
65
+ -----
66
+
67
+ The library can be initialized with a Rails initializer containing similar:
68
+ ```ruby
69
+ Mailgun.configure do |config|
70
+ config.api_key = 'your-secret-key'
71
+ end
72
+ ```
73
+ Or have the initializer read your environment setting if you perfer.
74
+
75
+
64
76
  Response
65
77
  --------
66
78
 
@@ -84,12 +96,14 @@ Here's an example, breaking out the response:
84
96
  ```ruby
85
97
  mg_client = Mailgun::Client.new("your-api-key")
86
98
 
87
- message_params = {:from => 'bob@example.com',
88
- :to => 'sally@example.com',
89
- :subject => 'The Ruby SDK is awesome!',
90
- :text => 'It is really easy to send a message!'}
99
+ message_params = {
100
+ from: 'bob@example.com',
101
+ to: 'sally@example.com',
102
+ subject: 'The Ruby SDK is awesome!',
103
+ text: 'It is really easy to send a message!'
104
+ }
91
105
 
92
- result = mg_client.send_message("example.com", message_params).to_h!
106
+ result = mg_client.send_message('example.com', message_params).to_h!
93
107
 
94
108
  message_id = result['id']
95
109
  message = result['message']
@@ -110,17 +124,19 @@ Go to http://bin.mailgun.net. The Postbin will generate a special URL. Save that
110
124
 
111
125
  **Step 2 - Instantiate the Mailgun client using Postbin.**
112
126
 
113
- *Tip: The bin id will be the URL part after bin.mailgun.net. It will be random generated letters and numbers. For example, the bin id in this URL, http://bin.mailgun.net/aecf68de, is "aecf68de".*
127
+ *Tip: The bin id will be the URL part after bin.mailgun.net. It will be random generated letters and numbers.
128
+ For example, the bin id in this URL, http://bin.mailgun.net/aecf68de, is "aecf68de".*
114
129
 
115
130
  ```ruby
116
131
  # First, instantiate the Mailgun Client with your API key
117
132
  mg_client = Mailgun::Client.new("your-api-key", "bin.mailgun.net", "aecf68de", ssl = false)
118
133
 
119
134
  # Define your message parameters
120
- message_params = {:from => 'bob@sending_domain.com',
121
- :to => 'sally@example.com',
122
- :subject => 'The Ruby SDK is awesome!',
123
- :text => 'It is really easy to send a message!'}
135
+ message_params = { from: 'bob@sending_domain.com',
136
+ to: 'sally@example.com',
137
+ subject: 'The Ruby SDK is awesome!',
138
+ text: 'It is really easy to send a message!'
139
+ }
124
140
 
125
141
  # Send your message through the client
126
142
  mg_client.send_message("sending_domain.com", message_params)
@@ -129,8 +145,13 @@ mg_client.send_message("sending_domain.com", message_params)
129
145
  For usage examples on each API endpoint, head over to our official documentation
130
146
  pages. Or the [Snippets](Snippets.md) file.
131
147
 
132
- This SDK includes a [Message Builder](Messages.md),
133
- [Batch Message](Messages.md), [Opt-In Handler](OptInHandler.md) and [Events](Events.md) component.
148
+ This SDK includes the following components:
149
+ - [Message Builder](Messages.md)
150
+ - [Batch Message](Messages.md)
151
+ - [Opt-In Handler](OptInHandler.md)
152
+ - [Domains](Domains.md)
153
+ - [Webhooks](Webhooks.md)
154
+ - [Events](Events.md)
134
155
 
135
156
  Message Builder allows you to quickly create the array of parameters, required
136
157
  to send a message, by calling a methods for each parameter.
@@ -138,11 +159,40 @@ Batch Message is an extension of Message Builder, and allows you to easily send
138
159
  a batch message job within a few seconds. The complexity of
139
160
  batch messaging is eliminated!
140
161
 
162
+ Testing
163
+ -------
164
+
165
+ There are unit tests and integration tests. Unit tests do not require Mailgun account keys. Integration tests do.
166
+ By default:
167
+ ```
168
+ bundle exec rake spec
169
+ ```
170
+ will run just unit tests. To run integration tests:
171
+ ```
172
+ bundle exec rake spec:integration
173
+ ```
174
+ will run just integration tests.
175
+ ```
176
+ bundle exec rake spec:all
177
+ ```
178
+ will run all both types.
179
+
180
+ Integrations tests will run against [VCR](https://github.com/vcr/vcr) cassettes if they exist.
181
+ If you'd like to run tests against your mailgun account, remove the cassettes.
182
+
183
+ To set up Mailgun key information. See the example file: .ruby-env.yml.example.
184
+ Rename this file to .ruby-env.yml and replace the items between the <> (including the <>) with the private
185
+ and public keys, and sandbox domain. Alternatively use a different domain registered in Mailgun if you
186
+ have one you want to test against.
187
+
188
+ The MAILGUN_* variables in .ruby-env.yml(.example) can also be set as
189
+ environment variables, if you'd like to do that instead.
190
+
141
191
  Support and Feedback
142
192
  --------------------
143
193
 
144
194
  Be sure to visit the Mailgun official
145
- [documentation website](http://documentation.mailgun.com/) for additional
195
+ [documentation website](https://documentation.mailgun.com/) for additional
146
196
  information about our API.
147
197
 
148
198
  If you find a bug, please submit the issue in Github directly.