outbox 0.1.1 → 0.1.2
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 +4 -4
- data/lib/outbox/clients/mail_client.rb +1 -1
- data/lib/outbox/message.rb +8 -0
- data/lib/outbox/message_clients.rb +18 -5
- data/lib/outbox/message_fields.rb +3 -6
- data/lib/outbox/message_types.rb +28 -2
- data/lib/outbox/version.rb +1 -1
- data/spec/outbox/message_spec.rb +63 -10
- data/spec/outbox/messages/base_spec.rb +39 -4
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b0251b3437146e36c621521831de3f1b1f66754
|
4
|
+
data.tar.gz: edf0111ebfff3b8cf1d7a6716ac3fb72c59f934a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0fab54a11397b3fdd99407adcd41f16f10f624eba332686cf3c8c0fb3924605b5590f226da3fe2a51602a1aaad1ab8a48a5d1bb5cf2b7b9b664e0f9966fed1ed
|
7
|
+
data.tar.gz: b3228876ee7f25bd9dfe9d53983fb691c7ad907c628ba227d0a58b621a4482f013cf1c50efc9578dea886ac81e3cf6ea04da91179fbb37cf0a2a60b7a00dbae2
|
@@ -21,7 +21,7 @@ module Outbox
|
|
21
21
|
# }
|
22
22
|
# client.delivery_method_settings #=> { location: '/usr/bin/sendmail' }
|
23
23
|
def delivery_method_settings
|
24
|
-
settings[:delivery_method_settings] || settings[:"#{delivery_method}_settings"]
|
24
|
+
settings[:delivery_method_settings] || settings[:"#{delivery_method}_settings"] || {}
|
25
25
|
end
|
26
26
|
|
27
27
|
def deliver(email)
|
data/lib/outbox/message.rb
CHANGED
@@ -4,6 +4,14 @@ module Outbox
|
|
4
4
|
|
5
5
|
register_message_type :email, Outbox::Messages::Email
|
6
6
|
|
7
|
+
# Use the Outbox::Clients::TestClient for all message types. This is
|
8
|
+
# useful for testing or working an a development environment.
|
9
|
+
def self.use_test_client
|
10
|
+
message_types.each_value do |message_type|
|
11
|
+
message_type.default_client(:test)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
7
15
|
# Make a new message. Every message can be created using a hash,
|
8
16
|
# block, or direct assignment.
|
9
17
|
#
|
@@ -13,13 +13,26 @@ module Outbox
|
|
13
13
|
#
|
14
14
|
# Email.default_client :test, option: 'foo'
|
15
15
|
# Email.default_client #=> #<Outbox::Clients::TestClient>
|
16
|
-
def default_client(client = nil,
|
17
|
-
if client
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
def default_client(client = nil, settings = nil)
|
17
|
+
@default_client = get_client(client, settings) if client
|
18
|
+
@default_client
|
19
|
+
end
|
20
|
+
|
21
|
+
# Sets the default client.
|
22
|
+
def default_client=(client)
|
23
|
+
@default_client = get_client(client)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Configure the default client.
|
27
|
+
def default_client_settings(settings = nil)
|
28
|
+
if default_client.nil?
|
29
|
+
raise ArgumentError, 'default_client must be set before setting default_client_settings'
|
21
30
|
end
|
31
|
+
|
32
|
+
default_client.settings.merge!(settings) if settings
|
33
|
+
default_client.settings
|
22
34
|
end
|
35
|
+
alias :default_client_settings= :default_client_settings
|
23
36
|
|
24
37
|
# Registers a client class with an alias.
|
25
38
|
#
|
@@ -15,13 +15,10 @@ module Outbox
|
|
15
15
|
# message.from #=> 'bob@example.com'
|
16
16
|
def defaults(defaults = nil)
|
17
17
|
@defaults ||= {}
|
18
|
-
|
19
|
-
|
20
|
-
@defaults
|
21
|
-
else
|
22
|
-
@defaults.merge!(defaults)
|
23
|
-
end
|
18
|
+
@defaults.merge!(defaults) if defaults
|
19
|
+
@defaults
|
24
20
|
end
|
21
|
+
alias :defaults= :defaults
|
25
22
|
|
26
23
|
# Returns the defined fields for this message type.
|
27
24
|
#
|
data/lib/outbox/message_types.rb
CHANGED
@@ -26,7 +26,9 @@ module Outbox
|
|
26
26
|
message_types[name.to_sym] = message_type
|
27
27
|
define_message_type_reader(name, message_type)
|
28
28
|
define_message_type_writer(name)
|
29
|
-
|
29
|
+
define_default_message_type_client_accessors(name, message_type)
|
30
|
+
define_default_message_type_client_settings_accessors(name, message_type)
|
31
|
+
define_message_type_defaults_accessors(name, message_type)
|
30
32
|
end
|
31
33
|
|
32
34
|
# Returns a hash of the registred message types, where the key is the name
|
@@ -63,10 +65,34 @@ module Outbox
|
|
63
65
|
end
|
64
66
|
end
|
65
67
|
|
66
|
-
def
|
68
|
+
def define_default_message_type_client_accessors(name, message_type)
|
67
69
|
define_singleton_method "default_#{name}_client" do |*args|
|
68
70
|
message_type.default_client(*args)
|
69
71
|
end
|
72
|
+
|
73
|
+
define_singleton_method "default_#{name}_client=" do |client|
|
74
|
+
message_type.default_client = client
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def define_default_message_type_client_settings_accessors(name, message_type)
|
79
|
+
define_singleton_method "default_#{name}_client_settings" do |*args|
|
80
|
+
message_type.default_client_settings(*args)
|
81
|
+
end
|
82
|
+
|
83
|
+
define_singleton_method "default_#{name}_client_settings=" do |settings|
|
84
|
+
message_type.default_client_settings = settings
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def define_message_type_defaults_accessors(name, message_type)
|
89
|
+
define_singleton_method "#{name}_defaults" do |*args|
|
90
|
+
message_type.defaults(*args)
|
91
|
+
end
|
92
|
+
|
93
|
+
define_singleton_method "#{name}_defaults=" do |defaults|
|
94
|
+
message_type.defaults = defaults
|
95
|
+
end
|
70
96
|
end
|
71
97
|
end
|
72
98
|
|
data/lib/outbox/version.rb
CHANGED
data/spec/outbox/message_spec.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Outbox::Message do
|
4
|
+
class MockTelepathyClient < Outbox::Clients::TestClient
|
5
|
+
end
|
6
|
+
|
4
7
|
class Telepathy < Outbox::Messages::Base
|
8
|
+
register_client_alias :mock, MockTelepathyClient
|
5
9
|
default_client :test
|
6
10
|
fields :to, :from, :thought
|
7
11
|
|
@@ -27,6 +31,22 @@ describe Outbox::Message do
|
|
27
31
|
|
28
32
|
after do
|
29
33
|
Outbox::Message.instance_variable_set :@message_types, @original_message_types
|
34
|
+
Telepathy.instance_variable_set :@defaults, {}
|
35
|
+
Telepathy.default_client :test
|
36
|
+
end
|
37
|
+
|
38
|
+
describe '.use_test_client' do
|
39
|
+
after do
|
40
|
+
Outbox::Message.default_email_client :mail
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'sets the default client to TestClient for all message types' do
|
44
|
+
Telepathy.default_client :mock
|
45
|
+
Outbox::Message.use_test_client
|
46
|
+
expect(Telepathy.default_client).to be_a(Outbox::Clients::TestClient)
|
47
|
+
expect(MessageInABottle.default_client).to be_a(Outbox::Clients::TestClient)
|
48
|
+
expect(Outbox::Messages::Email.default_client).to be_a(Outbox::Clients::TestClient)
|
49
|
+
end
|
30
50
|
end
|
31
51
|
|
32
52
|
describe '.message_types' do
|
@@ -71,20 +91,53 @@ describe Outbox::Message do
|
|
71
91
|
end
|
72
92
|
end
|
73
93
|
|
74
|
-
describe '
|
75
|
-
|
76
|
-
|
77
|
-
|
94
|
+
describe '.default_[message_type]_client' do
|
95
|
+
it 'sets the default client for that message type' do
|
96
|
+
Outbox::Message.default_telepathy_client :mock, option_1: 1
|
97
|
+
client = Outbox::Message.default_telepathy_client
|
98
|
+
expect(Telepathy.default_client).to be(client)
|
99
|
+
expect(client).to be_a(MockTelepathyClient)
|
100
|
+
expect(client.settings[:option_1]).to eq(1)
|
78
101
|
end
|
102
|
+
end
|
79
103
|
|
104
|
+
describe '.default_[message_type]_client=' do
|
80
105
|
it 'sets the default client for that message type' do
|
81
|
-
|
82
|
-
|
83
|
-
client = double :client
|
84
|
-
options = { option_1: 1, option_2: 2 }
|
85
|
-
expect(client_class).to receive(:new).with(options) { client}
|
86
|
-
Outbox::Message.default_telepathy_client :foo, options
|
106
|
+
Outbox::Message.default_telepathy_client = :mock
|
107
|
+
client = Outbox::Message.default_telepathy_client
|
87
108
|
expect(Telepathy.default_client).to be(client)
|
109
|
+
expect(client).to be_a(MockTelepathyClient)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe '.default_[message_type]_client_settings' do
|
114
|
+
it 'sets the default client for that message type' do
|
115
|
+
Outbox::Message.default_telepathy_client_settings option_1: 1
|
116
|
+
client = Outbox::Message.default_telepathy_client
|
117
|
+
expect(client.settings[:option_1]).to eq(1)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
describe '.default_[message_type]_client_settings=' do
|
122
|
+
it 'sets the default client for that message type' do
|
123
|
+
Outbox::Message.default_telepathy_client_settings = { option_1: 1 }
|
124
|
+
client = Outbox::Message.default_telepathy_client
|
125
|
+
expect(client.settings[:option_1]).to eq(1)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
describe '.[message_type]_defaults' do
|
130
|
+
it 'sets the defaults for that message type' do
|
131
|
+
Outbox::Message.telepathy_defaults from: 'Me'
|
132
|
+
expect(Telepathy.new.from).to eq('Me')
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
describe '.[message_type]_defaults=' do
|
137
|
+
it 'sets the defaults for that message type' do
|
138
|
+
Outbox::Message.telepathy_defaults = { from: 'Me' }
|
139
|
+
expect(Outbox::Message.telepathy_defaults).to eq(Telepathy.defaults)
|
140
|
+
expect(Telepathy.new.from).to eq('Me')
|
88
141
|
end
|
89
142
|
end
|
90
143
|
|
@@ -40,9 +40,11 @@ describe Outbox::Messages::Base do
|
|
40
40
|
field :body, writer: false
|
41
41
|
end
|
42
42
|
|
43
|
-
|
44
|
-
|
43
|
+
after do
|
44
|
+
Message.default_client :test
|
45
|
+
end
|
45
46
|
|
47
|
+
describe '.default_client' do
|
46
48
|
it 'sets the default client' do
|
47
49
|
client = double :client
|
48
50
|
allow(client).to receive(:dup) { client }
|
@@ -52,9 +54,42 @@ describe Outbox::Messages::Base do
|
|
52
54
|
end
|
53
55
|
end
|
54
56
|
|
55
|
-
describe '.
|
56
|
-
|
57
|
+
describe '.default_client=' do
|
58
|
+
it 'sets the default client' do
|
59
|
+
client = double :client
|
60
|
+
allow(client).to receive(:dup) { client }
|
61
|
+
Message.default_client = client
|
62
|
+
message = Message.new
|
63
|
+
expect(message.client).to be(client)
|
64
|
+
end
|
65
|
+
end
|
57
66
|
|
67
|
+
describe '.default_client_settings' do
|
68
|
+
it 'sets the default client settings' do
|
69
|
+
Message.default_client_settings option_1: true
|
70
|
+
message = Message.new
|
71
|
+
expect(message.client.settings[:option_1]).to eq(true)
|
72
|
+
end
|
73
|
+
|
74
|
+
context 'without a default client' do
|
75
|
+
it 'sets the default client settings once set' do
|
76
|
+
Message.instance_variable_set :@default_client, nil
|
77
|
+
expect {
|
78
|
+
Message.default_client_settings option_1: true
|
79
|
+
}.to raise_error(ArgumentError)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe '.default_client_settings=' do
|
85
|
+
it 'sets the default client settings' do
|
86
|
+
Message.default_client_settings = { option_1: true }
|
87
|
+
message = Message.new
|
88
|
+
expect(message.client.settings[:option_1]).to eq(true)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe '.register_client' do
|
58
93
|
it 'registers a client alias' do
|
59
94
|
client_class = Class.new
|
60
95
|
Message.register_client_alias :foo, client_class
|