us-mail-client 0.0.5.alpha
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.
- checksums.yaml +7 -0
- data/README.md +11 -0
- data/config/settings.yml.example +18 -0
- data/lib/union_station/clients/default_mailer.rb +22 -0
- data/lib/union_station/clients/test_mailer.rb +18 -0
- data/lib/union_station/mail/fields/recipients_field.rb +50 -0
- data/lib/union_station/mail/fields/string_field.rb +21 -0
- data/lib/union_station/mail/message.rb +136 -0
- data/lib/union_station/mail_client.rb +18 -0
- data/lib/version.rb +5 -0
- data/us-mail-client.gemspec +20 -0
- metadata +68 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9e0fae14914ceebf9b75da83f0fa08cf67b673be
|
4
|
+
data.tar.gz: 8e158297caf093362ac70d88dc88ade81de26b24
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 84c21882d2c15ec77a532e3ef714403cbf820118cfc1e798676a23545bfd887d1ec76e689e381e43547ec79a398c11798138a1e02c6fa78e157fa7a951d33ea2
|
7
|
+
data.tar.gz: 2ed60b6122cbbeb739312236056aca597b99bcb13b2415f5aef0114f25c3699c76e1b6c14d3829abfff5e0b147826a3d857ca0882c0bbc290b78cf28672e885b
|
data/README.md
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
Union Station Metrics Models
|
2
|
+
============================
|
3
|
+
|
4
|
+
This gem contains the mail client of the Union Station project.
|
5
|
+
|
6
|
+
These clients are in a gem so they can be shared across the Union Station applications.
|
7
|
+
|
8
|
+
Usage
|
9
|
+
============================
|
10
|
+
|
11
|
+
require 'union_station/mail_client'
|
@@ -0,0 +1,18 @@
|
|
1
|
+
default_settings: &default_settings
|
2
|
+
email:
|
3
|
+
mailer_host: http://mailer:8205
|
4
|
+
|
5
|
+
development:
|
6
|
+
<<: *default_settings
|
7
|
+
email:
|
8
|
+
delivery_method: test
|
9
|
+
mailer_host: http://mailer:8205
|
10
|
+
|
11
|
+
test:
|
12
|
+
<<: *default_settings
|
13
|
+
email:
|
14
|
+
delivery_method: test
|
15
|
+
mailer_host: http://mailer:8205
|
16
|
+
|
17
|
+
production:
|
18
|
+
<<: *default_settings
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'uri'
|
3
|
+
require 'active_support/core_ext/object/to_query'
|
4
|
+
|
5
|
+
module UnionStation
|
6
|
+
class DefaultMailer
|
7
|
+
attr_accessor :uri
|
8
|
+
|
9
|
+
def initialize(config)
|
10
|
+
@config = config
|
11
|
+
@uri = URI.parse(@config[:mailer_host]+'/mail')
|
12
|
+
end
|
13
|
+
|
14
|
+
def deliver(message)
|
15
|
+
http = Net::HTTP.new(@uri.host, @uri.port)
|
16
|
+
req = Net::HTTP::Post.new(@uri.request_uri)
|
17
|
+
req.content_type = "application/x-www-form-urlencoded"
|
18
|
+
req.body = message.to_hash.to_query
|
19
|
+
response = http.request(req)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module UnionStation
|
2
|
+
class TestMailer
|
3
|
+
def initialize(config)
|
4
|
+
end
|
5
|
+
|
6
|
+
def TestMailer.deliveries
|
7
|
+
@@deliveries ||= []
|
8
|
+
end
|
9
|
+
|
10
|
+
def TestMailer.deliveries=(val)
|
11
|
+
@@deliveries = val
|
12
|
+
end
|
13
|
+
|
14
|
+
def deliver(message)
|
15
|
+
UnionStation::TestMailer.deliveries << message.to_hash
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module UnionStation
|
2
|
+
module Mail
|
3
|
+
module Fields
|
4
|
+
class RecipientsField
|
5
|
+
include Enumerable
|
6
|
+
|
7
|
+
attr_reader :values
|
8
|
+
|
9
|
+
def initialize(*values)
|
10
|
+
if values.size == 1
|
11
|
+
if values[0].is_a? Array
|
12
|
+
@values = values[0]
|
13
|
+
else
|
14
|
+
@values = values[0].split(/,/)
|
15
|
+
end
|
16
|
+
else
|
17
|
+
@values = values
|
18
|
+
end
|
19
|
+
cleanup
|
20
|
+
self
|
21
|
+
end
|
22
|
+
|
23
|
+
def <<(val)
|
24
|
+
if val.is_a? Array
|
25
|
+
@values += val
|
26
|
+
else
|
27
|
+
@values += val.split(/,/)
|
28
|
+
end
|
29
|
+
cleanup
|
30
|
+
self
|
31
|
+
end
|
32
|
+
|
33
|
+
def ==(other)
|
34
|
+
@values == other
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_s
|
38
|
+
@values.join ', '
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def cleanup
|
44
|
+
@values.map!(&:strip) #trim whitespace
|
45
|
+
@values.uniq!
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module UnionStation
|
2
|
+
module Mail
|
3
|
+
module Fields
|
4
|
+
class StringField
|
5
|
+
attr_reader :value
|
6
|
+
|
7
|
+
def initialize(value = '')
|
8
|
+
@value = value
|
9
|
+
end
|
10
|
+
|
11
|
+
def ==(other)
|
12
|
+
@value == other
|
13
|
+
end
|
14
|
+
|
15
|
+
def <<(val)
|
16
|
+
@value << val
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,136 @@
|
|
1
|
+
Dir[File.dirname(__FILE__) + '/fields/*.rb'].each { |file| require file }
|
2
|
+
|
3
|
+
module UnionStation
|
4
|
+
module Mail
|
5
|
+
class Message
|
6
|
+
FIELDS = [ :from, :to, :bcc, :reply_to, :subject, :body ]
|
7
|
+
|
8
|
+
attr_reader :header
|
9
|
+
|
10
|
+
def initialize(*args, &block)
|
11
|
+
init
|
12
|
+
if args && args[0].respond_to?(:each_pair)
|
13
|
+
init_with_hash(args[0])
|
14
|
+
end
|
15
|
+
|
16
|
+
if block_given?
|
17
|
+
instance_eval(&block)
|
18
|
+
end
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
def init
|
23
|
+
@header = {}
|
24
|
+
header[:from] = Fields::StringField.new
|
25
|
+
header[:to] = Fields::RecipientsField.new
|
26
|
+
header[:bcc] = Fields::RecipientsField.new
|
27
|
+
header[:subject] = Fields::StringField.new
|
28
|
+
header[:reply_to] = Fields::StringField.new
|
29
|
+
@body = {text: nil, html: nil}
|
30
|
+
end
|
31
|
+
|
32
|
+
def init_with_hash(args)
|
33
|
+
args.each_pair do |key, value|
|
34
|
+
if FIELDS.include?(key)
|
35
|
+
self.send(key, value)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def from(val = nil)
|
41
|
+
if val
|
42
|
+
header[:from] = Fields::StringField.new val
|
43
|
+
else
|
44
|
+
header[:from]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def from=(val)
|
49
|
+
header[:from] = Fields::StringField.new val
|
50
|
+
end
|
51
|
+
|
52
|
+
def to(val = nil)
|
53
|
+
if val
|
54
|
+
header[:to] = Fields::RecipientsField.new val
|
55
|
+
else
|
56
|
+
header[:to]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def to=(val)
|
61
|
+
header[:to] = Fields::RecipientsField.new val
|
62
|
+
end
|
63
|
+
|
64
|
+
def bcc(val = nil)
|
65
|
+
if val
|
66
|
+
header[:bcc] = Fields::RecipientsField.new val
|
67
|
+
else
|
68
|
+
header[:bcc]
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def bcc=(val)
|
73
|
+
header[:bcc] = Fields::RecipientsField.new val
|
74
|
+
end
|
75
|
+
|
76
|
+
def subject(val = nil)
|
77
|
+
if val
|
78
|
+
header[:subject] = Fields::StringField.new val
|
79
|
+
else
|
80
|
+
header[:subject]
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def subject=(val)
|
85
|
+
header[:subject] = Fields::StringField.new val
|
86
|
+
end
|
87
|
+
|
88
|
+
def reply_to(val = nil)
|
89
|
+
if val
|
90
|
+
header[:reply_to] = Fields::StringField.new val
|
91
|
+
else
|
92
|
+
header[:reply_to]
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def reply_to=(val)
|
97
|
+
header[:reply_to] = Fields::StringField.new val
|
98
|
+
end
|
99
|
+
|
100
|
+
def body(val = nil, type = :all)
|
101
|
+
if type == :all
|
102
|
+
if val
|
103
|
+
@body = val
|
104
|
+
else
|
105
|
+
@body
|
106
|
+
end
|
107
|
+
else
|
108
|
+
if val
|
109
|
+
@body[type] = val
|
110
|
+
else
|
111
|
+
@body[type]
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def body=(val, type = :all)
|
117
|
+
if type == :all
|
118
|
+
@body = val
|
119
|
+
else
|
120
|
+
@body[type] = val
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def to_hash
|
125
|
+
{
|
126
|
+
from: from.value,
|
127
|
+
to: to.values,
|
128
|
+
bcc: bcc.values,
|
129
|
+
subject: subject.value,
|
130
|
+
body: @body,
|
131
|
+
reply_to: reply_to.value
|
132
|
+
}
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
2
|
+
require 'union_station/mail/message'
|
3
|
+
Dir[File.dirname(__FILE__) + '/clients/*.rb'].each { |file| require file }
|
4
|
+
|
5
|
+
module UnionStation
|
6
|
+
module MailClient
|
7
|
+
class << self
|
8
|
+
def new(config)
|
9
|
+
config = config.with_indifferent_access
|
10
|
+
if config[:delivery_method].to_s == "test"
|
11
|
+
TestMailer.new(config)
|
12
|
+
else
|
13
|
+
DefaultMailer.new(config)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/version.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
|
4
|
+
# Maintain your gem's version:
|
5
|
+
require 'version'
|
6
|
+
|
7
|
+
# Describe your gem and declare its dependencies:
|
8
|
+
Gem::Specification.new do |s|
|
9
|
+
s.name = 'us-mail-client'
|
10
|
+
s.version = UnionStation::MailClient::VERSION
|
11
|
+
s.authors = ['Phusion']
|
12
|
+
s.email = ['support@unionstationapp.com']
|
13
|
+
s.homepage = 'https://www.unionstationapp.com/'
|
14
|
+
s.summary = 'Mail client of the Union Station system.'
|
15
|
+
s.description = 'Mail client of the Union Station system.'
|
16
|
+
|
17
|
+
s.files = Dir["{config,lib}/**/*"] + ['us-mail-client.gemspec','README.md']
|
18
|
+
|
19
|
+
s.add_runtime_dependency 'activesupport', '~> 4.2'
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: us-mail-client
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.5.alpha
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Phusion
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-06-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.2'
|
27
|
+
description: Mail client of the Union Station system.
|
28
|
+
email:
|
29
|
+
- support@unionstationapp.com
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- README.md
|
35
|
+
- config/settings.yml.example
|
36
|
+
- lib/union_station/clients/default_mailer.rb
|
37
|
+
- lib/union_station/clients/test_mailer.rb
|
38
|
+
- lib/union_station/mail/fields/recipients_field.rb
|
39
|
+
- lib/union_station/mail/fields/string_field.rb
|
40
|
+
- lib/union_station/mail/message.rb
|
41
|
+
- lib/union_station/mail_client.rb
|
42
|
+
- lib/version.rb
|
43
|
+
- us-mail-client.gemspec
|
44
|
+
homepage: https://www.unionstationapp.com/
|
45
|
+
licenses: []
|
46
|
+
metadata: {}
|
47
|
+
post_install_message:
|
48
|
+
rdoc_options: []
|
49
|
+
require_paths:
|
50
|
+
- lib
|
51
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 1.3.1
|
61
|
+
requirements: []
|
62
|
+
rubyforge_project:
|
63
|
+
rubygems_version: 2.2.3
|
64
|
+
signing_key:
|
65
|
+
specification_version: 4
|
66
|
+
summary: Mail client of the Union Station system.
|
67
|
+
test_files: []
|
68
|
+
has_rdoc:
|