sendgrid-rails 1.1.1 → 2.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,4 +1,5 @@
1
1
  *.gem
2
2
  .bundle
3
+ .rvmrc
3
4
  Gemfile.lock
4
5
  pkg/*
data/README.rdoc CHANGED
@@ -1,9 +1,8 @@
1
1
  = SendGrid gem for Rails
2
2
 
3
- SendGrid gem provides ActionMailer extensions to use SendGrid API features in you emails.
3
+ SendGrid gem provides ActionMailer::Base extensions to use SendGrid API features in you emails.
4
4
  It extends ActionMailer with next methods:
5
5
 
6
- add_recipients(array_of_emails)
7
6
  substitute(patters_string, array_of_substitunion_strings)
8
7
  uniq_args(hash_of_unique_args)
9
8
  category(category_string)
@@ -14,10 +13,12 @@ It extends ActionMailer with next methods:
14
13
 
15
14
  In your Gemfile:
16
15
 
17
- gem 'sendgrid-rails', '>=1.0.0'
16
+ gem 'sendgrid-rails', '~> 2.0'
18
17
 
19
18
  In your config/environment.rb:
20
19
 
20
+ ActionMailer::Base.register_interceptor(SendGrid::MailInterceptor)
21
+
21
22
  ActionMailer::Base.smtp_settings = {
22
23
  :address => 'smtp.sendgrid.net',
23
24
  :port => '25',
@@ -36,8 +37,7 @@ In your config/environment.rb:
36
37
  :subject => 'An email sent via SendGrid'
37
38
 
38
39
  def email_with_multiple_recipients
39
- add_recipients %w(email1@email.com email2@email.com)
40
- mail
40
+ mail :to => %w(email1@email.com email2@email.com)
41
41
  end
42
42
  end
43
43
 
@@ -50,13 +50,26 @@ Mailer class definition:
50
50
  :subject => 'An email sent via SendGrid with substitutions'
51
51
 
52
52
  def email_with_substitutions
53
- add_recipients %w(email1@email.com email2@email.com)
54
53
  substitute '-user_name-', %w(User1 User2)
55
54
 
56
- mail :body => "Hello, -user_name-!"
55
+ mail :to => %w(email1@email.com email2@email.com), :body => "Hello, -user_name-!"
57
56
  end
58
57
  end
59
58
 
59
+ === Adding category
60
+
61
+ Mailer class definition:
62
+
63
+ class Mailer < ActionMailer::Base
64
+ default :from => 'no-reply@example.com',
65
+ :subject => 'An email sent via SendGrid with substitutions'
66
+
67
+ def email_with_category
68
+ category 'SendGridRocks'
69
+ mail :to => 'email1@email.com'
70
+ end
71
+ end
72
+
60
73
  == Apps (formerly called Filters)
61
74
 
62
75
  Apps can be applied to any of your email messages and can be configured through SendGrid gem.
@@ -75,3 +88,10 @@ Add an invisible image at the end of the email to track e-mail opens. If the ema
75
88
  end
76
89
  end
77
90
 
91
+ == Change log
92
+
93
+ *v2.0*
94
+
95
+ * Using mail interceptor
96
+ * ActionMailer::Base#add_recipients - removed
97
+ * Standard SMTP To attribute get nullified after recipients added to X-SMTPAPI header
data/Rakefile CHANGED
@@ -1,2 +1,5 @@
1
1
  require 'bundler'
2
+ require 'rspec/core/rake_task'
2
3
  Bundler::GemHelper.install_tasks
4
+ RSpec::Core::RakeTask.new(:spec)
5
+ task :default => :spec
@@ -0,0 +1,10 @@
1
+ module SendGrid
2
+ class MailInterceptor
3
+ def self.delivering_email(mail)
4
+ sendgrid_header = mail.instance_variable_get(:@sendgrid_header)
5
+ sendgrid_header.add_recipients(mail.to)
6
+ mail.header['X-SMTPAPI'] = sendgrid_header.to_json if sendgrid_header.data.present?
7
+ mail.header['to'] = nil
8
+ end
9
+ end
10
+ end
@@ -1,4 +1,4 @@
1
1
  module SendGrid
2
- VERSION = "1.1.1"
2
+ VERSION = "2.0"
3
3
  end
4
4
 
data/lib/send_grid.rb CHANGED
@@ -1,12 +1,14 @@
1
1
  module SendGrid
2
2
  autoload :ApiHeader, 'send_grid/api_header'
3
+ autoload :MailInterceptor, 'send_grid/mail_interceptor'
3
4
  autoload :VERSION, 'send_grid/version'
4
5
 
5
6
  def self.included(base)
6
7
  base.class_eval do
7
8
  include InstanceMethods
8
- delegate :add_recipients, :substitute, :uniq_args, :category, :add_filter_setting, :to => :send_grid_header
9
- alias_method_chain :mail, :send_grid
9
+ delegate :substitute, :uniq_args, :category, :add_filter_setting, :to => :sendgrid_header
10
+ alias_method_chain :mail, :sendgrid
11
+ alias_method :sendgrid_header, :send_grid_header
10
12
  end
11
13
  end
12
14
 
@@ -15,15 +17,10 @@ module SendGrid
15
17
  @send_grid_header ||= SendGrid::ApiHeader.new
16
18
  end
17
19
 
18
- def send_grid_stub_for_recipient_email
19
- smtp_domain = self.class.smtp_settings[:domain]
20
- self.class.smtp_settings[:user_name] || "group-delivery@#{smtp_domain}"
21
- end
22
-
23
- def mail_with_send_grid(headers={}, &block)
24
- headers[:to] ||= send_grid_stub_for_recipient_email
25
- headers['X-SMTPAPI'] = send_grid_header.to_json if send_grid_header.data.present?
26
- mail_without_send_grid(headers, &block)
20
+ def mail_with_sendgrid(headers={}, &block)
21
+ mail_without_sendgrid(headers, &block).tap do |message|
22
+ message.instance_variable_set :@sendgrid_header, sendgrid_header
23
+ end
27
24
  end
28
25
 
29
26
  def open_tracking(enabled = true)
@@ -31,4 +28,3 @@ module SendGrid
31
28
  end
32
29
  end
33
30
  end
34
-
@@ -1,5 +1,6 @@
1
1
  require 'send_grid'
2
+ require 'active_support'
3
+ require 'active_support/core_ext'
2
4
  autoload :ActionMailer, 'action_mailer'
3
5
 
4
6
  ActionMailer::Base.send :include, SendGrid
5
-
@@ -3,8 +3,7 @@ class Mailer < ActionMailer::Base
3
3
  :subject => 'Test email'
4
4
 
5
5
  def email_with_multiple_recipients(recipients)
6
- add_recipients recipients
7
- mail :body => "Hello!"
6
+ mail :to => recipients, :body => "Hello!"
8
7
  end
9
8
 
10
9
  def email_open_tracking(opentrack_enabled = true)
data/spec/mailer_spec.rb CHANGED
@@ -2,34 +2,31 @@ require 'spec_helper'
2
2
 
3
3
  describe Mailer do
4
4
  describe 'email with multiple recipients' do
5
- let(:recipients) { %w(email1@email.com email2@email.com) }
6
- let(:mail) { Mailer.email_with_multiple_recipients recipients }
7
-
8
5
  it 'set correct recipients in X-SMTAPI header' do
9
- mail.to_s.should include('X-SMTPAPI: {"to":["email1@email.com","email2@email.com"]}')
6
+ Mailer.email_with_multiple_recipients(%w(em1@email.com em2@email.com)).deliver.header.to_s.
7
+ should include('X-SMTPAPI: {"to":["em1@email.com","em2@email.com"]}')
10
8
  end
11
9
 
12
- # Send Grid will ignore this attr any way, but ActionMailer will raise error
13
- # if :to attr is blank
14
- it 'set default :to header if it was nil' do
15
- ActionMailer::Base.smtp_settings = { :domain => 'sendgrid.com' }
16
- mail.to.should eq ['group-delivery@sendgrid.com']
10
+ it 'removes original TO header part' do
11
+ Mailer.email_with_multiple_recipients(%w(em1@email.com em2@email.com)).deliver.header.to_s.
12
+ should_not include("To: em1@email.com")
17
13
  end
18
14
  end
19
15
 
20
16
  describe '#open_tracking' do
21
-
22
17
  it 'set correct open tracking enabled X-SMTAPI header' do
23
- Mailer.email_open_tracking.to_s.should include('X-SMTPAPI: {"filters":{"opentrack":{"settings":{"enabled":1}}}}')
18
+ Mailer.email_open_tracking.deliver.header.to_s.
19
+ should include('"filters":{"opentrack":{"settings":{"enabled":1}}}')
24
20
  end
25
21
 
26
22
  it 'set correct open tracking disabled X-SMTAPI header' do
27
- Mailer.email_open_tracking(false).to_s.should include('X-SMTPAPI: {"filters":{"opentrack":{"settings":{"enabled":0}}}}')
23
+ Mailer.email_open_tracking(false).deliver.header.to_s.
24
+ should include('"filters":{"opentrack":{"settings":{"enabled":0}}}')
28
25
  end
29
26
 
30
27
  it 'set correct open tracking nil X-SMTAPI header' do
31
- Mailer.email_open_tracking(nil).to_s.should_not include('X-SMTPAPI: {"filters":{"opentrack')
28
+ Mailer.email_open_tracking(nil).deliver.header.to_s.
29
+ should_not include('"filters":{"opentrack')
32
30
  end
33
31
  end
34
32
  end
35
-
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'sendgrid-rails'
2
2
 
3
+ ActionMailer::Base.register_interceptor(SendGrid::MailInterceptor)
3
4
  ActionMailer::Base.delivery_method = :test
4
5
  ActionMailer::Base.prepend_view_path File.join(File.dirname(__FILE__), "fixtures", "views")
5
6
 
6
7
  Dir["#{File.dirname(__FILE__)}/fixtures/mailers/*.rb"].each { |f| require f }
7
-
metadata CHANGED
@@ -1,81 +1,56 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: sendgrid-rails
3
- version: !ruby/object:Gem::Version
4
- hash: 17
3
+ version: !ruby/object:Gem::Version
4
+ version: '2.0'
5
5
  prerelease:
6
- segments:
7
- - 1
8
- - 1
9
- - 1
10
- version: 1.1.1
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - PavelTyk
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-04-05 00:00:00 +03:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2012-01-11 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: rspec
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70309266084920 !ruby/object:Gem::Requirement
25
17
  none: false
26
- requirements:
18
+ requirements:
27
19
  - - ~>
28
- - !ruby/object:Gem::Version
29
- hash: 27
30
- segments:
31
- - 2
32
- - 5
33
- - 0
20
+ - !ruby/object:Gem::Version
34
21
  version: 2.5.0
35
22
  type: :development
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: actionmailer
39
23
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70309266084920
25
+ - !ruby/object:Gem::Dependency
26
+ name: actionmailer
27
+ requirement: &70309266079020 !ruby/object:Gem::Requirement
41
28
  none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- hash: 7
46
- segments:
47
- - 3
48
- - 0
49
- - 0
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
50
32
  version: 3.0.0
51
33
  type: :runtime
52
- version_requirements: *id002
53
- - !ruby/object:Gem::Dependency
54
- name: activesupport
55
34
  prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *70309266079020
36
+ - !ruby/object:Gem::Dependency
37
+ name: activesupport
38
+ requirement: &70309266078560 !ruby/object:Gem::Requirement
57
39
  none: false
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- hash: 11
62
- segments:
63
- - 2
64
- - 1
65
- - 0
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
66
43
  version: 2.1.0
67
44
  type: :runtime
68
- version_requirements: *id003
45
+ prerelease: false
46
+ version_requirements: *70309266078560
69
47
  description: Gem to extend ActionMailer with SendGrid API support
70
- email:
48
+ email:
71
49
  - paveltyk@gmail.com
72
50
  executables: []
73
-
74
51
  extensions: []
75
-
76
52
  extra_rdoc_files: []
77
-
78
- files:
53
+ files:
79
54
  - .gitignore
80
55
  - .rspec
81
56
  - Gemfile
@@ -83,6 +58,7 @@ files:
83
58
  - Rakefile
84
59
  - lib/send_grid.rb
85
60
  - lib/send_grid/api_header.rb
61
+ - lib/send_grid/mail_interceptor.rb
86
62
  - lib/send_grid/version.rb
87
63
  - lib/sendgrid-rails.rb
88
64
  - send_grid.gemspec
@@ -91,39 +67,33 @@ files:
91
67
  - spec/mailer_spec.rb
92
68
  - spec/spec_helper.rb
93
69
  - spec/version_spec.rb
94
- has_rdoc: true
95
70
  homepage: https://github.com/PavelTyk/sendgrid-rails
96
71
  licenses: []
97
-
98
72
  post_install_message:
99
73
  rdoc_options: []
100
-
101
- require_paths:
74
+ require_paths:
102
75
  - lib
103
- required_ruby_version: !ruby/object:Gem::Requirement
76
+ required_ruby_version: !ruby/object:Gem::Requirement
104
77
  none: false
105
- requirements:
106
- - - ">="
107
- - !ruby/object:Gem::Version
108
- hash: 3
109
- segments:
110
- - 0
111
- version: "0"
112
- required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
83
  none: false
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- hash: 3
118
- segments:
119
- - 0
120
- version: "0"
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
121
88
  requirements: []
122
-
123
89
  rubyforge_project: sendgrid-rails
124
- rubygems_version: 1.5.0
90
+ rubygems_version: 1.8.10
125
91
  signing_key:
126
92
  specification_version: 3
127
93
  summary: SendGrid gem fo Rails 3
128
- test_files: []
129
-
94
+ test_files:
95
+ - spec/api_header_spec.rb
96
+ - spec/fixtures/mailers/mailer.rb
97
+ - spec/mailer_spec.rb
98
+ - spec/spec_helper.rb
99
+ - spec/version_spec.rb