kusor-sinatra_mailer 0.9.3

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.
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 Nicolás Sanguinetti
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.markdown ADDED
@@ -0,0 +1,87 @@
1
+ Sinatra::Mailer
2
+ ===============
3
+
4
+ Adds an `email` method to your email handlers, that receives a hash of values
5
+ to create your email.
6
+
7
+ For example:
8
+
9
+ post "/signup" do
10
+ # sign up the user, and then:
11
+ email :to => @user.email,
12
+ :from => "awesomeness@example.com",
13
+ :subject => "Welcome to Awesomeness!",
14
+ :body => haml(:some_template)
15
+ end
16
+
17
+ Usage
18
+ =====
19
+
20
+
21
+ Classic top-level Sinatra style applications
22
+ --------------------------------------------
23
+
24
+ require 'sinatra/mailer'
25
+
26
+ Modular Sinatra style applications
27
+ --------------------------------------------
28
+
29
+ require 'sinatra/mailer'
30
+
31
+ class MyModularApp < Sinatra::Base
32
+ register Sinatra::Mailer
33
+ end
34
+
35
+ Configuration
36
+ =============
37
+
38
+ This plugin is very dirty yet :) Since it's just a port to Sinatra of
39
+ [Merb::Mailer][merb-mailer]. So the configuration is not Sinatra-y, yet.
40
+ But we'll get to that.
41
+
42
+ Using SMTP
43
+ ----------
44
+
45
+ Sinatra::Mailer.config = {
46
+ :host => 'smtp.yourserver.com',
47
+ :port => '25',
48
+ :user => 'user',
49
+ :pass => 'pass',
50
+ :auth => :plain # :plain, :login, :cram_md5, the default is no auth
51
+ :domain => "localhost.localdomain" # the HELO domain provided by the client to the server
52
+ }
53
+
54
+ Using Gmail SMTP
55
+ ----------------
56
+
57
+ You need [smtp-tls][], a gem that improves `net/smtp` to add support for secure
58
+ servers such as Gmail.
59
+
60
+ require "smtp-tls"
61
+
62
+ Sinatra::Mailer.config = {
63
+ :host => 'smtp.gmail.com',
64
+ :port => '587',
65
+ :user => 'user@gmail.com',
66
+ :pass => 'pass',
67
+ :auth => :plain
68
+ }
69
+
70
+ Make sure that when you call your `email` method you pass the `:text` option
71
+ and not `:body`.
72
+
73
+ Using sendmail
74
+ --------------
75
+
76
+ Sinatra::Mailer.config = {:sendmail_path => '/somewhere/odd', :arguments => '-i -t'}
77
+ Sinatra::Mailer.delivery_method = :sendmail
78
+
79
+ Credits
80
+ =======
81
+
82
+ This has been blatantly adapted from [Merb::Mailer][merb-mailer], so all credit
83
+ is theirs, I just ported it to [Sinatra][Sinatra].
84
+
85
+ [merb-mailer]: http://github.com/wycats/merb-more/tree/master/merb-mailer
86
+ [smtp-tls]: http://github.com/ambethia/smtp-tls/tree/master
87
+ [Sinatra]: http://sinatrarb.com
data/Rakefile ADDED
@@ -0,0 +1,19 @@
1
+ require 'rake/gempackagetask'
2
+ require 'rubygems/specification'
3
+
4
+ $spec = eval(File.read('sinatra_mailer.gemspec'))
5
+
6
+ Rake::GemPackageTask.new($spec) do |pkg|
7
+ pkg.need_zip = true
8
+ pkg.need_tar = true
9
+ end
10
+
11
+ require 'rake/testtask'
12
+
13
+ Rake::TestTask.new('test') do |t|
14
+ t.libs = [File.expand_path('lib')]
15
+ t.pattern = 'test/test_*.rb'
16
+ t.warning = true
17
+ end
18
+
19
+ Rake::Task['test'].comment = 'Run tests for sinatra_mailer'
@@ -0,0 +1,123 @@
1
+ # Shamelssly stolen from Merb::Mailer
2
+ # http://merbivore.com
3
+
4
+ require 'net/smtp'
5
+ require 'rubygems'
6
+ require 'mailfactory'
7
+
8
+ class MailFactory
9
+ attr_reader :html, :text
10
+ end
11
+
12
+ module Sinatra
13
+ # You'll need a simple config like this in your configure block if you want
14
+ # to actually send mail:
15
+ #
16
+ # Sinatra::Mailer.config = {
17
+ # :host => 'smtp.yourserver.com',
18
+ # :port => '25',
19
+ # :user => 'user',
20
+ # :pass => 'pass',
21
+ # :auth => :plain # :plain, :login, :cram_md5, the default is no auth
22
+ # :domain => "localhost.localdomain" # the HELO domain provided by the client to the server
23
+ # }
24
+ #
25
+ # or
26
+ #
27
+ # Sinatra::Mailer.config = {:sendmail_path => '/somewhere/odd'}
28
+ # Sinatra::Mailer.delivery_method = :sendmail
29
+ #
30
+ # From your event handlers then, you can just call the 'email' method to deliver an email:
31
+ #
32
+ # email :to => 'foo@bar.com',
33
+ # :from => 'bar@foo.com',
34
+ # :subject => 'Welcome to whatever!',
35
+ # :body => haml(:sometemplate)
36
+ #
37
+ module Mailer
38
+ class << self
39
+ attr_accessor :config, :delivery_method
40
+
41
+ @@deliveries = []
42
+
43
+ def deliveries
44
+ @@deliveries
45
+ end
46
+ end
47
+
48
+ module Helpers
49
+ def email(mail_options={})
50
+ Email.new(mail_options).deliver!
51
+ end
52
+ end
53
+
54
+ def self.registered(app)
55
+ app.helpers Sinatra::Mailer::Helpers
56
+ end
57
+
58
+ class Email
59
+ attr_accessor :mail, :config
60
+
61
+ # Sends the mail using sendmail.
62
+ def sendmail
63
+ sendmail_arguments = config[:sendmail_arguments] || "#{@mail.to}"
64
+ sendmail = IO.popen("#{config[:sendmail_path]} #{sendmail_arguments}", 'w+')
65
+ sendmail.puts @mail.to_s
66
+ sendmail.close
67
+ end
68
+
69
+ # Sends the mail using SMTP.
70
+ def net_smtp
71
+ Net::SMTP.start(config[:host], config[:port].to_i, config[:domain],
72
+ config[:user], config[:pass], config[:auth]) { |smtp|
73
+ smtp.send_message(@mail.to_s, @mail.from.first, @mail.to.to_s.split(/[,;]/))
74
+ }
75
+ end
76
+
77
+ # Delivers the mail with the specified delivery method, defaulting to
78
+ # net_smtp.
79
+ def deliver!
80
+ send(Mailer.delivery_method || :net_smtp)
81
+ end
82
+
83
+ # ==== Parameters
84
+ # file_or_files<File, Array[File]>:: File(s) to attach.
85
+ # filename<String>::
86
+ # type<~to_s>::
87
+ # The attachment MIME type. If left out, it will be determined from
88
+ # file_or_files.
89
+ # headers<String, Array>:: Additional attachment headers.
90
+ #
91
+ # ==== Raises
92
+ # ArgumentError::
93
+ # file_or_files was not a File or an Array of File instances.
94
+ def attach(file_or_files, filename = file_or_files.is_a?(File) ? File.basename(file_or_files.path) : nil,
95
+ type = nil, headers = nil)
96
+ if file_or_files.is_a?(Array)
97
+ file_or_files.each {|k,v| @mail.add_attachment_as k, *v}
98
+ else
99
+ raise ArgumentError, "You did not pass in a file. Instead, you sent a #{file_or_files.class}" if !file_or_files.is_a?(File)
100
+ @mail.add_attachment_as(file_or_files, filename, type, headers)
101
+ end
102
+ end
103
+
104
+ # ==== Parameters
105
+ # o<Hash{~to_s => Object}>:: Configuration commands to send to MailFactory.
106
+ def initialize(o={})
107
+ self.config = Mailer.config || {:sendmail_path => '/usr/sbin/sendmail'}
108
+ o[:rawhtml] = o.delete(:html)
109
+ m = MailFactory.new()
110
+ o.each { |k,v| m.send "#{k}=", v }
111
+ @mail = m
112
+ end
113
+
114
+ # Tests mail sending by adding the mail to deliveries.
115
+ def test_send
116
+ Sinatra::Mailer.deliveries << @mail
117
+ end
118
+
119
+ end
120
+ end
121
+
122
+ register Mailer
123
+ end
@@ -0,0 +1,30 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "sinatra_mailer"
3
+ s.version = "0.9.3"
4
+ s.date = "2009-05-26"
5
+ s.summary = "Send emails from Sinatra like Merb::Mailer"
6
+ s.email = "kusorbox@gmail.com"
7
+ s.homepage = "http://github.com/kusor/sinatra-mailer/tree/master"
8
+ s.description = "Sinatra::Mailer extension extracted from Merb::Mailer by Nicolás Sanguinetti."
9
+ s.authors = ["Nicolás Sanguinetti", "Pedro P. Candel"]
10
+
11
+ s.has_rdoc = false
12
+ s.rdoc_options = ["--main", "README.markdown"]
13
+ s.extra_rdoc_files = ["README.markdown"]
14
+
15
+ s.files = %w[
16
+ LICENSE
17
+ README.markdown
18
+ sinatra_mailer.gemspec
19
+ Rakefile
20
+ lib/sinatra/mailer.rb
21
+ ]
22
+ s.test_files = %w[
23
+ test/test_classic_application.rb
24
+ test/test_modular_application.rb
25
+ ]
26
+
27
+ s.add_dependency 'sinatra', '>= 0.9.2'
28
+ s.add_dependency 'mailfactory', '>= 1.4.0'
29
+ s.add_development_dependency 'rack-test', '>= 0.3.0'
30
+ end
@@ -0,0 +1,66 @@
1
+ $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+
3
+ require 'rubygems'
4
+ gem 'sinatra', '>= 0.9.1'
5
+ require 'sinatra'
6
+
7
+ require 'sinatra/mailer'
8
+
9
+ set :environment, :test
10
+
11
+ configure do
12
+ Sinatra::Mailer.config = {:sendmail_path => '/usr/sbin/sendmail'}
13
+ Sinatra::Mailer.delivery_method = :test_send
14
+ end
15
+
16
+ get '/' do
17
+ 'Classic sample application'
18
+ end
19
+
20
+ get '/defined' do
21
+ sent = email(
22
+ :to => 'foo@example.com',
23
+ :from => 'bar@example.com',
24
+ :subject => 'Test Mail',
25
+ :body => 'Plain text mail'
26
+ )
27
+ 'Email sent!'
28
+ end
29
+
30
+
31
+ require "test/unit"
32
+ require "rack/test"
33
+
34
+ begin
35
+ require "redgreen"
36
+ rescue LoadError
37
+ end
38
+
39
+ class TestClassicApplication < Test::Unit::TestCase
40
+
41
+ include Rack::Test::Methods
42
+
43
+ def app
44
+ Sinatra::Application
45
+ end
46
+
47
+ def teardown
48
+ Sinatra::Mailer.deliveries.clear
49
+ end
50
+
51
+ def test_home_ok
52
+ get '/'
53
+ assert_equal 200, last_response.status
54
+ assert last_response.body.length > 0
55
+ end
56
+
57
+ def test_helper_method
58
+ assert defined?(:email)
59
+ get '/defined'
60
+ assert_equal 200, last_response.status
61
+ assert_equal 1, Sinatra::Mailer.deliveries.size
62
+ delivery = Sinatra::Mailer.deliveries.last
63
+ assert delivery.kind_of?(MailFactory)
64
+ assert_equal ['foo@example.com'], delivery.get_header('to')
65
+ end
66
+ end
@@ -0,0 +1,68 @@
1
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
2
+
3
+ require 'rubygems'
4
+ gem 'sinatra', '>= 0.9.1'
5
+ require 'sinatra/base'
6
+
7
+ require 'sinatra/mailer'
8
+
9
+ class ModularAppSample < Sinatra::Base
10
+
11
+ register Sinatra::Mailer
12
+
13
+ configure do
14
+ Sinatra::Mailer.config = {:sendmail_path => '/usr/sbin/sendmail'}
15
+ Sinatra::Mailer.delivery_method = :test_send
16
+ end
17
+
18
+ get '/' do
19
+ 'Modular sample application'
20
+ end
21
+
22
+ get '/defined' do
23
+ sent = email(
24
+ :to => 'foo@example.com',
25
+ :from => 'bar@example.com',
26
+ :subject => 'Test Mail',
27
+ :body => 'Plain text mail'
28
+ )
29
+ 'Email sent!'
30
+ end
31
+ end
32
+
33
+ require "test/unit"
34
+ require "rack/test"
35
+
36
+ begin
37
+ require "redgreen"
38
+ rescue LoadError
39
+ end
40
+
41
+ class TestModularApplication < Test::Unit::TestCase
42
+
43
+ include Rack::Test::Methods
44
+
45
+ def app
46
+ ModularAppSample.new
47
+ end
48
+
49
+ def teardown
50
+ Sinatra::Mailer.deliveries.clear
51
+ end
52
+
53
+ def test_home_ok
54
+ get '/'
55
+ assert_equal 200, last_response.status
56
+ assert last_response.body.length > 0
57
+ end
58
+
59
+ def test_helper_method
60
+ assert defined?(:email)
61
+ get '/defined'
62
+ assert_equal 200, last_response.status
63
+ assert_equal 1, Sinatra::Mailer.deliveries.size
64
+ delivery = Sinatra::Mailer.deliveries.last
65
+ assert delivery.kind_of?(MailFactory)
66
+ assert_equal ['foo@example.com'], delivery.get_header('to')
67
+ end
68
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kusor-sinatra_mailer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.3
5
+ platform: ruby
6
+ authors:
7
+ - "Nicol\xC3\xA1s Sanguinetti"
8
+ - Pedro P. Candel
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2009-05-26 00:00:00 -07:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: sinatra
18
+ type: :runtime
19
+ version_requirement:
20
+ version_requirements: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 0.9.2
25
+ version:
26
+ - !ruby/object:Gem::Dependency
27
+ name: mailfactory
28
+ type: :runtime
29
+ version_requirement:
30
+ version_requirements: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: 1.4.0
35
+ version:
36
+ - !ruby/object:Gem::Dependency
37
+ name: rack-test
38
+ type: :development
39
+ version_requirement:
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: 0.3.0
45
+ version:
46
+ description: "Sinatra::Mailer extension extracted from Merb::Mailer by Nicol\xC3\xA1s Sanguinetti."
47
+ email: kusorbox@gmail.com
48
+ executables: []
49
+
50
+ extensions: []
51
+
52
+ extra_rdoc_files:
53
+ - README.markdown
54
+ files:
55
+ - LICENSE
56
+ - README.markdown
57
+ - sinatra_mailer.gemspec
58
+ - Rakefile
59
+ - lib/sinatra/mailer.rb
60
+ has_rdoc: false
61
+ homepage: http://github.com/kusor/sinatra-mailer/tree/master
62
+ post_install_message:
63
+ rdoc_options:
64
+ - --main
65
+ - README.markdown
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: "0"
73
+ version:
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: "0"
79
+ version:
80
+ requirements: []
81
+
82
+ rubyforge_project:
83
+ rubygems_version: 1.2.0
84
+ signing_key:
85
+ specification_version: 2
86
+ summary: Send emails from Sinatra like Merb::Mailer
87
+ test_files:
88
+ - test/test_classic_application.rb
89
+ - test/test_modular_application.rb