mno-enterprise-core 3.0.7 → 3.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.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/mno_enterprise/login-background.jpg +0 -0
  3. data/app/assets/stylesheets/mno_enterprise/mail.css +27 -0
  4. data/app/helpers/mno_enterprise/application_helper.rb +14 -0
  5. data/app/helpers/mno_enterprise/impersonate_helper.rb +1 -1
  6. data/app/models/mno_enterprise/app.rb +2 -1
  7. data/app/models/mno_enterprise/base_resource.rb +1 -2
  8. data/app/models/mno_enterprise/impac/dashboard.rb +3 -1
  9. data/app/models/mno_enterprise/impac/kpi.rb +1 -1
  10. data/app/models/mno_enterprise/impac/widget.rb +1 -1
  11. data/app/models/mno_enterprise/org_invite.rb +2 -1
  12. data/app/models/mno_enterprise/tenant.rb +2 -4
  13. data/app/models/mno_enterprise/user.rb +6 -0
  14. data/app/pdf/mno_enterprise/invoice_pdf.rb +29 -12
  15. data/app/views/system_notifications/confirmation-instructions.html.erb +26 -0
  16. data/app/views/system_notifications/confirmation-instructions.text.erb +10 -0
  17. data/app/views/system_notifications/delete-request-instructions.html.erb +31 -0
  18. data/app/views/system_notifications/delete-request-instructions.text.erb +15 -0
  19. data/app/views/system_notifications/organization-invite-existing-user.html.erb +30 -0
  20. data/app/views/system_notifications/organization-invite-existing-user.text.erb +13 -0
  21. data/app/views/system_notifications/organization-invite-new-user.html.erb +30 -0
  22. data/app/views/system_notifications/organization-invite-new-user.text.erb +14 -0
  23. data/app/views/system_notifications/reconfirmation-instructions.html.erb +27 -0
  24. data/app/views/system_notifications/reconfirmation-instructions.text.erb +10 -0
  25. data/app/views/system_notifications/registration-instructions.html.erb +27 -0
  26. data/app/views/system_notifications/registration-instructions.text.erb +9 -0
  27. data/app/views/system_notifications/reset-password-instructions.html.erb +27 -0
  28. data/app/views/system_notifications/reset-password-instructions.text.erb +11 -0
  29. data/app/views/system_notifications/unlock-instructions.html.erb +27 -0
  30. data/app/views/system_notifications/unlock-instructions.text.erb +10 -0
  31. data/config/initializers/audit_log.rb +2 -0
  32. data/config/locales/templates/dashboard/organization/en.yml +2 -0
  33. data/config/locales/views/auth/registrations/en.yml +1 -1
  34. data/lib/devise/hooks/impersonatable.rb +14 -0
  35. data/lib/devise_extension.rb +9 -2
  36. data/lib/generators/mno_enterprise/install/templates/config/application.yml +6 -2
  37. data/lib/generators/mno_enterprise/install/templates/config/initializers/mno_enterprise.rb +6 -1
  38. data/lib/generators/mno_enterprise/install/templates/config/settings.yml +2 -0
  39. data/lib/generators/mno_enterprise/install/templates/config/settings/uat.yml +2 -2
  40. data/lib/generators/mno_enterprise/install/templates/stylesheets/main.less +4 -0
  41. data/lib/her_extension/model/relation.rb +0 -13
  42. data/lib/mandrill_client.rb +13 -41
  43. data/lib/mno_enterprise/concerns/models/ability.rb +12 -0
  44. data/lib/mno_enterprise/concerns/models/organization.rb +5 -2
  45. data/lib/mno_enterprise/core.rb +21 -8
  46. data/lib/mno_enterprise/mail_adapters/adapter.rb +51 -0
  47. data/lib/mno_enterprise/mail_adapters/mandrill_adapter.rb +39 -0
  48. data/lib/mno_enterprise/mail_adapters/smtp_adapter.rb +21 -0
  49. data/lib/mno_enterprise/mail_adapters/sparkpost_adapter.rb +56 -0
  50. data/lib/mno_enterprise/mail_adapters/test_adapter.rb +21 -0
  51. data/lib/mno_enterprise/mail_client.rb +28 -0
  52. data/lib/mno_enterprise/smtp_client.rb +32 -0
  53. data/lib/mno_enterprise/testing_support/factories/apps.rb +1 -2
  54. data/lib/mno_enterprise/testing_support/factories/impac/kpis.rb +1 -0
  55. data/lib/mno_enterprise/testing_support/factories/tenant.rb +1 -7
  56. data/lib/mno_enterprise/testing_support/mno_enterprise_api_test_helper.rb +1 -2
  57. data/lib/mno_enterprise/version.rb +1 -1
  58. data/spec/lib/her_extension/model/relation_spec.rb +0 -71
  59. data/spec/lib/mandrill_client_spec.rb +27 -42
  60. data/spec/lib/mno_enterprise/mail_adapters/adapter_spec.rb +29 -0
  61. data/spec/lib/mno_enterprise/mail_adapters/mandrill_adapter_spec.rb +53 -0
  62. data/spec/lib/mno_enterprise/mail_adapters/smtp_adapter_spec.rb +29 -0
  63. data/spec/lib/mno_enterprise/mail_adapters/sparkpost_adapter_spec.rb +60 -0
  64. data/spec/lib/mno_enterprise/mail_client_spec.rb +9 -0
  65. data/spec/lib/mno_enterprise/smtp_client_spec.rb +39 -0
  66. data/spec/models/mno_enterprise/ability_spec.rb +21 -0
  67. data/spec/models/mno_enterprise/base_resource_spec.rb +0 -22
  68. metadata +76 -24
  69. data/lib/her_extension/middleware/mnoe_raise_error.rb +0 -21
  70. data/lib/her_extension/model/associations/belongs_to_association.rb +0 -25
@@ -2,15 +2,20 @@ require "rails_helper"
2
2
 
3
3
  describe MandrillClient do
4
4
  subject { MandrillClient }
5
-
6
- describe 'email' do
5
+
6
+ before { allow(subject).to receive(:warn) }
7
+
8
+ describe '.deliver' do
9
+ before { MnoEnterprise::MailClient.adapter = :mandrill }
10
+ after { MnoEnterprise::MailClient.adapter = :test }
11
+
7
12
  let(:template) { :some_template }
8
13
  let(:from) {{ name: "John", email: 'j@e.com' }}
9
14
  let(:to) {{ name: "John", email: 'j@e.com' }}
10
15
  let(:vars) {{ some: 'var' }}
11
16
 
12
17
  it 'sends the right template with the right parameters' do
13
- expect(subject).to receive(:send_template).with(template,[],{
18
+ expect(MnoEnterprise::MailAdapters::MandrillAdapter).to receive(:send_template).with(template,[],{
14
19
  from_name: from[:name],
15
20
  from_email: from[:email],
16
21
  to: [{email: to[:email], type: :to, name: to[:name]}],
@@ -18,47 +23,27 @@ describe MandrillClient do
18
23
  })
19
24
  subject.deliver(template,from,to,vars)
20
25
  end
26
+
27
+ it 'prints a deprecation warning' do
28
+ expect(subject).to receive(:warn)
29
+ subject.deliver(template,from,to,vars)
30
+ end
21
31
  end
22
32
 
23
- describe "send_template" do
24
- let!(:orig_delivery_method) { Rails.configuration.action_mailer.delivery_method }
25
- before { MandrillClient.instance_variable_set("@client",nil) }
26
- before { Rails.configuration.action_mailer.delivery_method = :foo_method }
27
- after { Rails.configuration.action_mailer.delivery_method = orig_delivery_method }
28
-
29
- it 'delegates the method to a mandrill client' do
30
- messages = double('messages')
31
- mandrill = double('mandrill', messages: messages)
32
- expect(Mandrill::API).to receive(:new).and_return(mandrill)
33
-
34
- args = ['template_name', [], { foo: 'bar' }]
35
- expect(messages).to receive(:send_template).with(*args)
36
- MandrillClient.send_template(*args)
37
- end
38
-
39
- describe 'with nil delivery method' do
40
- before { Rails.configuration.action_mailer.delivery_method = nil }
41
-
42
- it 'delegates the method to a mandrill client' do
43
- messages = double('messages')
44
- mandrill = double('mandrill', messages: messages)
45
- expect(Mandrill::API).to receive(:new).and_return(mandrill)
46
-
47
- args = ['template_name', [], { foo: 'bar' }]
48
- expect(messages).to receive(:send_template).with(*args)
49
- MandrillClient.send_template(*args)
50
- end
33
+ describe '.send_template' do
34
+ let(:args) { ['template_name', [], { foo: 'bar' }] }
35
+
36
+ it 'delegates the method to the email adapter' do
37
+ adapter = double('adapter')
38
+ expect(MnoEnterprise::MailClient).to receive(:adapter).and_return(adapter)
39
+
40
+ expect(adapter).to receive(:send_template).with(*args)
41
+ subject.send_template(*args)
51
42
  end
52
-
53
- describe 'with :test delivery method' do
54
- before { Rails.configuration.action_mailer.delivery_method = :test }
55
-
56
- it 'does not send any email' do
57
- # test no expectation failure
58
- allow(Mandrill::API).to receive(:new).and_return(double('mandrill'))
59
- MandrillClient.send_template('1',[],{})
60
- end
43
+
44
+ it 'prints a deprecation warning' do
45
+ expect(subject).to receive(:warn)
46
+ subject.send_template(*args)
61
47
  end
62
-
63
48
  end
64
- end
49
+ end
@@ -0,0 +1,29 @@
1
+ require "rails_helper"
2
+
3
+ describe MnoEnterprise::MailAdapters::Adapter do
4
+ subject { described_class }
5
+
6
+ describe '.test?' do
7
+ subject { described_class.test? }
8
+
9
+ around do |example|
10
+ orig_delivery_method = Rails.configuration.action_mailer.delivery_method
11
+ example.run
12
+ Rails.configuration.action_mailer.delivery_method = orig_delivery_method
13
+ end
14
+
15
+ context 'with delivery method' do
16
+ before { Rails.configuration.action_mailer.delivery_method = :method }
17
+ it { is_expected.to be false }
18
+ end
19
+ context 'with nil delivery method' do
20
+ before { Rails.configuration.action_mailer.delivery_method = nil }
21
+ it { is_expected.to be false }
22
+ end
23
+
24
+ context 'with :test delivery method' do
25
+ before { Rails.configuration.action_mailer.delivery_method = :test }
26
+ it { is_expected.to be true }
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,53 @@
1
+ require "rails_helper"
2
+
3
+ describe MnoEnterprise::MailAdapters::MandrillAdapter do
4
+ subject { described_class }
5
+
6
+ describe '.deliver' do
7
+ let(:template) { :some_template }
8
+ let(:from) {{ name: "John", email: 'j@e.com' }}
9
+ let(:to) {{ name: "John", email: 'j@e.com' }}
10
+ let(:vars) {{ some: 'var' }}
11
+
12
+ it 'send the correct template with the correct parameters' do
13
+ expect(subject).to receive(:send_template).with(template,[],{
14
+ from_name: from[:name],
15
+ from_email: from[:email],
16
+ to: [{email: to[:email], type: :to, name: to[:name]}],
17
+ global_merge_vars: [{name: vars.keys.first.to_s, content: vars.values.first}]
18
+ })
19
+ subject.deliver(template, from, to, vars)
20
+ end
21
+ end
22
+
23
+ describe '.send_template' do
24
+ before { described_class.instance_variable_set("@client", nil) }
25
+ let(:args) { ['template_name', [], { foo: 'bar', content: {} }] }
26
+
27
+ subject { described_class.send_template(*args) }
28
+
29
+ context 'when not .test?' do
30
+ before { allow(described_class).to receive(:test?) { false } }
31
+
32
+ it 'delegates the method to a sparkpost client' do
33
+ # Stub Mandrill client
34
+ messages = double('messages')
35
+ mandrill = double('mandrill', messages: messages)
36
+ expect(Mandrill::API).to receive(:new).and_return(mandrill)
37
+
38
+ expect(messages).to receive(:send_template).with(*args)
39
+ subject
40
+ end
41
+ end
42
+
43
+ context 'when .test?' do
44
+ before { allow(described_class).to receive(:test?) { true } }
45
+
46
+ it 'does not send any emails' do
47
+ # Dummy client without any methods
48
+ allow(Mandrill::API).to receive(:new).and_return('mandrill')
49
+ expect { subject }.to change(described_class.base_deliveries,:count).by(1)
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,29 @@
1
+ require "rails_helper"
2
+
3
+ describe MnoEnterprise::MailAdapters::SmtpAdapter do
4
+ describe '.deliver' do
5
+ before { described_class.instance_variable_set("@client", nil) }
6
+
7
+ let(:template) { :some_template }
8
+ let(:from) {{ name: "John", email: "j@e.com" }}
9
+ let(:to) {{ name: "John", email: "j@e.com" }}
10
+ let(:vars) {{ some: 'var' }}
11
+ let(:opts) {{ some: 'opt' }}
12
+
13
+ subject { described_class.deliver(template, from, to, vars, opts) }
14
+
15
+ it 'delegates the method to a smtp client' do
16
+ # Stub SmptClient
17
+ smtp = double('smtpclient')
18
+ smtp_mail = double('smtpmail')
19
+
20
+ expect(MnoEnterprise::SmtpClient).to receive(:new).and_return(smtp)
21
+
22
+ expect(smtp).to receive(:deliver).with(template, from, to, vars, opts).and_return(smtp_mail)
23
+ expect(smtp_mail).to receive(:deliver)
24
+
25
+ subject
26
+ end
27
+ end
28
+ end
29
+
@@ -0,0 +1,60 @@
1
+ require "rails_helper"
2
+
3
+ describe MnoEnterprise::MailAdapters::SparkpostAdapter do
4
+ subject { described_class }
5
+ before { ENV["SPARKPOST_API_KEY"] = "secret" }
6
+
7
+ describe '.deliver' do
8
+ let(:template) { :some_template }
9
+ let(:from) {{ name: "John", email: 'j@e.com' }}
10
+ let(:to) {{ name: "John", email: 'j@e.com' }}
11
+ let(:vars) {{ some: 'var' }}
12
+
13
+ it 'send the correct template with the correct parameters' do
14
+ expect(subject).to receive(:send_template).with(
15
+ template,
16
+ [],
17
+ {
18
+ recipients: [address: to],
19
+ content: {
20
+ from: from,
21
+ template_id: template
22
+ },
23
+ substitution_data: vars
24
+ }
25
+ )
26
+ subject.deliver(template, from, to, vars)
27
+ end
28
+ end
29
+
30
+ describe '.send_template' do
31
+ before { described_class.instance_variable_set("@client", nil) }
32
+
33
+ subject { described_class.send_template('template_name', [], { foo: 'bar', content: {} }) }
34
+
35
+ context 'when not .test?' do
36
+ before { allow(described_class).to receive(:test?) { false } }
37
+
38
+ it 'delegates the method to a sparkpost client' do
39
+ # Stub SparkPost client
40
+ transmission = double('transmission')
41
+ sparkpost = double('sparkpost', transmission: transmission)
42
+ expect(SparkPost::Client).to receive(:new).and_return(sparkpost)
43
+
44
+ expect(transmission).to receive(:send_payload)
45
+ subject
46
+ end
47
+ end
48
+
49
+ context 'when .test?' do
50
+ before { allow(described_class).to receive(:test?) { true } }
51
+
52
+ it 'does not send any emails' do
53
+ # Dummy client without any methods
54
+ allow(SparkPost::Client).to receive(:new).and_return(double('sparkpost'))
55
+
56
+ expect { subject }.to change(described_class.base_deliveries,:count).by(1)
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,9 @@
1
+ require "rails_helper"
2
+
3
+ describe MnoEnterprise::MailClient do
4
+ subject { described_class }
5
+
6
+ describe '#deliver' do
7
+
8
+ end
9
+ end
@@ -0,0 +1,39 @@
1
+ require 'rails_helper'
2
+
3
+ describe MnoEnterprise::SmtpClient do
4
+ let(:client) { described_class.send(:new) }
5
+
6
+ describe '#deliver' do
7
+ subject do
8
+ client.deliver(
9
+ 'reset-password-instructions',
10
+ {name: 'John', email: 'john.doe@example.com'},
11
+ {name: 'Joe', email: 'joe.blogg@example.com'},
12
+ )
13
+ end
14
+
15
+ it 'calls mail with the correct params' do
16
+ expected_params = {
17
+ from: 'John <john.doe@example.com>',
18
+ to: 'joe.blogg@example.com',
19
+ subject: 'Reset password instructions',
20
+ template_path: 'system_notifications',
21
+ template_name: 'reset-password-instructions'
22
+ }
23
+ expect(client).to receive(:mail).with(expected_params)
24
+ subject
25
+ end
26
+ end
27
+
28
+ describe '#format_sender' do
29
+ it do
30
+ sender = {name: 'John', email: 'john.doe@example.com'}
31
+ expect(client.format_sender(sender)).to eq('John <john.doe@example.com>')
32
+ end
33
+ end
34
+ describe '#humanize' do
35
+ it 'returns a humanized template subject' do
36
+ expect(client.humanize('reset-password-instructions')).to eq('Reset password instructions')
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,21 @@
1
+ require 'rails_helper'
2
+ require 'cancan/matchers'
3
+
4
+ # TODO: add more ability tests
5
+ RSpec.describe MnoEnterprise::Ability, type: :model do
6
+ subject(:ability) { described_class.new(user) }
7
+ let(:user) { FactoryGirl.build(:user, admin_role: admin_role) }
8
+ let(:admin_role) { nil }
9
+ let(:organization) { FactoryGirl.build(:organization) }
10
+
11
+ before { allow(user).to receive(:role).with(organization) { nil } }
12
+
13
+ context 'when User#admin_role is admin' do
14
+ let(:admin_role) { 'admin' }
15
+ it { is_expected.to be_able_to(:manage_app_instances, organization) }
16
+ end
17
+
18
+ context 'when no User#admin_role' do
19
+ it { is_expected.not_to be_able_to(:manage_app_instances, organization) }
20
+ end
21
+ end
@@ -2,28 +2,6 @@ require 'rails_helper'
2
2
 
3
3
  module MnoEnterprise
4
4
  RSpec.describe BaseResource, type: :model do
5
- describe 'Error Handling' do
6
- class Test < BaseResource; end
7
-
8
- context 'Connection Errors' do
9
- ((502..504).to_a<<407).each do |code|
10
- it "handles #{code} error" do
11
- api_stub_for(get: "/tests/1", code: code)
12
- expect { Test.find(1) }.to raise_error(Faraday::ConnectionFailed)
13
- end
14
- end
15
- end
16
-
17
- context 'Server Errors' do
18
- [401, 500].each do |code|
19
- it "handles #{code} error" do
20
- api_stub_for(get: "/tests/1", code: code)
21
- expect { Test.find(1) }.to raise_error(Faraday::Error::ClientError)
22
- end
23
- end
24
- end
25
- end
26
-
27
5
  describe '#cache_key' do
28
6
  context 'for existing record' do
29
7
  let(:user) { build(:user) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mno-enterprise-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.7
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arnaud Lachaume
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-06-05 00:00:00.000000000 Z
12
+ date: 2016-07-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -115,26 +115,6 @@ dependencies:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
117
  version: '1.4'
118
- - !ruby/object:Gem::Dependency
119
- name: mandrill-api
120
- requirement: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '1.0'
125
- - - ">="
126
- - !ruby/object:Gem::Version
127
- version: 1.0.53
128
- type: :runtime
129
- prerelease: false
130
- version_requirements: !ruby/object:Gem::Requirement
131
- requirements:
132
- - - "~>"
133
- - !ruby/object:Gem::Version
134
- version: '1.0'
135
- - - ">="
136
- - !ruby/object:Gem::Version
137
- version: 1.0.53
138
118
  - !ruby/object:Gem::Dependency
139
119
  name: deepstruct
140
120
  requirement: !ruby/object:Gem::Requirement
@@ -203,6 +183,26 @@ dependencies:
203
183
  - - ">="
204
184
  - !ruby/object:Gem::Version
205
185
  version: 6.5.1
186
+ - !ruby/object:Gem::Dependency
187
+ name: mandrill-api
188
+ requirement: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - "~>"
191
+ - !ruby/object:Gem::Version
192
+ version: '1.0'
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ version: 1.0.53
196
+ type: :runtime
197
+ prerelease: false
198
+ version_requirements: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - "~>"
201
+ - !ruby/object:Gem::Version
202
+ version: '1.0'
203
+ - - ">="
204
+ - !ruby/object:Gem::Version
205
+ version: 1.0.53
206
206
  - !ruby/object:Gem::Dependency
207
207
  name: redcarpet
208
208
  requirement: !ruby/object:Gem::Requirement
@@ -265,6 +265,20 @@ dependencies:
265
265
  - - "~>"
266
266
  - !ruby/object:Gem::Version
267
267
  version: 1.0.0
268
+ - !ruby/object:Gem::Dependency
269
+ name: sparkpost
270
+ requirement: !ruby/object:Gem::Requirement
271
+ requirements:
272
+ - - "~>"
273
+ - !ruby/object:Gem::Version
274
+ version: 0.1.4
275
+ type: :development
276
+ prerelease: false
277
+ version_requirements: !ruby/object:Gem::Requirement
278
+ requirements:
279
+ - - "~>"
280
+ - !ruby/object:Gem::Version
281
+ version: 0.1.4
268
282
  description: Core functionnality of MNOE. This handles the core functionnality.
269
283
  email:
270
284
  - developers@maestrano.com
@@ -274,7 +288,9 @@ extra_rdoc_files: []
274
288
  files:
275
289
  - LICENSE
276
290
  - Rakefile
291
+ - app/assets/images/mno_enterprise/login-background.jpg
277
292
  - app/assets/images/mno_enterprise/main-logo.png
293
+ - app/assets/stylesheets/mno_enterprise/mail.css
278
294
  - app/controllers/mno_enterprise/application_controller.rb
279
295
  - app/helpers/mno_enterprise/application_helper.rb
280
296
  - app/helpers/mno_enterprise/impersonate_helper.rb
@@ -299,6 +315,22 @@ files:
299
315
  - app/models/mno_enterprise/tenant_invoice.rb
300
316
  - app/models/mno_enterprise/user.rb
301
317
  - app/pdf/mno_enterprise/invoice_pdf.rb
318
+ - app/views/system_notifications/confirmation-instructions.html.erb
319
+ - app/views/system_notifications/confirmation-instructions.text.erb
320
+ - app/views/system_notifications/delete-request-instructions.html.erb
321
+ - app/views/system_notifications/delete-request-instructions.text.erb
322
+ - app/views/system_notifications/organization-invite-existing-user.html.erb
323
+ - app/views/system_notifications/organization-invite-existing-user.text.erb
324
+ - app/views/system_notifications/organization-invite-new-user.html.erb
325
+ - app/views/system_notifications/organization-invite-new-user.text.erb
326
+ - app/views/system_notifications/reconfirmation-instructions.html.erb
327
+ - app/views/system_notifications/reconfirmation-instructions.text.erb
328
+ - app/views/system_notifications/registration-instructions.html.erb
329
+ - app/views/system_notifications/registration-instructions.text.erb
330
+ - app/views/system_notifications/reset-password-instructions.html.erb
331
+ - app/views/system_notifications/reset-password-instructions.text.erb
332
+ - app/views/system_notifications/unlock-instructions.html.erb
333
+ - app/views/system_notifications/unlock-instructions.text.erb
302
334
  - config/initializers/audit_log.rb
303
335
  - config/initializers/config.rb
304
336
  - config/locales/devise.en.yml
@@ -403,6 +435,7 @@ files:
403
435
  - lib/accountingjs_serializer.rb
404
436
  - lib/devise/controllers/extension_helpers.rb
405
437
  - lib/devise/extension_routes.rb
438
+ - lib/devise/hooks/impersonatable.rb
406
439
  - lib/devise/hooks/password_expirable.rb
407
440
  - lib/devise/models/password_expirable.rb
408
441
  - lib/devise/models/remote_authenticatable.rb
@@ -445,10 +478,8 @@ files:
445
478
  - lib/generators/mno_enterprise/templates/scripts/upstart/app.conf
446
479
  - lib/her_extension/her_orm_adapter.rb
447
480
  - lib/her_extension/middleware/mnoe_api_v1_parse_json.rb
448
- - lib/her_extension/middleware/mnoe_raise_error.rb
449
481
  - lib/her_extension/model/associations/association.rb
450
482
  - lib/her_extension/model/associations/association_proxy.rb
451
- - lib/her_extension/model/associations/belongs_to_association.rb
452
483
  - lib/her_extension/model/associations/has_many_association.rb
453
484
  - lib/her_extension/model/attributes.rb
454
485
  - lib/her_extension/model/orm.rb
@@ -475,6 +506,13 @@ files:
475
506
  - lib/mno_enterprise/core.rb
476
507
  - lib/mno_enterprise/database_extendable.rb
477
508
  - lib/mno_enterprise/engine.rb
509
+ - lib/mno_enterprise/mail_adapters/adapter.rb
510
+ - lib/mno_enterprise/mail_adapters/mandrill_adapter.rb
511
+ - lib/mno_enterprise/mail_adapters/smtp_adapter.rb
512
+ - lib/mno_enterprise/mail_adapters/sparkpost_adapter.rb
513
+ - lib/mno_enterprise/mail_adapters/test_adapter.rb
514
+ - lib/mno_enterprise/mail_client.rb
515
+ - lib/mno_enterprise/smtp_client.rb
478
516
  - lib/mno_enterprise/testing_support/ability_test_helper.rb
479
517
  - lib/mno_enterprise/testing_support/common_rake.rb
480
518
  - lib/mno_enterprise/testing_support/factories.rb
@@ -509,7 +547,14 @@ files:
509
547
  - spec/lib/her_extension/model/relation_spec.rb
510
548
  - spec/lib/mandrill_client_spec.rb
511
549
  - spec/lib/mno_enterprise/core_engine_spec.rb
550
+ - spec/lib/mno_enterprise/mail_adapters/adapter_spec.rb
551
+ - spec/lib/mno_enterprise/mail_adapters/mandrill_adapter_spec.rb
552
+ - spec/lib/mno_enterprise/mail_adapters/smtp_adapter_spec.rb
553
+ - spec/lib/mno_enterprise/mail_adapters/sparkpost_adapter_spec.rb
554
+ - spec/lib/mno_enterprise/mail_client_spec.rb
555
+ - spec/lib/mno_enterprise/smtp_client_spec.rb
512
556
  - spec/mno_enterprise_spec.rb
557
+ - spec/models/mno_enterprise/ability_spec.rb
513
558
  - spec/models/mno_enterprise/app_instance_spec.rb
514
559
  - spec/models/mno_enterprise/app_spec.rb
515
560
  - spec/models/mno_enterprise/base_resource_spec.rb
@@ -550,10 +595,17 @@ test_files:
550
595
  - spec/models/mno_enterprise/app_instance_spec.rb
551
596
  - spec/models/mno_enterprise/impac/dashboard_spec.rb
552
597
  - spec/models/mno_enterprise/deletion_request_spec.rb
598
+ - spec/models/mno_enterprise/ability_spec.rb
553
599
  - spec/models/mno_enterprise/invoice_spec.rb
554
600
  - spec/models/mno_enterprise/user_spec.rb
555
601
  - spec/models/mno_enterprise/base_resource_spec.rb
556
602
  - spec/spec_helper.rb
603
+ - spec/lib/mno_enterprise/smtp_client_spec.rb
604
+ - spec/lib/mno_enterprise/mail_adapters/smtp_adapter_spec.rb
605
+ - spec/lib/mno_enterprise/mail_adapters/mandrill_adapter_spec.rb
606
+ - spec/lib/mno_enterprise/mail_adapters/sparkpost_adapter_spec.rb
607
+ - spec/lib/mno_enterprise/mail_adapters/adapter_spec.rb
608
+ - spec/lib/mno_enterprise/mail_client_spec.rb
557
609
  - spec/lib/mno_enterprise/core_engine_spec.rb
558
610
  - spec/lib/her_extension/her_orm_adapter.rb
559
611
  - spec/lib/her_extension/model/relation_spec.rb