mailgun-ruby 1.0.3 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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.