pling-actionmailer 0.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.
- data/.gitignore +8 -0
- data/.travis.yml +8 -0
- data/Gemfile +11 -0
- data/Guardfile +4 -0
- data/LICENSE +20 -0
- data/README.md +38 -0
- data/Rakefile +15 -0
- data/app/views/pling/mailer/pling_message.html.erb +12 -0
- data/app/views/pling/mailer/pling_message.text.erb +1 -0
- data/lib/pling/gateway/action_mailer.rb +48 -0
- data/pling-actionmailer.gemspec +22 -0
- data/spec/pling/gateway/action_mailer/mailer_spec.rb +57 -0
- data/spec/pling/gateway/action_mailer_spec.rb +75 -0
- data/spec/spec_helper.rb +14 -0
- metadata +111 -0
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
source 'http://rubygems.org'
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in pling.gemspec
|
4
|
+
gemspec
|
5
|
+
|
6
|
+
gem 'pling', :path => '../pling'
|
7
|
+
|
8
|
+
gem 'guard'
|
9
|
+
gem 'guard-rspec'
|
10
|
+
gem 'growl_notify' if RUBY_PLATFORM =~ /darwin/
|
11
|
+
gem 'rdiscount', ">= 1.6.8", :platform => :ruby
|
data/Guardfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2011 flinc AG
|
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.md
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# Pling Gateway to ActionMailer
|
2
|
+
|
3
|
+
## Requirements
|
4
|
+
|
5
|
+
* [Pling](https://github.com/flinc/pling)
|
6
|
+
|
7
|
+
## Install
|
8
|
+
|
9
|
+
gem 'pling-actionmailer', :require => 'pling/gateways/action_mailer'
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
|
16
|
+
## Build Status
|
17
|
+
|
18
|
+
pling-actionmailer is on [Travis](http://travis-ci.org/flinc/pling-actionmailer) running the specs on Ruby 1.8.7, Ruby Enterprise Edition, Ruby 1.9.2, Ruby HEAD, JRuby, Rubinius and Rubinius 2.
|
19
|
+
|
20
|
+
|
21
|
+
## Known issues
|
22
|
+
|
23
|
+
See [the issue tracker on GitHub](https://github.com/flinc/pling-actionmailer/issues).
|
24
|
+
|
25
|
+
|
26
|
+
## Repository
|
27
|
+
|
28
|
+
See [the repository on GitHub](https://github.com/flinc/pling-actionmailer) and feel free to fork it!
|
29
|
+
|
30
|
+
|
31
|
+
## Contributors
|
32
|
+
|
33
|
+
See a list of all contributors on [GitHub](https://github.com/flinc/pling-actionmailer/contributors). Thanks a lot everyone!
|
34
|
+
|
35
|
+
|
36
|
+
## Copyright
|
37
|
+
|
38
|
+
Copyright (c) 2011 [flinc AG](https://flinc.org/). See LICENSE for details.SE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
|
3
|
+
require 'rspec/core/rake_task'
|
4
|
+
require 'yard'
|
5
|
+
|
6
|
+
RSpec::Core::RakeTask.new(:spec)
|
7
|
+
|
8
|
+
YARD::Rake::YardocTask.new(:doc)
|
9
|
+
|
10
|
+
task :default => :spec
|
11
|
+
|
12
|
+
desc "Open an irb session"
|
13
|
+
task :console do
|
14
|
+
sh "bundle exec irb -rubygems -I lib -r pling/gateway/action_mailer.rb"
|
15
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
<html>
|
4
|
+
<head>
|
5
|
+
<style type="text/css">
|
6
|
+
body { font-family: sans-serif; }
|
7
|
+
</style>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<%= @message.content %>
|
11
|
+
</body>
|
12
|
+
</html>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= @message.content %>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'pling'
|
2
|
+
require 'action_mailer'
|
3
|
+
|
4
|
+
module Pling
|
5
|
+
module Gateway
|
6
|
+
class ActionMailer < Base
|
7
|
+
class Mailer < ::ActionMailer::Base
|
8
|
+
append_view_path File.expand_path('../../../../app/views', __FILE__)
|
9
|
+
|
10
|
+
def pling_message(message, device, configuration)
|
11
|
+
@message, @device, @configuration = message, device, configuration
|
12
|
+
|
13
|
+
use_text = configuration.delete(:text)
|
14
|
+
use_html = configuration.delete(:html)
|
15
|
+
|
16
|
+
mail(configuration.merge(:to => device.identifier)) do |format|
|
17
|
+
format.text { render 'pling/mailer/pling_message' } if use_text
|
18
|
+
format.html { render 'pling/mailer/pling_message' } if use_html
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
handles :email, :mail, :actionmailer
|
24
|
+
|
25
|
+
def initialize(configuration)
|
26
|
+
setup_configuration(configuration, :require => [:from])
|
27
|
+
end
|
28
|
+
|
29
|
+
def deliver(message, device)
|
30
|
+
message = Pling._convert(message, :message)
|
31
|
+
device = Pling._convert(device, :device)
|
32
|
+
|
33
|
+
mailer = configuration[:mailer] || Pling::Gateway::ActionMailer::Mailer
|
34
|
+
mailer.pling_message(message, device, configuration).deliver
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def default_configuration
|
40
|
+
{
|
41
|
+
:html => true,
|
42
|
+
:text => true
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = "pling-actionmailer"
|
5
|
+
s.version = "0.1.0"
|
6
|
+
s.authors = ["benedikt", "t6d", "fabrik42"]
|
7
|
+
s.email = ["benedikt@synatic.net", "me@t6d.de", "fabrik42@gmail.com"]
|
8
|
+
s.homepage = "http://flinc.github.com/pling-actionmailer"
|
9
|
+
s.summary = %q{Pling Gateway to ActionMailer}
|
10
|
+
s.description = %q{Pling Gateway to ActionMailer}
|
11
|
+
|
12
|
+
s.files = `git ls-files`.split("\n")
|
13
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
15
|
+
s.require_paths = ["lib"]
|
16
|
+
|
17
|
+
s.add_runtime_dependency "pling", "~> 0.0"
|
18
|
+
s.add_runtime_dependency "actionmailer", "~> 3.0"
|
19
|
+
|
20
|
+
s.add_development_dependency "rspec", "~> 2.7"
|
21
|
+
s.add_development_dependency "yard", ">= 0.7"
|
22
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Pling::Gateway::ActionMailer::Mailer do
|
4
|
+
subject { described_class }
|
5
|
+
|
6
|
+
let(:message) { Pling::Message.new('Hello from Pling') }
|
7
|
+
let(:device) { Pling::Device.new(:identifier => 'DEVICEIDENTIFIER', :type => :email) }
|
8
|
+
let(:mail) { described_class.pling_message(message, device, configuration) }
|
9
|
+
let(:configuration) do
|
10
|
+
{
|
11
|
+
:from => 'random@example.com',
|
12
|
+
:html => true,
|
13
|
+
:text => true
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
specify { described_class.ancestors =~ ActionMailer::Base }
|
18
|
+
|
19
|
+
describe '.pling_message' do
|
20
|
+
|
21
|
+
it 'should return an instance of Mail::Message' do
|
22
|
+
subject.pling_message(message, device, configuration).should be_kind_of(Mail::Message)
|
23
|
+
end
|
24
|
+
|
25
|
+
context '{ :html => true, :text => true }' do
|
26
|
+
subject { described_class.pling_message(message, device, configuration) }
|
27
|
+
|
28
|
+
its(:mime_type) { should eq('multipart/alternative') }
|
29
|
+
it { should have(2).parts }
|
30
|
+
|
31
|
+
specify { subject.parts.map(&:mime_type) =~ ['multipart/alternative', 'text/plain'] }
|
32
|
+
end
|
33
|
+
|
34
|
+
context '{ :html => false, :text => true }' do
|
35
|
+
subject { described_class.pling_message(message, device, configuration.merge(:html => false, :text => true)) }
|
36
|
+
|
37
|
+
its(:mime_type) { should eq('text/plain') }
|
38
|
+
its(:body) { should eq('Hello from Pling') }
|
39
|
+
end
|
40
|
+
|
41
|
+
context '{ :html => true, :text => false }' do
|
42
|
+
subject { described_class.pling_message(message, device, configuration.merge(:html => true, :text => false)) }
|
43
|
+
|
44
|
+
its(:mime_type) { should eq('text/html') }
|
45
|
+
its(:body) { should =~ /<html>(.*)Hello from Pling(.*)<\/html>/m }
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should use device.identifier as recipient' do
|
49
|
+
mail.to.should include('DEVICEIDENTIFIER')
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should use sender from the configuration' do
|
53
|
+
mail.from.should include('random@example.com')
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Pling::Gateway::ActionMailer do
|
4
|
+
|
5
|
+
let(:valid_configuration) do
|
6
|
+
{ :from => 'random@example.com' }
|
7
|
+
end
|
8
|
+
|
9
|
+
let(:message) { Pling::Message.new('Hello from Pling') }
|
10
|
+
let(:device) { Pling::Device.new(:identifier => 'DEVICEIDENTIFIER', :type => :email) }
|
11
|
+
|
12
|
+
let(:mail) { mock(:deliver => true) }
|
13
|
+
|
14
|
+
before do
|
15
|
+
Pling::Gateway::ActionMailer::Mailer.stub(:pling_message => mail)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should handle various action mailer related device types' do
|
19
|
+
Pling::Gateway::ActionMailer.handled_types.should =~ [:mail, :email, :actionmailer]
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'when created with an invalid configuration' do
|
23
|
+
[:from].each do |attribute|
|
24
|
+
it "should raise an error when :#{attribute} is missing" do
|
25
|
+
configuration = valid_configuration
|
26
|
+
configuration.delete(attribute)
|
27
|
+
expect { Pling::Gateway::ActionMailer.new(configuration) }.to raise_error(ArgumentError, /:#{attribute} is missing/)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'when created with a valid configuration' do
|
33
|
+
it 'should pass the full configuration to the mailer' do
|
34
|
+
configuration = valid_configuration.merge({ :something => true })
|
35
|
+
gateway = Pling::Gateway::ActionMailer.new(configuration)
|
36
|
+
|
37
|
+
Pling::Gateway::ActionMailer::Mailer.
|
38
|
+
should_receive(:pling_message).
|
39
|
+
with(anything, anything, hash_including(configuration)).and_return(mail)
|
40
|
+
|
41
|
+
gateway.deliver(message, device)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe '#deliver' do
|
46
|
+
subject { Pling::Gateway::ActionMailer.new(valid_configuration) }
|
47
|
+
|
48
|
+
it 'should raise an error if no message is given' do
|
49
|
+
expect { subject.deliver(nil, device) }.to raise_error
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should raise an error the device is given' do
|
53
|
+
expect { subject.deliver(message, nil) }.to raise_error
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'should call #to_pling_message on the given message' do
|
57
|
+
message.should_receive(:to_pling_message).and_return(message)
|
58
|
+
subject.deliver(message, device)
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should call #to_pling_device on the given device' do
|
62
|
+
device.should_receive(:to_pling_device).and_return(device)
|
63
|
+
subject.deliver(message, device)
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'should try to deliver the given message' do
|
67
|
+
Pling::Gateway::ActionMailer::Mailer.
|
68
|
+
should_receive(:pling_message).
|
69
|
+
with(message, device, hash_including(valid_configuration)).
|
70
|
+
and_return(mail)
|
71
|
+
|
72
|
+
subject.deliver(message, device)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
|
4
|
+
Bundler.require
|
5
|
+
|
6
|
+
require 'pling/gateway/action_mailer'
|
7
|
+
|
8
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
9
|
+
|
10
|
+
ActionMailer::Base.delivery_method = :test
|
11
|
+
|
12
|
+
RSpec.configure do |config|
|
13
|
+
config.mock_with :rspec
|
14
|
+
end
|
metadata
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pling-actionmailer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- benedikt
|
9
|
+
- t6d
|
10
|
+
- fabrik42
|
11
|
+
autorequire:
|
12
|
+
bindir: bin
|
13
|
+
cert_chain: []
|
14
|
+
date: 2011-10-21 00:00:00.000000000Z
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: pling
|
18
|
+
requirement: &70329444843100 !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
20
|
+
requirements:
|
21
|
+
- - ~>
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '0.0'
|
24
|
+
type: :runtime
|
25
|
+
prerelease: false
|
26
|
+
version_requirements: *70329444843100
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: actionmailer
|
29
|
+
requirement: &70329444842560 !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
31
|
+
requirements:
|
32
|
+
- - ~>
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '3.0'
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: *70329444842560
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: rspec
|
40
|
+
requirement: &70329444841800 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '2.7'
|
46
|
+
type: :development
|
47
|
+
prerelease: false
|
48
|
+
version_requirements: *70329444841800
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: yard
|
51
|
+
requirement: &70329444841320 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ! '>='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0.7'
|
57
|
+
type: :development
|
58
|
+
prerelease: false
|
59
|
+
version_requirements: *70329444841320
|
60
|
+
description: Pling Gateway to ActionMailer
|
61
|
+
email:
|
62
|
+
- benedikt@synatic.net
|
63
|
+
- me@t6d.de
|
64
|
+
- fabrik42@gmail.com
|
65
|
+
executables: []
|
66
|
+
extensions: []
|
67
|
+
extra_rdoc_files: []
|
68
|
+
files:
|
69
|
+
- .gitignore
|
70
|
+
- .travis.yml
|
71
|
+
- Gemfile
|
72
|
+
- Guardfile
|
73
|
+
- LICENSE
|
74
|
+
- README.md
|
75
|
+
- Rakefile
|
76
|
+
- app/views/pling/mailer/pling_message.html.erb
|
77
|
+
- app/views/pling/mailer/pling_message.text.erb
|
78
|
+
- lib/pling/gateway/action_mailer.rb
|
79
|
+
- pling-actionmailer.gemspec
|
80
|
+
- spec/pling/gateway/action_mailer/mailer_spec.rb
|
81
|
+
- spec/pling/gateway/action_mailer_spec.rb
|
82
|
+
- spec/spec_helper.rb
|
83
|
+
homepage: http://flinc.github.com/pling-actionmailer
|
84
|
+
licenses: []
|
85
|
+
post_install_message:
|
86
|
+
rdoc_options: []
|
87
|
+
require_paths:
|
88
|
+
- lib
|
89
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
97
|
+
requirements:
|
98
|
+
- - ! '>='
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
101
|
+
requirements: []
|
102
|
+
rubyforge_project:
|
103
|
+
rubygems_version: 1.8.10
|
104
|
+
signing_key:
|
105
|
+
specification_version: 3
|
106
|
+
summary: Pling Gateway to ActionMailer
|
107
|
+
test_files:
|
108
|
+
- spec/pling/gateway/action_mailer/mailer_spec.rb
|
109
|
+
- spec/pling/gateway/action_mailer_spec.rb
|
110
|
+
- spec/spec_helper.rb
|
111
|
+
has_rdoc:
|