actionmailbox 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/Gemfile +8 -0
  4. data/Gemfile.lock +159 -0
  5. data/LICENSE +21 -0
  6. data/README.md +278 -0
  7. data/Rakefile +27 -0
  8. data/actionmailbox.gemspec +27 -0
  9. data/app/controllers/action_mailbox/base_controller.rb +43 -0
  10. data/app/controllers/action_mailbox/ingresses/amazon/inbound_emails_controller.rb +50 -0
  11. data/app/controllers/action_mailbox/ingresses/mailgun/inbound_emails_controller.rb +99 -0
  12. data/app/controllers/action_mailbox/ingresses/mandrill/inbound_emails_controller.rb +78 -0
  13. data/app/controllers/action_mailbox/ingresses/postfix/inbound_emails_controller.rb +55 -0
  14. data/app/controllers/action_mailbox/ingresses/sendgrid/inbound_emails_controller.rb +50 -0
  15. data/app/controllers/rails/conductor/action_mailbox/inbound_emails_controller.rb +27 -0
  16. data/app/controllers/rails/conductor/action_mailbox/reroutes_controller.rb +15 -0
  17. data/app/controllers/rails/conductor/base_controller.rb +10 -0
  18. data/app/jobs/action_mailbox/incineration_job.rb +18 -0
  19. data/app/jobs/action_mailbox/routing_job.rb +9 -0
  20. data/app/models/action_mailbox/inbound_email.rb +43 -0
  21. data/app/models/action_mailbox/inbound_email/incineratable.rb +18 -0
  22. data/app/models/action_mailbox/inbound_email/incineratable/incineration.rb +22 -0
  23. data/app/models/action_mailbox/inbound_email/message_id.rb +36 -0
  24. data/app/models/action_mailbox/inbound_email/routable.rb +22 -0
  25. data/app/views/layouts/rails/conductor.html.erb +7 -0
  26. data/app/views/rails/conductor/action_mailbox/inbound_emails/index.html.erb +15 -0
  27. data/app/views/rails/conductor/action_mailbox/inbound_emails/new.html.erb +42 -0
  28. data/app/views/rails/conductor/action_mailbox/inbound_emails/show.html.erb +15 -0
  29. data/bin/test +5 -0
  30. data/config/routes.rb +19 -0
  31. data/db/migrate/20180917164000_create_action_mailbox_tables.rb +11 -0
  32. data/lib/action_mailbox.rb +15 -0
  33. data/lib/action_mailbox/base.rb +111 -0
  34. data/lib/action_mailbox/callbacks.rb +32 -0
  35. data/lib/action_mailbox/engine.rb +34 -0
  36. data/lib/action_mailbox/mail_ext.rb +4 -0
  37. data/lib/action_mailbox/mail_ext/address_equality.rb +5 -0
  38. data/lib/action_mailbox/mail_ext/address_wrapping.rb +5 -0
  39. data/lib/action_mailbox/mail_ext/addresses.rb +25 -0
  40. data/lib/action_mailbox/mail_ext/from_source.rb +5 -0
  41. data/lib/action_mailbox/mail_ext/recipients.rb +5 -0
  42. data/lib/action_mailbox/postfix_relayer.rb +67 -0
  43. data/lib/action_mailbox/router.rb +38 -0
  44. data/lib/action_mailbox/router/route.rb +38 -0
  45. data/lib/action_mailbox/routing.rb +20 -0
  46. data/lib/action_mailbox/test_case.rb +8 -0
  47. data/lib/action_mailbox/test_helper.rb +42 -0
  48. data/lib/action_mailbox/version.rb +3 -0
  49. data/lib/tasks/ingress.rake +24 -0
  50. data/lib/tasks/install.rake +20 -0
  51. data/lib/templates/installer.rb +4 -0
  52. data/lib/templates/mailboxes/application_mailbox.rb +3 -0
  53. data/test/controllers/ingresses/amazon/inbound_emails_controller_test.rb +20 -0
  54. data/test/controllers/ingresses/mailgun/inbound_emails_controller_test.rb +89 -0
  55. data/test/controllers/ingresses/mandrill/inbound_emails_controller_test.rb +58 -0
  56. data/test/controllers/ingresses/postfix/inbound_emails_controller_test.rb +54 -0
  57. data/test/controllers/ingresses/sendgrid/inbound_emails_controller_test.rb +44 -0
  58. data/test/dummy/.babelrc +18 -0
  59. data/test/dummy/.gitignore +3 -0
  60. data/test/dummy/.postcssrc.yml +3 -0
  61. data/test/dummy/Rakefile +6 -0
  62. data/test/dummy/app/assets/config/manifest.js +3 -0
  63. data/test/dummy/app/assets/images/.keep +0 -0
  64. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  65. data/test/dummy/app/assets/stylesheets/scaffold.css +80 -0
  66. data/test/dummy/app/channels/application_cable/channel.rb +4 -0
  67. data/test/dummy/app/channels/application_cable/connection.rb +4 -0
  68. data/test/dummy/app/controllers/application_controller.rb +2 -0
  69. data/test/dummy/app/controllers/concerns/.keep +0 -0
  70. data/test/dummy/app/helpers/application_helper.rb +2 -0
  71. data/test/dummy/app/javascript/packs/application.js +0 -0
  72. data/test/dummy/app/jobs/application_job.rb +2 -0
  73. data/test/dummy/app/mailboxes/application_mailbox.rb +2 -0
  74. data/test/dummy/app/mailboxes/messages_mailbox.rb +4 -0
  75. data/test/dummy/app/mailers/application_mailer.rb +4 -0
  76. data/test/dummy/app/models/application_record.rb +3 -0
  77. data/test/dummy/app/models/concerns/.keep +0 -0
  78. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  79. data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
  80. data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
  81. data/test/dummy/bin/bundle +3 -0
  82. data/test/dummy/bin/rails +4 -0
  83. data/test/dummy/bin/rake +4 -0
  84. data/test/dummy/bin/setup +36 -0
  85. data/test/dummy/bin/update +31 -0
  86. data/test/dummy/bin/yarn +11 -0
  87. data/test/dummy/config.ru +5 -0
  88. data/test/dummy/config/application.rb +19 -0
  89. data/test/dummy/config/boot.rb +5 -0
  90. data/test/dummy/config/cable.yml +10 -0
  91. data/test/dummy/config/database.yml +25 -0
  92. data/test/dummy/config/environment.rb +5 -0
  93. data/test/dummy/config/environments/development.rb +63 -0
  94. data/test/dummy/config/environments/production.rb +96 -0
  95. data/test/dummy/config/environments/test.rb +46 -0
  96. data/test/dummy/config/initializers/application_controller_renderer.rb +8 -0
  97. data/test/dummy/config/initializers/assets.rb +14 -0
  98. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  99. data/test/dummy/config/initializers/content_security_policy.rb +22 -0
  100. data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
  101. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  102. data/test/dummy/config/initializers/inflections.rb +16 -0
  103. data/test/dummy/config/initializers/mime_types.rb +4 -0
  104. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  105. data/test/dummy/config/locales/en.yml +33 -0
  106. data/test/dummy/config/puma.rb +34 -0
  107. data/test/dummy/config/routes.rb +4 -0
  108. data/test/dummy/config/spring.rb +6 -0
  109. data/test/dummy/config/storage.yml +35 -0
  110. data/test/dummy/config/webpack/development.js +3 -0
  111. data/test/dummy/config/webpack/environment.js +3 -0
  112. data/test/dummy/config/webpack/production.js +3 -0
  113. data/test/dummy/config/webpack/test.js +3 -0
  114. data/test/dummy/config/webpacker.yml +65 -0
  115. data/test/dummy/db/migrate/20180208205311_create_action_mailroom_tables.rb +11 -0
  116. data/test/dummy/db/migrate/20180212164506_create_active_storage_tables.active_storage.rb +26 -0
  117. data/test/dummy/db/schema.rb +43 -0
  118. data/test/dummy/lib/assets/.keep +0 -0
  119. data/test/dummy/log/.keep +0 -0
  120. data/test/dummy/package.json +11 -0
  121. data/test/dummy/public/404.html +67 -0
  122. data/test/dummy/public/422.html +67 -0
  123. data/test/dummy/public/500.html +66 -0
  124. data/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
  125. data/test/dummy/public/apple-touch-icon.png +0 -0
  126. data/test/dummy/public/favicon.ico +0 -0
  127. data/test/dummy/storage/.keep +0 -0
  128. data/test/dummy/yarn.lock +6071 -0
  129. data/test/fixtures/files/welcome.eml +631 -0
  130. data/test/jobs/incineration_job_test.rb +17 -0
  131. data/test/test_helper.rb +54 -0
  132. data/test/unit/inbound_email/incineration_test.rb +45 -0
  133. data/test/unit/inbound_email/message_id_test.rb +13 -0
  134. data/test/unit/inbound_email_test.rb +13 -0
  135. data/test/unit/mail_ext/address_equality_test.rb +9 -0
  136. data/test/unit/mail_ext/address_wrapping_test.rb +11 -0
  137. data/test/unit/mail_ext/recipients_test.rb +33 -0
  138. data/test/unit/mailbox/bouncing_test.rb +29 -0
  139. data/test/unit/mailbox/callbacks_test.rb +75 -0
  140. data/test/unit/mailbox/routing_test.rb +30 -0
  141. data/test/unit/mailbox/state_test.rb +49 -0
  142. data/test/unit/postfix_relayer_test.rb +90 -0
  143. data/test/unit/router_test.rb +137 -0
  144. metadata +355 -0
@@ -0,0 +1,137 @@
1
+ require_relative '../test_helper'
2
+
3
+ class RootMailbox < ActionMailbox::Base
4
+ def process
5
+ $processed_by = self.class.to_s
6
+ $processed_mail = mail
7
+ end
8
+ end
9
+
10
+ class FirstMailbox < RootMailbox
11
+ end
12
+
13
+ class SecondMailbox < RootMailbox
14
+ end
15
+
16
+ module Nested
17
+ class FirstMailbox < RootMailbox
18
+ end
19
+ end
20
+
21
+ class FirstMailboxAddress
22
+ def match?(inbound_email)
23
+ inbound_email.mail.to.include?("replies-class@example.com")
24
+ end
25
+ end
26
+
27
+ module ActionMailbox
28
+ class RouterTest < ActiveSupport::TestCase
29
+ setup do
30
+ @router = ActionMailbox::Router.new
31
+ $processed_by = $processed_mail = nil
32
+ end
33
+
34
+ test "single string route" do
35
+ @router.add_routes("first@example.com" => :first)
36
+
37
+ inbound_email = create_inbound_email_from_mail(to: "first@example.com", subject: "This is a reply")
38
+ @router.route inbound_email
39
+ assert_equal "FirstMailbox", $processed_by
40
+ assert_equal inbound_email.mail, $processed_mail
41
+ end
42
+
43
+ test "single string routing on cc" do
44
+ @router.add_routes("first@example.com" => :first)
45
+
46
+ inbound_email = create_inbound_email_from_mail(to: "someone@example.com", cc: "first@example.com", subject: "This is a reply")
47
+ @router.route inbound_email
48
+ assert_equal "FirstMailbox", $processed_by
49
+ assert_equal inbound_email.mail, $processed_mail
50
+ end
51
+
52
+ test "single string routing case-insensitively" do
53
+ @router.add_routes("first@example.com" => :first)
54
+
55
+ inbound_email = create_inbound_email_from_mail(to: "FIRST@example.com", subject: "This is a reply")
56
+ @router.route inbound_email
57
+ assert_equal "FirstMailbox", $processed_by
58
+ assert_equal inbound_email.mail, $processed_mail
59
+ end
60
+
61
+ test "multiple string routes" do
62
+ @router.add_routes("first@example.com" => :first, "second@example.com" => :second)
63
+
64
+ inbound_email = create_inbound_email_from_mail(to: "first@example.com", subject: "This is a reply")
65
+ @router.route inbound_email
66
+ assert_equal "FirstMailbox", $processed_by
67
+ assert_equal inbound_email.mail, $processed_mail
68
+
69
+ inbound_email = create_inbound_email_from_mail(to: "second@example.com", subject: "This is a reply")
70
+ @router.route inbound_email
71
+ assert_equal "SecondMailbox", $processed_by
72
+ assert_equal inbound_email.mail, $processed_mail
73
+ end
74
+
75
+ test "single regexp route" do
76
+ @router.add_routes(/replies-\w+@example.com/ => :first, "replies-nowhere@example.com" => :second)
77
+
78
+ inbound_email = create_inbound_email_from_mail(to: "replies-okay@example.com", subject: "This is a reply")
79
+ @router.route inbound_email
80
+ assert_equal "FirstMailbox", $processed_by
81
+ end
82
+
83
+ test "single proc route" do
84
+ @router.add_route \
85
+ ->(inbound_email) { inbound_email.mail.to.include?("replies-proc@example.com") },
86
+ to: :second
87
+
88
+ @router.route create_inbound_email_from_mail(to: "replies-proc@example.com", subject: "This is a reply")
89
+ assert_equal "SecondMailbox", $processed_by
90
+ end
91
+
92
+ test "address class route" do
93
+ @router.add_route FirstMailboxAddress.new, to: :first
94
+ @router.route create_inbound_email_from_mail(to: "replies-class@example.com", subject: "This is a reply")
95
+ assert_equal "FirstMailbox", $processed_by
96
+ end
97
+
98
+ test "string route to nested mailbox" do
99
+ @router.add_route "first@example.com", to: "nested/first"
100
+
101
+ inbound_email = create_inbound_email_from_mail(to: "first@example.com", subject: "This is a reply")
102
+ @router.route inbound_email
103
+ assert_equal "Nested::FirstMailbox", $processed_by
104
+ end
105
+
106
+ test "all as the only route" do
107
+ @router.add_route :all, to: :first
108
+ @router.route create_inbound_email_from_mail(to: "replies-class@example.com", subject: "This is a reply")
109
+ assert_equal "FirstMailbox", $processed_by
110
+ end
111
+
112
+ test "all as the second route" do
113
+ @router.add_route FirstMailboxAddress.new, to: :first
114
+ @router.add_route :all, to: :second
115
+
116
+ @router.route create_inbound_email_from_mail(to: "replies-class@example.com", subject: "This is a reply")
117
+ assert_equal "FirstMailbox", $processed_by
118
+
119
+ @router.route create_inbound_email_from_mail(to: "elsewhere@example.com", subject: "This is a reply")
120
+ assert_equal "SecondMailbox", $processed_by
121
+ end
122
+
123
+ test "missing route" do
124
+ assert_raises(ActionMailbox::Router::RoutingError) do
125
+ inbound_email = create_inbound_email_from_mail(to: "going-nowhere@example.com", subject: "This is a reply")
126
+ @router.route inbound_email
127
+ assert inbound_email.bounced?
128
+ end
129
+ end
130
+
131
+ test "invalid address" do
132
+ assert_raises(ArgumentError) do
133
+ @router.add_route Array.new, to: :first
134
+ end
135
+ end
136
+ end
137
+ end
metadata ADDED
@@ -0,0 +1,355 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: actionmailbox
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - David Heinemeier Hansson
8
+ - George Claghorn
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2018-12-14 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: 5.2.0
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: 5.2.0
28
+ - !ruby/object:Gem::Dependency
29
+ name: bundler
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '1.15'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '1.15'
42
+ - !ruby/object:Gem::Dependency
43
+ name: sqlite3
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: byebug
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: webmock
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ description:
85
+ email:
86
+ - david@loudthinking.com
87
+ - george@basecamp.com
88
+ executables: []
89
+ extensions: []
90
+ extra_rdoc_files: []
91
+ files:
92
+ - ".gitignore"
93
+ - Gemfile
94
+ - Gemfile.lock
95
+ - LICENSE
96
+ - README.md
97
+ - Rakefile
98
+ - actionmailbox.gemspec
99
+ - app/controllers/action_mailbox/base_controller.rb
100
+ - app/controllers/action_mailbox/ingresses/amazon/inbound_emails_controller.rb
101
+ - app/controllers/action_mailbox/ingresses/mailgun/inbound_emails_controller.rb
102
+ - app/controllers/action_mailbox/ingresses/mandrill/inbound_emails_controller.rb
103
+ - app/controllers/action_mailbox/ingresses/postfix/inbound_emails_controller.rb
104
+ - app/controllers/action_mailbox/ingresses/sendgrid/inbound_emails_controller.rb
105
+ - app/controllers/rails/conductor/action_mailbox/inbound_emails_controller.rb
106
+ - app/controllers/rails/conductor/action_mailbox/reroutes_controller.rb
107
+ - app/controllers/rails/conductor/base_controller.rb
108
+ - app/jobs/action_mailbox/incineration_job.rb
109
+ - app/jobs/action_mailbox/routing_job.rb
110
+ - app/models/action_mailbox/inbound_email.rb
111
+ - app/models/action_mailbox/inbound_email/incineratable.rb
112
+ - app/models/action_mailbox/inbound_email/incineratable/incineration.rb
113
+ - app/models/action_mailbox/inbound_email/message_id.rb
114
+ - app/models/action_mailbox/inbound_email/routable.rb
115
+ - app/views/layouts/rails/conductor.html.erb
116
+ - app/views/rails/conductor/action_mailbox/inbound_emails/index.html.erb
117
+ - app/views/rails/conductor/action_mailbox/inbound_emails/new.html.erb
118
+ - app/views/rails/conductor/action_mailbox/inbound_emails/show.html.erb
119
+ - bin/test
120
+ - config/routes.rb
121
+ - db/migrate/20180917164000_create_action_mailbox_tables.rb
122
+ - lib/action_mailbox.rb
123
+ - lib/action_mailbox/base.rb
124
+ - lib/action_mailbox/callbacks.rb
125
+ - lib/action_mailbox/engine.rb
126
+ - lib/action_mailbox/mail_ext.rb
127
+ - lib/action_mailbox/mail_ext/address_equality.rb
128
+ - lib/action_mailbox/mail_ext/address_wrapping.rb
129
+ - lib/action_mailbox/mail_ext/addresses.rb
130
+ - lib/action_mailbox/mail_ext/from_source.rb
131
+ - lib/action_mailbox/mail_ext/recipients.rb
132
+ - lib/action_mailbox/postfix_relayer.rb
133
+ - lib/action_mailbox/router.rb
134
+ - lib/action_mailbox/router/route.rb
135
+ - lib/action_mailbox/routing.rb
136
+ - lib/action_mailbox/test_case.rb
137
+ - lib/action_mailbox/test_helper.rb
138
+ - lib/action_mailbox/version.rb
139
+ - lib/tasks/ingress.rake
140
+ - lib/tasks/install.rake
141
+ - lib/templates/installer.rb
142
+ - lib/templates/mailboxes/application_mailbox.rb
143
+ - test/controllers/ingresses/amazon/inbound_emails_controller_test.rb
144
+ - test/controllers/ingresses/mailgun/inbound_emails_controller_test.rb
145
+ - test/controllers/ingresses/mandrill/inbound_emails_controller_test.rb
146
+ - test/controllers/ingresses/postfix/inbound_emails_controller_test.rb
147
+ - test/controllers/ingresses/sendgrid/inbound_emails_controller_test.rb
148
+ - test/dummy/.babelrc
149
+ - test/dummy/.gitignore
150
+ - test/dummy/.postcssrc.yml
151
+ - test/dummy/Rakefile
152
+ - test/dummy/app/assets/config/manifest.js
153
+ - test/dummy/app/assets/images/.keep
154
+ - test/dummy/app/assets/stylesheets/application.css
155
+ - test/dummy/app/assets/stylesheets/scaffold.css
156
+ - test/dummy/app/channels/application_cable/channel.rb
157
+ - test/dummy/app/channels/application_cable/connection.rb
158
+ - test/dummy/app/controllers/application_controller.rb
159
+ - test/dummy/app/controllers/concerns/.keep
160
+ - test/dummy/app/helpers/application_helper.rb
161
+ - test/dummy/app/javascript/packs/application.js
162
+ - test/dummy/app/jobs/application_job.rb
163
+ - test/dummy/app/mailboxes/application_mailbox.rb
164
+ - test/dummy/app/mailboxes/messages_mailbox.rb
165
+ - test/dummy/app/mailers/application_mailer.rb
166
+ - test/dummy/app/models/application_record.rb
167
+ - test/dummy/app/models/concerns/.keep
168
+ - test/dummy/app/views/layouts/application.html.erb
169
+ - test/dummy/app/views/layouts/mailer.html.erb
170
+ - test/dummy/app/views/layouts/mailer.text.erb
171
+ - test/dummy/bin/bundle
172
+ - test/dummy/bin/rails
173
+ - test/dummy/bin/rake
174
+ - test/dummy/bin/setup
175
+ - test/dummy/bin/update
176
+ - test/dummy/bin/yarn
177
+ - test/dummy/config.ru
178
+ - test/dummy/config/application.rb
179
+ - test/dummy/config/boot.rb
180
+ - test/dummy/config/cable.yml
181
+ - test/dummy/config/database.yml
182
+ - test/dummy/config/environment.rb
183
+ - test/dummy/config/environments/development.rb
184
+ - test/dummy/config/environments/production.rb
185
+ - test/dummy/config/environments/test.rb
186
+ - test/dummy/config/initializers/application_controller_renderer.rb
187
+ - test/dummy/config/initializers/assets.rb
188
+ - test/dummy/config/initializers/backtrace_silencers.rb
189
+ - test/dummy/config/initializers/content_security_policy.rb
190
+ - test/dummy/config/initializers/cookies_serializer.rb
191
+ - test/dummy/config/initializers/filter_parameter_logging.rb
192
+ - test/dummy/config/initializers/inflections.rb
193
+ - test/dummy/config/initializers/mime_types.rb
194
+ - test/dummy/config/initializers/wrap_parameters.rb
195
+ - test/dummy/config/locales/en.yml
196
+ - test/dummy/config/puma.rb
197
+ - test/dummy/config/routes.rb
198
+ - test/dummy/config/spring.rb
199
+ - test/dummy/config/storage.yml
200
+ - test/dummy/config/webpack/development.js
201
+ - test/dummy/config/webpack/environment.js
202
+ - test/dummy/config/webpack/production.js
203
+ - test/dummy/config/webpack/test.js
204
+ - test/dummy/config/webpacker.yml
205
+ - test/dummy/db/migrate/20180208205311_create_action_mailroom_tables.rb
206
+ - test/dummy/db/migrate/20180212164506_create_active_storage_tables.active_storage.rb
207
+ - test/dummy/db/schema.rb
208
+ - test/dummy/lib/assets/.keep
209
+ - test/dummy/log/.keep
210
+ - test/dummy/log/development.log
211
+ - test/dummy/package.json
212
+ - test/dummy/public/404.html
213
+ - test/dummy/public/422.html
214
+ - test/dummy/public/500.html
215
+ - test/dummy/public/apple-touch-icon-precomposed.png
216
+ - test/dummy/public/apple-touch-icon.png
217
+ - test/dummy/public/favicon.ico
218
+ - test/dummy/storage/.keep
219
+ - test/dummy/tmp/.keep
220
+ - test/dummy/tmp/storage/.keep
221
+ - test/dummy/yarn.lock
222
+ - test/fixtures/files/welcome.eml
223
+ - test/jobs/incineration_job_test.rb
224
+ - test/test_helper.rb
225
+ - test/unit/inbound_email/incineration_test.rb
226
+ - test/unit/inbound_email/message_id_test.rb
227
+ - test/unit/inbound_email_test.rb
228
+ - test/unit/mail_ext/address_equality_test.rb
229
+ - test/unit/mail_ext/address_wrapping_test.rb
230
+ - test/unit/mail_ext/recipients_test.rb
231
+ - test/unit/mailbox/bouncing_test.rb
232
+ - test/unit/mailbox/callbacks_test.rb
233
+ - test/unit/mailbox/routing_test.rb
234
+ - test/unit/mailbox/state_test.rb
235
+ - test/unit/postfix_relayer_test.rb
236
+ - test/unit/router_test.rb
237
+ homepage: https://github.com/rails/actionmailbox
238
+ licenses:
239
+ - MIT
240
+ metadata: {}
241
+ post_install_message:
242
+ rdoc_options: []
243
+ require_paths:
244
+ - lib
245
+ required_ruby_version: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - ">="
248
+ - !ruby/object:Gem::Version
249
+ version: 2.5.0
250
+ required_rubygems_version: !ruby/object:Gem::Requirement
251
+ requirements:
252
+ - - ">="
253
+ - !ruby/object:Gem::Version
254
+ version: '0'
255
+ requirements: []
256
+ rubyforge_project:
257
+ rubygems_version: 2.7.3
258
+ signing_key:
259
+ specification_version: 4
260
+ summary: Receive and process incoming emails in Rails
261
+ test_files:
262
+ - test/controllers/ingresses/amazon/inbound_emails_controller_test.rb
263
+ - test/controllers/ingresses/mailgun/inbound_emails_controller_test.rb
264
+ - test/controllers/ingresses/mandrill/inbound_emails_controller_test.rb
265
+ - test/controllers/ingresses/postfix/inbound_emails_controller_test.rb
266
+ - test/controllers/ingresses/sendgrid/inbound_emails_controller_test.rb
267
+ - test/dummy/.babelrc
268
+ - test/dummy/.gitignore
269
+ - test/dummy/.postcssrc.yml
270
+ - test/dummy/Rakefile
271
+ - test/dummy/app/assets/config/manifest.js
272
+ - test/dummy/app/assets/images/.keep
273
+ - test/dummy/app/assets/stylesheets/application.css
274
+ - test/dummy/app/assets/stylesheets/scaffold.css
275
+ - test/dummy/app/channels/application_cable/channel.rb
276
+ - test/dummy/app/channels/application_cable/connection.rb
277
+ - test/dummy/app/controllers/application_controller.rb
278
+ - test/dummy/app/controllers/concerns/.keep
279
+ - test/dummy/app/helpers/application_helper.rb
280
+ - test/dummy/app/javascript/packs/application.js
281
+ - test/dummy/app/jobs/application_job.rb
282
+ - test/dummy/app/mailboxes/application_mailbox.rb
283
+ - test/dummy/app/mailboxes/messages_mailbox.rb
284
+ - test/dummy/app/mailers/application_mailer.rb
285
+ - test/dummy/app/models/application_record.rb
286
+ - test/dummy/app/models/concerns/.keep
287
+ - test/dummy/app/views/layouts/application.html.erb
288
+ - test/dummy/app/views/layouts/mailer.html.erb
289
+ - test/dummy/app/views/layouts/mailer.text.erb
290
+ - test/dummy/bin/bundle
291
+ - test/dummy/bin/rails
292
+ - test/dummy/bin/rake
293
+ - test/dummy/bin/setup
294
+ - test/dummy/bin/update
295
+ - test/dummy/bin/yarn
296
+ - test/dummy/config.ru
297
+ - test/dummy/config/application.rb
298
+ - test/dummy/config/boot.rb
299
+ - test/dummy/config/cable.yml
300
+ - test/dummy/config/database.yml
301
+ - test/dummy/config/environment.rb
302
+ - test/dummy/config/environments/development.rb
303
+ - test/dummy/config/environments/production.rb
304
+ - test/dummy/config/environments/test.rb
305
+ - test/dummy/config/initializers/application_controller_renderer.rb
306
+ - test/dummy/config/initializers/assets.rb
307
+ - test/dummy/config/initializers/backtrace_silencers.rb
308
+ - test/dummy/config/initializers/content_security_policy.rb
309
+ - test/dummy/config/initializers/cookies_serializer.rb
310
+ - test/dummy/config/initializers/filter_parameter_logging.rb
311
+ - test/dummy/config/initializers/inflections.rb
312
+ - test/dummy/config/initializers/mime_types.rb
313
+ - test/dummy/config/initializers/wrap_parameters.rb
314
+ - test/dummy/config/locales/en.yml
315
+ - test/dummy/config/puma.rb
316
+ - test/dummy/config/routes.rb
317
+ - test/dummy/config/spring.rb
318
+ - test/dummy/config/storage.yml
319
+ - test/dummy/config/webpack/development.js
320
+ - test/dummy/config/webpack/environment.js
321
+ - test/dummy/config/webpack/production.js
322
+ - test/dummy/config/webpack/test.js
323
+ - test/dummy/config/webpacker.yml
324
+ - test/dummy/db/migrate/20180208205311_create_action_mailroom_tables.rb
325
+ - test/dummy/db/migrate/20180212164506_create_active_storage_tables.active_storage.rb
326
+ - test/dummy/db/schema.rb
327
+ - test/dummy/lib/assets/.keep
328
+ - test/dummy/log/.keep
329
+ - test/dummy/log/development.log
330
+ - test/dummy/package.json
331
+ - test/dummy/public/404.html
332
+ - test/dummy/public/422.html
333
+ - test/dummy/public/500.html
334
+ - test/dummy/public/apple-touch-icon-precomposed.png
335
+ - test/dummy/public/apple-touch-icon.png
336
+ - test/dummy/public/favicon.ico
337
+ - test/dummy/storage/.keep
338
+ - test/dummy/tmp/.keep
339
+ - test/dummy/tmp/storage/.keep
340
+ - test/dummy/yarn.lock
341
+ - test/fixtures/files/welcome.eml
342
+ - test/jobs/incineration_job_test.rb
343
+ - test/test_helper.rb
344
+ - test/unit/inbound_email/incineration_test.rb
345
+ - test/unit/inbound_email/message_id_test.rb
346
+ - test/unit/inbound_email_test.rb
347
+ - test/unit/mail_ext/address_equality_test.rb
348
+ - test/unit/mail_ext/address_wrapping_test.rb
349
+ - test/unit/mail_ext/recipients_test.rb
350
+ - test/unit/mailbox/bouncing_test.rb
351
+ - test/unit/mailbox/callbacks_test.rb
352
+ - test/unit/mailbox/routing_test.rb
353
+ - test/unit/mailbox/state_test.rb
354
+ - test/unit/postfix_relayer_test.rb
355
+ - test/unit/router_test.rb