outbox-rails 0.0.1 → 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/README.md +53 -9
- data/config.ru +7 -0
- data/lib/outbox/notifier.rb +107 -0
- data/lib/outbox/rails.rb +5 -1
- data/lib/outbox/rails/railtie.rb +13 -0
- data/lib/outbox/rails/version.rb +1 -1
- data/outbox-rails.gemspec +9 -4
- data/spec/internal/app/notifiers/base_notifier.rb +18 -0
- data/spec/internal/app/views/base_notifier/composed_message_with_implicit_render.erb +1 -0
- data/spec/internal/app/views/base_notifier/implicit_multipart.html.erb +1 -0
- data/spec/internal/app/views/base_notifier/implicit_multipart.text.erb +1 -0
- data/spec/internal/app/views/base_notifier/welcome.erb +1 -0
- data/spec/internal/config/database.yml +3 -0
- data/spec/internal/config/routes.rb +3 -0
- data/spec/internal/db/schema.rb +3 -0
- data/spec/internal/log/.gitignore +1 -0
- data/spec/internal/public/favicon.ico +0 -0
- data/spec/outbox/rails/notifier_spec.rb +77 -0
- data/spec/spec_helper.rb +5 -0
- metadata +116 -9
data/README.md
CHANGED
@@ -1,26 +1,70 @@
|
|
1
|
-
|
1
|
+
Outbox::Rails
|
2
|
+
=============
|
2
3
|
|
3
|
-
|
4
|
+
[](http://badge.fury.io/rb/outbox-rails)
|
4
5
|
|
5
|
-
|
6
|
+
Rails Railtie for sending email, SMS, and push notifications using the [Outbox](https://github.com/localmed/outbox) gem. Please view the [Outbox documentation](https://github.com/localmed/outbox) to understand the philosophy behind this interface and how to use it.
|
7
|
+
|
8
|
+
Installation
|
9
|
+
------------
|
6
10
|
|
7
11
|
Add this line to your application's Gemfile:
|
8
12
|
|
9
|
-
|
13
|
+
``` ruby
|
14
|
+
gem 'outbox-rails'
|
15
|
+
```
|
10
16
|
|
11
17
|
And then execute:
|
12
18
|
|
13
|
-
|
19
|
+
``` bash
|
20
|
+
$ bundle
|
21
|
+
```
|
14
22
|
|
15
23
|
Or install it yourself as:
|
16
24
|
|
17
|
-
|
25
|
+
``` bash
|
26
|
+
$ gem install outbox-rails
|
27
|
+
```
|
28
|
+
|
29
|
+
Usage
|
30
|
+
-----
|
31
|
+
|
32
|
+
Outbox::Notifier uses a very similar interface to ActionMailer.
|
33
|
+
|
34
|
+
First, define a notifier in `app/notifiers`:
|
35
|
+
|
36
|
+
``` ruby
|
37
|
+
class AccountNotifier < Outbox::Notifier
|
38
|
+
default email: { from: 'noreply@myapp.com' },
|
39
|
+
sms: { from: '+15551234567' }
|
40
|
+
|
41
|
+
def welcome
|
42
|
+
# Compose message types using the Outbox::Message interface
|
43
|
+
email do
|
44
|
+
subject 'Welcome to our App!'
|
45
|
+
end
|
46
|
+
|
47
|
+
sms do
|
48
|
+
body 'Welcome to our App!'
|
49
|
+
end
|
50
|
+
|
51
|
+
# Render the body of the message. This is analogous to ActionMailer::Base#mail,
|
52
|
+
# but unlike in ActionMailer, #render_message is not required.
|
53
|
+
render_message
|
54
|
+
end
|
55
|
+
end
|
56
|
+
```
|
18
57
|
|
19
|
-
|
58
|
+
Send a message using the `deliver` method:
|
20
59
|
|
21
|
-
|
60
|
+
```ruby
|
61
|
+
# Unlike ActionMailer, deliver takes a single argument that defines the recipients
|
62
|
+
# for the message types you want to send.
|
63
|
+
AccountNotifier.welcome.deliver email: 'user@gmail.com', sms: '+15557654321'
|
64
|
+
```
|
22
65
|
|
23
|
-
|
66
|
+
Contributing
|
67
|
+
------------
|
24
68
|
|
25
69
|
1. Fork it
|
26
70
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
data/config.ru
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'action_mailer'
|
2
|
+
|
3
|
+
module Outbox
|
4
|
+
class Notifier < ActionMailer::Base
|
5
|
+
abstract!
|
6
|
+
|
7
|
+
delegate :attachments, :headers, to: :email
|
8
|
+
alias_method :_render_email, :mail
|
9
|
+
undef :mail
|
10
|
+
|
11
|
+
class << self
|
12
|
+
alias :defaults :default
|
13
|
+
|
14
|
+
# Returns the name of current notifier. This method is also being used
|
15
|
+
# as a path for a view lookup. If this is an anonymous notifier,
|
16
|
+
# this method will return +anonymous+ instead.
|
17
|
+
def notifier_name(value = nil)
|
18
|
+
if value.nil?
|
19
|
+
self.mailer_name
|
20
|
+
else
|
21
|
+
self.mailer_name = value
|
22
|
+
end
|
23
|
+
end
|
24
|
+
alias :notifier_name= :notifier_name
|
25
|
+
|
26
|
+
protected
|
27
|
+
|
28
|
+
def method_missing(method_name, *args) # :nodoc:
|
29
|
+
if respond_to?(method_name)
|
30
|
+
new(method_name, *args).message
|
31
|
+
else
|
32
|
+
super
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def initialize(method_name = nil, *args) # :nodoc:
|
38
|
+
super()
|
39
|
+
# Make sure we don't ever get a NullMail object.
|
40
|
+
@_mail_was_called = true
|
41
|
+
@_message_rendered = false
|
42
|
+
@_message = Outbox::Message.new self.class.default_params.dup
|
43
|
+
process(method_name, *args) if method_name
|
44
|
+
end
|
45
|
+
|
46
|
+
# The composed Outbox::Message instance.
|
47
|
+
def message
|
48
|
+
render_message unless message_rendered?
|
49
|
+
@_message
|
50
|
+
end
|
51
|
+
|
52
|
+
# Returns true if the message has already been rendered.
|
53
|
+
def message_rendered?
|
54
|
+
@_message_rendered
|
55
|
+
end
|
56
|
+
|
57
|
+
# Renders the message body. This is analagous to ActionMailer's #mail
|
58
|
+
# method, but is not required - it will be called implicitly when the
|
59
|
+
# #message object is retrieved.
|
60
|
+
def render_message(options = {}, &block)
|
61
|
+
@_message_rendered = true
|
62
|
+
|
63
|
+
# Render an email using the #mail interface so we don't have
|
64
|
+
# to rewrite the template logic. Even if we aren't sending an email
|
65
|
+
# we can still use the rendered templates in other messages types.
|
66
|
+
email_options = options.extract! :content_type, :charset, :parts_order,
|
67
|
+
:body, :template_name, :template_path
|
68
|
+
email_options.merge!(options.delete(:email)) if options[:email]
|
69
|
+
email_options[:subject] ||= email.subject
|
70
|
+
email = render_email(email_options, &block)
|
71
|
+
|
72
|
+
@_message.assign_message_type_values(options)
|
73
|
+
assign_body_from_email(email)
|
74
|
+
@_message
|
75
|
+
end
|
76
|
+
|
77
|
+
protected
|
78
|
+
|
79
|
+
def assign_body_from_email(email)
|
80
|
+
# TODO: Implement this later once we have multiple message types. This
|
81
|
+
# will extract the rendered body from the mail (preferring text/plain)
|
82
|
+
# and assign it to the other message types.
|
83
|
+
end
|
84
|
+
|
85
|
+
def render_email(options, &block)
|
86
|
+
outbox_message = @_message
|
87
|
+
@_message = outbox_message.email || Mail.new
|
88
|
+
email = _render_email(options, &block)
|
89
|
+
@_message = outbox_message
|
90
|
+
email
|
91
|
+
end
|
92
|
+
|
93
|
+
def method_missing(method, *args, &block)
|
94
|
+
if @_message.respond_to?(method)
|
95
|
+
@_message.public_send(method, *args, &block)
|
96
|
+
else
|
97
|
+
super
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def respond_to_missing?(method, include_private = false)
|
102
|
+
super || @_message.respond_to?(method, include_private)
|
103
|
+
end
|
104
|
+
|
105
|
+
ActiveSupport.run_load_hooks(:outbox, self)
|
106
|
+
end
|
107
|
+
end
|
data/lib/outbox/rails.rb
CHANGED
data/lib/outbox/rails/version.rb
CHANGED
data/outbox-rails.gemspec
CHANGED
@@ -8,9 +8,9 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Outbox::Rails::VERSION
|
9
9
|
spec.authors = ['Pete Browne']
|
10
10
|
spec.email = ['pete.browne@localmed.com']
|
11
|
-
spec.description = %q{Rails
|
12
|
-
spec.summary = %q{Rails
|
13
|
-
spec.homepage = 'https://github.com/localmed/outbox'
|
11
|
+
spec.description = %q{Rails Railtie for sending email, SMS, and push notifications using the Outbox gem.}
|
12
|
+
spec.summary = %q{Rails Railtie for sending email, SMS, and push notifications using the Outbox gem.}
|
13
|
+
spec.homepage = 'https://github.com/localmed/outbox-rails'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
@@ -18,8 +18,13 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_runtime_dependency 'outbox', '~> 0.1.
|
21
|
+
spec.add_runtime_dependency 'outbox', '~> 0.1.1'
|
22
|
+
spec.add_runtime_dependency 'rails', '~> 4.0.0'
|
22
23
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
23
24
|
spec.add_development_dependency 'rake'
|
24
25
|
spec.add_development_dependency 'rspec'
|
26
|
+
spec.add_development_dependency 'rspec-rails'
|
27
|
+
spec.add_development_dependency 'rspec_junit_formatter'
|
28
|
+
spec.add_development_dependency 'sqlite3'
|
29
|
+
spec.add_development_dependency 'combustion'
|
25
30
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class BaseNotifier < Outbox::Notifier
|
2
|
+
defaults email: { from: 'noreply@myapp.com' }
|
3
|
+
|
4
|
+
def welcome(hash = {})
|
5
|
+
render_message(hash)
|
6
|
+
end
|
7
|
+
|
8
|
+
def implicit_multipart(hash = {})
|
9
|
+
attachments['invoice.pdf'] = 'This is test File content' if hash.delete(:attachments)
|
10
|
+
render_message(hash)
|
11
|
+
end
|
12
|
+
|
13
|
+
def composed_message_with_implicit_render
|
14
|
+
email do
|
15
|
+
subject 'Composed Message'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Composed Message with Implicit Render
|
@@ -0,0 +1 @@
|
|
1
|
+
HTML Implicit Multipart
|
@@ -0,0 +1 @@
|
|
1
|
+
TEXT Implicit Multipart
|
@@ -0,0 +1 @@
|
|
1
|
+
Welcome
|
@@ -0,0 +1 @@
|
|
1
|
+
*.log
|
File without changes
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Outbox::Notifier do
|
4
|
+
describe 'calling actions' do
|
5
|
+
it 'does not raise error' do
|
6
|
+
expect{BaseNotifier.welcome}.not_to raise_error()
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'returns an Outbox Message' do
|
10
|
+
message = BaseNotifier.welcome
|
11
|
+
expect(message).to be_an_instance_of(Outbox::Message)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'passes the args to the action' do
|
15
|
+
message = BaseNotifier.welcome email: { subject: 'Subject Line' }
|
16
|
+
expect(message.email.subject).to eq('Subject Line')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '.logger' do
|
21
|
+
it 'defaults to Rails.logger' do
|
22
|
+
expect(BaseNotifier.logger).to be(Rails.logger)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '.defaults' do
|
27
|
+
it 'sets the default values' do
|
28
|
+
message = BaseNotifier.welcome
|
29
|
+
expect(message.email.from).to eq(['noreply@myapp.com'])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '.notifier_name' do
|
34
|
+
it 'returns the underscored class name' do
|
35
|
+
expect(BaseNotifier.notifier_name).to eq('base_notifier')
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'returns anonymous for anonymous classes' do
|
39
|
+
notifier = Class.new Outbox::Notifier
|
40
|
+
expect(notifier.notifier_name).to eq('anonymous')
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'is configurable' do
|
44
|
+
notifier = Class.new Outbox::Notifier
|
45
|
+
notifier.notifier_name 'some_notifier'
|
46
|
+
expect(notifier.notifier_name).to eq('some_notifier')
|
47
|
+
notifier.notifier_name = 'another_notifier'
|
48
|
+
expect(notifier.notifier_name).to eq('another_notifier')
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe '#email' do
|
53
|
+
it 'composes an email using Outbox interface' do
|
54
|
+
message = BaseNotifier.composed_message_with_implicit_render
|
55
|
+
expect(message.email.from).to eq(['noreply@myapp.com'])
|
56
|
+
expect(message.email.subject).to eq('Composed Message')
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe '#message' do
|
61
|
+
it 'renders the template' do
|
62
|
+
message = BaseNotifier.welcome
|
63
|
+
expect(message.email.body.encoded.strip).to eq('Welcome')
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'handles multipart templates' do
|
67
|
+
message = BaseNotifier.implicit_multipart
|
68
|
+
expect(message.email.parts.size).to eq(2)
|
69
|
+
part_1 = message.email.parts[0]
|
70
|
+
part_2 = message.email.parts[1]
|
71
|
+
expect(part_1.mime_type).to eq('text/plain')
|
72
|
+
expect(part_1.body.encoded.strip).to eq('TEXT Implicit Multipart')
|
73
|
+
expect(part_2.mime_type).to eq('text/html')
|
74
|
+
expect(part_2.body.encoded.strip).to eq('HTML Implicit Multipart')
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: outbox-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
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-08-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: outbox
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.1.
|
21
|
+
version: 0.1.1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,23 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.1.
|
29
|
+
version: 0.1.1
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rails
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 4.0.0
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 4.0.0
|
30
46
|
- !ruby/object:Gem::Dependency
|
31
47
|
name: bundler
|
32
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -75,7 +91,72 @@ dependencies:
|
|
75
91
|
- - ! '>='
|
76
92
|
- !ruby/object:Gem::Version
|
77
93
|
version: '0'
|
78
|
-
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: rspec-rails
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: rspec_junit_formatter
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: sqlite3
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: combustion
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
description: Rails Railtie for sending email, SMS, and push notifications using the
|
159
|
+
Outbox gem.
|
79
160
|
email:
|
80
161
|
- pete.browne@localmed.com
|
81
162
|
executables: []
|
@@ -88,13 +169,27 @@ files:
|
|
88
169
|
- LICENSE.txt
|
89
170
|
- README.md
|
90
171
|
- Rakefile
|
172
|
+
- config.ru
|
91
173
|
- lib/outbox-rails.rb
|
174
|
+
- lib/outbox/notifier.rb
|
92
175
|
- lib/outbox/rails.rb
|
176
|
+
- lib/outbox/rails/railtie.rb
|
93
177
|
- lib/outbox/rails/version.rb
|
94
178
|
- outbox-rails.gemspec
|
179
|
+
- spec/internal/app/notifiers/base_notifier.rb
|
180
|
+
- spec/internal/app/views/base_notifier/composed_message_with_implicit_render.erb
|
181
|
+
- spec/internal/app/views/base_notifier/implicit_multipart.html.erb
|
182
|
+
- spec/internal/app/views/base_notifier/implicit_multipart.text.erb
|
183
|
+
- spec/internal/app/views/base_notifier/welcome.erb
|
184
|
+
- spec/internal/config/database.yml
|
185
|
+
- spec/internal/config/routes.rb
|
186
|
+
- spec/internal/db/schema.rb
|
187
|
+
- spec/internal/log/.gitignore
|
188
|
+
- spec/internal/public/favicon.ico
|
189
|
+
- spec/outbox/rails/notifier_spec.rb
|
95
190
|
- spec/outbox/rails_spec.rb
|
96
191
|
- spec/spec_helper.rb
|
97
|
-
homepage: https://github.com/localmed/outbox
|
192
|
+
homepage: https://github.com/localmed/outbox-rails
|
98
193
|
licenses:
|
99
194
|
- MIT
|
100
195
|
post_install_message:
|
@@ -109,7 +204,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
109
204
|
version: '0'
|
110
205
|
segments:
|
111
206
|
- 0
|
112
|
-
hash: -
|
207
|
+
hash: -2287336915534194965
|
113
208
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
209
|
none: false
|
115
210
|
requirements:
|
@@ -118,13 +213,25 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
213
|
version: '0'
|
119
214
|
segments:
|
120
215
|
- 0
|
121
|
-
hash: -
|
216
|
+
hash: -2287336915534194965
|
122
217
|
requirements: []
|
123
218
|
rubyforge_project:
|
124
219
|
rubygems_version: 1.8.23
|
125
220
|
signing_key:
|
126
221
|
specification_version: 3
|
127
|
-
summary: Rails
|
222
|
+
summary: Rails Railtie for sending email, SMS, and push notifications using the Outbox
|
223
|
+
gem.
|
128
224
|
test_files:
|
225
|
+
- spec/internal/app/notifiers/base_notifier.rb
|
226
|
+
- spec/internal/app/views/base_notifier/composed_message_with_implicit_render.erb
|
227
|
+
- spec/internal/app/views/base_notifier/implicit_multipart.html.erb
|
228
|
+
- spec/internal/app/views/base_notifier/implicit_multipart.text.erb
|
229
|
+
- spec/internal/app/views/base_notifier/welcome.erb
|
230
|
+
- spec/internal/config/database.yml
|
231
|
+
- spec/internal/config/routes.rb
|
232
|
+
- spec/internal/db/schema.rb
|
233
|
+
- spec/internal/log/.gitignore
|
234
|
+
- spec/internal/public/favicon.ico
|
235
|
+
- spec/outbox/rails/notifier_spec.rb
|
129
236
|
- spec/outbox/rails_spec.rb
|
130
237
|
- spec/spec_helper.rb
|