sendgrid-rails 1.0.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.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --colour
2
+ --format nested
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in send_grid.gemspec
4
+ gemspec
@@ -0,0 +1,61 @@
1
+ = SendGrid gem for Rails
2
+
3
+ SendGrid gem provides ActionMailer extensions to use SendGrid API features in you emails.
4
+ It extends ActionMailer with next methods:
5
+
6
+ add_recipients(array_of_emails)
7
+ substitute(patters_string, array_of_substitunion_strings)
8
+ uniq_args(hash_of_unique_args)
9
+ category(category_string)
10
+ add_filter_setting(filter_name, setting_name, value)
11
+
12
+ == Examples
13
+
14
+ === Rails 3 configuration
15
+
16
+ In your Gemfile:
17
+
18
+ gem 'sendgrid-rails', '>=1.0.0', :git => 'git://github.com/PavelTyk/sendgrid-rails.git'
19
+
20
+ In your config/environment.rb:
21
+
22
+ ActionMailer::Base.smtp_settings = {
23
+ :address => 'smtp.sendgrid.net',
24
+ :port => '25',
25
+ :domain => 'example.com',
26
+ :authentication => :plain,
27
+ :user_name => 'login@example.com',
28
+ :password => 'your password'
29
+ }
30
+
31
+ ==== Adding multiple recipients:
32
+
33
+ class Mailer < ActionMailer::Base
34
+ default :from => 'no-reply@example.com',
35
+ :subject => 'An email sent via SendGrid'
36
+
37
+ def email_with_multiple_recipients
38
+ add_recipients %w(email1@email.com email2@email.com)
39
+ mail :body => 'Hello.'
40
+ end
41
+ end
42
+
43
+ === Adding substitution vars
44
+
45
+ Mailer class definition:
46
+
47
+ class Mailer < ActionMailer::Base
48
+ default :from => 'no-reply@example.com',
49
+ :subject => 'An email sent via SendGrid with substitutions'
50
+
51
+ def mail_with_substitutions
52
+ emails = %w(email1@email.com email2@email.com)
53
+ names = %w(User1 User2)
54
+
55
+ add_recipients emails
56
+ substitute '-user_name-', names
57
+
58
+ mail :body => "Hello, -user_name-."
59
+ end
60
+ end
61
+
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,30 @@
1
+ module SendGrid
2
+ autoload :ApiHeader, 'send_grid/api_header'
3
+ autoload :VERSION, 'send_grid/version'
4
+
5
+ def self.included(base)
6
+ base.class_eval do
7
+ include InstanceMethods
8
+ delegate :add_recipients, :substitute, :uniq_args, :category, :add_filter_setting, :to => :send_grid_header
9
+ alias_method_chain :mail, :send_grid
10
+ end
11
+ end
12
+
13
+ module InstanceMethods
14
+ def send_grid_header
15
+ @send_grid_header ||= SendGrid::ApiHeader.new
16
+ end
17
+
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
26
+ mail_without_send_grid(headers, &block)
27
+ end
28
+ end
29
+ end
30
+
@@ -0,0 +1,35 @@
1
+ class SendGrid::ApiHeader
2
+ def initialize
3
+ @data = {}
4
+ end
5
+
6
+ def add_recipients(recipients)
7
+ @data[:to] ||= []
8
+ @data[:to] |= Array.wrap(recipients)
9
+ end
10
+
11
+ def substitute(var, val)
12
+ @data[:sub] ||= {}
13
+ @data[:sub][var] = Array.wrap(val)
14
+ end
15
+
16
+ def uniq_args(val)
17
+ @data[:unique_args] = val if val.instance_of?(Hash)
18
+ end
19
+
20
+ def category(cat)
21
+ @data[:category] = cat
22
+ end
23
+
24
+ def add_filter_setting(fltr, setting, val)
25
+ @data[:filters] ||= {}
26
+ @data[:filters][fltr] ||= {}
27
+ @data[:filters][fltr][:settings] ||= {}
28
+ @data[:filters][fltr][:settings][setting] = val
29
+ end
30
+
31
+ def to_json
32
+ @data.to_json
33
+ end
34
+ end
35
+
@@ -0,0 +1,4 @@
1
+ module SendGrid
2
+ VERSION = "1.0.0"
3
+ end
4
+
@@ -0,0 +1,5 @@
1
+ require 'send_grid'
2
+ autoload :ActionMailer, 'action_mailer'
3
+
4
+ ActionMailer::Base.send :include, SendGrid
5
+
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "send_grid/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "sendgrid-rails"
7
+ s.version = SendGrid::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["PavelTyk"]
10
+ s.email = ["paveltyk@gmail.com"]
11
+ s.homepage = "https://github.com/PavelTyk/sendgrid-rails"
12
+ s.summary = %q{SendGrid gem fo Rails 3}
13
+ s.description = %q{Gem to extend ActionMailer with SendGrid API support}
14
+
15
+ s.rubyforge_project = "sendgrid-rails"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+ s.add_development_dependency "rspec", "~> 2.5.0"
22
+ s.add_dependency "actionmailer", ">= 3.0.0"
23
+ s.add_dependency "activesupport", ">= 2.1.0"
24
+ end
25
+
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ describe SendGrid::ApiHeader do
4
+ let(:header) { SendGrid::ApiHeader.new }
5
+ describe "#to_json" do
6
+ it "returns valid json if no data was set" do
7
+ header.to_json.should eql "{}"
8
+ end
9
+
10
+ it "contains 1 recipient (as array)" do
11
+ header.add_recipients 'email@email.com'
12
+ header.to_json.should eql '{"to":["email@email.com"]}'
13
+ end
14
+
15
+ it "contaions an array of recipients" do
16
+ header.add_recipients %w(email1@email.com email2@email.com)
17
+ header.to_json.should eql '{"to":["email1@email.com","email2@email.com"]}'
18
+ end
19
+
20
+ it "contains substitution" do
21
+ header.substitute :var1, 'Hello'
22
+ header.to_json.should eql '{"sub":{"var1":["Hello"]}}'
23
+ end
24
+
25
+ it "contains uniq args" do
26
+ header.uniq_args :arg1 => 'val1'
27
+ header.to_json.should eql '{"unique_args":{"arg1":"val1"}}'
28
+ end
29
+
30
+ it "contains category" do
31
+ header.category 'category_name'
32
+ header.to_json.should eql '{"category":"category_name"}'
33
+ end
34
+
35
+ it "contains filter settings" do
36
+ header.add_filter_setting :filter1, :setting1, 'val1'
37
+ header.to_json.should eql '{"filters":{"filter1":{"settings":{"setting1":"val1"}}}}'
38
+ end
39
+ end
40
+ end
41
+
@@ -0,0 +1,10 @@
1
+ class Mailer < ActionMailer::Base
2
+ default :from => 'no-reply@sendgrid.com',
3
+ :subject => 'Test email'
4
+
5
+ def email_with_multiple_recipients(recipients)
6
+ add_recipients recipients
7
+ mail
8
+ end
9
+ end
10
+
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mailer do
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
+ it 'set correct recipients in X-SMTAPI header' do
9
+ mail.to_s.should include('X-SMTPAPI: {"to":["email1@email.com","email2@email.com"]}')
10
+ end
11
+
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']
17
+ end
18
+ end
19
+ end
20
+
@@ -0,0 +1,7 @@
1
+ require 'sendgrid-rails'
2
+
3
+ ActionMailer::Base.delivery_method = :test
4
+ ActionMailer::Base.prepend_view_path File.join(File.dirname(__FILE__), "fixtures", "views")
5
+
6
+ Dir["#{File.dirname(__FILE__)}/fixtures/mailers/*.rb"].each { |f| require f }
7
+
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'SendGrid::VERSION' do
4
+ it "returns string" do
5
+ SendGrid::VERSION.should be_an_instance_of(String)
6
+ end
7
+ end
8
+
metadata ADDED
@@ -0,0 +1,130 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sendgrid-rails
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease:
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 0
10
+ version: 1.0.0
11
+ platform: ruby
12
+ authors:
13
+ - PavelTyk
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-03-17 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rspec
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 27
30
+ segments:
31
+ - 2
32
+ - 5
33
+ - 0
34
+ version: 2.5.0
35
+ type: :development
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: actionmailer
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 7
46
+ segments:
47
+ - 3
48
+ - 0
49
+ - 0
50
+ version: 3.0.0
51
+ type: :runtime
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ name: activesupport
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ hash: 11
62
+ segments:
63
+ - 2
64
+ - 1
65
+ - 0
66
+ version: 2.1.0
67
+ type: :runtime
68
+ version_requirements: *id003
69
+ description: Gem to extend ActionMailer with SendGrid API support
70
+ email:
71
+ - paveltyk@gmail.com
72
+ executables: []
73
+
74
+ extensions: []
75
+
76
+ extra_rdoc_files: []
77
+
78
+ files:
79
+ - .gitignore
80
+ - .rspec
81
+ - Gemfile
82
+ - README.rdoc
83
+ - Rakefile
84
+ - lib/send_grid.rb
85
+ - lib/send_grid/api_header.rb
86
+ - lib/send_grid/version.rb
87
+ - lib/sendgrid-rails.rb
88
+ - send_grid.gemspec
89
+ - spec/api_header_spec.rb
90
+ - spec/fixtures/mailers/mailer.rb
91
+ - spec/fixtures/views/mailer/email_with_multiple_recipients.text.erb
92
+ - spec/mailer_spec.rb
93
+ - spec/spec_helper.rb
94
+ - spec/version_spec.rb
95
+ has_rdoc: true
96
+ homepage: https://github.com/PavelTyk/sendgrid-rails
97
+ licenses: []
98
+
99
+ post_install_message:
100
+ rdoc_options: []
101
+
102
+ require_paths:
103
+ - lib
104
+ required_ruby_version: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ hash: 3
110
+ segments:
111
+ - 0
112
+ version: "0"
113
+ required_rubygems_version: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ hash: 3
119
+ segments:
120
+ - 0
121
+ version: "0"
122
+ requirements: []
123
+
124
+ rubyforge_project: sendgrid-rails
125
+ rubygems_version: 1.5.0
126
+ signing_key:
127
+ specification_version: 3
128
+ summary: SendGrid gem fo Rails 3
129
+ test_files: []
130
+