api_mailer 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +5 -0
- data/Gemfile.lock +3 -1
- data/README.md +46 -0
- data/lib/api_mailer/base.rb +21 -14
- data/lib/api_mailer/version.rb +1 -1
- data/spec/api_mailer/base_spec.rb +19 -0
- metadata +4 -2
data/.travis.yml
ADDED
data/Gemfile.lock
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
api_mailer (0.0.
|
4
|
+
api_mailer (0.0.3)
|
5
5
|
actionpack (>= 3.0)
|
6
6
|
activesupport (>= 3.0)
|
7
|
+
hashie
|
7
8
|
|
8
9
|
GEM
|
9
10
|
remote: https://rubygems.org/
|
@@ -31,6 +32,7 @@ GEM
|
|
31
32
|
debugger-ruby_core_source (1.2.3)
|
32
33
|
diff-lcs (1.2.4)
|
33
34
|
erubis (2.7.0)
|
35
|
+
hashie (2.0.5)
|
34
36
|
i18n (0.6.4)
|
35
37
|
minitest (4.7.5)
|
36
38
|
multi_json (1.7.7)
|
data/README.md
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# API Mailer
|
2
|
+
|
3
|
+
## The whys
|
4
|
+
|
5
|
+
* SMTP is silly, let's use flexibly APIs instead
|
6
|
+
* It doesn't use the huge, bloated Mail gem
|
7
|
+
* It doesn't use the huge, bloated SMTP gem
|
8
|
+
* Its pluggable
|
9
|
+
|
10
|
+
## Usage
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
# app/mailers/mailing_base.rb
|
14
|
+
class MailingBase < ApiMailer::Base
|
15
|
+
def build_message
|
16
|
+
# This method must be defined, it builds the package for deliver
|
17
|
+
# here is an example json object
|
18
|
+
headers.extract(:to, :from, :subject).merge(html: responses.html_part.body.to_s).to_json
|
19
|
+
end
|
20
|
+
|
21
|
+
def deliver_message(message)
|
22
|
+
#send the message somewhere using POST or whatever
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# app/mailers/my_mailer.rb
|
27
|
+
class MyMailer < MailingBase
|
28
|
+
def cool_message_bro(user)
|
29
|
+
@user = user
|
30
|
+
mail(to: "email_me@example.com",
|
31
|
+
from: "sender@example.com",
|
32
|
+
subject: "Cool Message for you, Bro",
|
33
|
+
other_header: "value")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# app/views/my_mailer/cool_message_bro.html.erb
|
38
|
+
Cool message, <%= @user.name %>!
|
39
|
+
|
40
|
+
# sending mail
|
41
|
+
MyMailer.cool_message_bro(user).deliver
|
42
|
+
```
|
43
|
+
|
44
|
+
## Configuration
|
45
|
+
|
46
|
+
_*Coming Soon!*_
|
data/lib/api_mailer/base.rb
CHANGED
@@ -47,7 +47,7 @@ module ApiMailer
|
|
47
47
|
process(action_name, *args)
|
48
48
|
end
|
49
49
|
|
50
|
-
def mail(headers={})
|
50
|
+
def mail(headers={}, &block)
|
51
51
|
# Call all the procs (if any)
|
52
52
|
default_values = {}
|
53
53
|
self.class.default.each do |k,v|
|
@@ -55,9 +55,9 @@ module ApiMailer
|
|
55
55
|
end
|
56
56
|
|
57
57
|
# Handle defaults
|
58
|
-
self.headers = ActiveSupport::HashWithIndifferentAccess.new(
|
58
|
+
self.headers = ActiveSupport::HashWithIndifferentAccess.new(default_values.merge(headers)) || {}
|
59
59
|
|
60
|
-
collect_responses(headers)
|
60
|
+
collect_responses(headers, &block)
|
61
61
|
end
|
62
62
|
|
63
63
|
def deliver
|
@@ -69,15 +69,21 @@ module ApiMailer
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def collect_responses(headers)
|
72
|
-
|
72
|
+
if block_given?
|
73
|
+
collector = ActionMailer::Collector.new(lookup_context) { render(action_name) }
|
74
|
+
yield(collector)
|
75
|
+
self.responses = collector.responses
|
76
|
+
else
|
77
|
+
templates_name = headers.delete(:template_name) || action_name
|
73
78
|
|
74
|
-
|
75
|
-
|
79
|
+
each_template(templates_path(headers), templates_name) do |template|
|
80
|
+
self.formats = template.formats
|
76
81
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
82
|
+
self.responses << {
|
83
|
+
body: render(template: template),
|
84
|
+
content_type: (template.respond_to?(:type) ? template.type : template.mime_type).to_s
|
85
|
+
}
|
86
|
+
end
|
81
87
|
end
|
82
88
|
end
|
83
89
|
|
@@ -94,11 +100,12 @@ module ApiMailer
|
|
94
100
|
end
|
95
101
|
end
|
96
102
|
|
103
|
+
def text_part
|
104
|
+
Hashie::Mash.new(responses.select{|part| part[:content_type] == "text/plain"}.first).presence
|
105
|
+
end
|
97
106
|
|
98
|
-
|
99
|
-
|
100
|
-
Hashie::Mash.new(responses.select{|part| part[:content_type] == "text/html"}.first).presence
|
101
|
-
end
|
107
|
+
def html_part
|
108
|
+
Hashie::Mash.new(responses.select{|part| part[:content_type] == "text/html"}.first).presence
|
102
109
|
end
|
103
110
|
|
104
111
|
def process(method_name, *args)
|
data/lib/api_mailer/version.rb
CHANGED
@@ -1,6 +1,25 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
+
class MyMailer < ApiMailer::Base
|
4
|
+
def mail_me(options)
|
5
|
+
mail(options)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
3
9
|
module ApiMailer
|
4
10
|
describe Base do
|
11
|
+
it "should create an instance and call instance method when the calling the class method" do
|
12
|
+
MyMailer.any_instance.should_receive :mail_me
|
13
|
+
MyMailer.mail_me
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should call deliver_message and build_message when you deliver a message" do
|
17
|
+
Rails.env.stub(:test?).and_return(false)
|
18
|
+
MyMailer.any_instance.should_receive :collect_responses
|
19
|
+
message = MyMailer.mail_me(to: "billy@example.com")
|
20
|
+
message.should_receive :build_message
|
21
|
+
message.should_receive :deliver_message
|
22
|
+
message.deliver
|
23
|
+
end
|
5
24
|
end
|
6
25
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: api_mailer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-11-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -100,8 +100,10 @@ extensions: []
|
|
100
100
|
extra_rdoc_files: []
|
101
101
|
files:
|
102
102
|
- .gitignore
|
103
|
+
- .travis.yml
|
103
104
|
- Gemfile
|
104
105
|
- Gemfile.lock
|
106
|
+
- README.md
|
105
107
|
- Rakefile
|
106
108
|
- api_mailer.gemspec
|
107
109
|
- lib/api_mailer.rb
|