activity_notification 2.1.1 → 2.2.1
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/.travis.yml +10 -16
- data/CHANGELOG.md +53 -0
- data/Gemfile +2 -3
- data/README.md +1 -1
- data/activity_notification.gemspec +1 -1
- data/app/channels/activity_notification/notification_api_with_devise_channel.rb +1 -1
- data/app/channels/activity_notification/notification_channel.rb +1 -1
- data/app/channels/activity_notification/notification_with_devise_channel.rb +1 -1
- data/app/controllers/activity_notification/notifications_api_with_devise_controller.rb +1 -1
- data/app/controllers/activity_notification/notifications_controller.rb +0 -20
- data/app/controllers/activity_notification/subscriptions_api_controller.rb +1 -1
- data/app/controllers/activity_notification/subscriptions_api_with_devise_controller.rb +1 -1
- data/bin/bundle_update.sh +0 -1
- data/docs/Functions.md +2 -2
- data/docs/Setup.md +190 -63
- data/gemfiles/Gemfile.rails-5.0 +3 -1
- data/gemfiles/Gemfile.rails-5.1 +3 -1
- data/gemfiles/Gemfile.rails-5.2 +3 -1
- data/gemfiles/Gemfile.rails-6.0 +2 -3
- data/gemfiles/Gemfile.rails-6.1 +24 -0
- data/lib/activity_notification/apis/notification_api.rb +7 -0
- data/lib/activity_notification/common.rb +15 -4
- data/lib/activity_notification/controllers/common_controller.rb +2 -18
- data/lib/activity_notification/models/concerns/notifiable.rb +12 -12
- data/lib/activity_notification/models/concerns/swagger/notification_schema.rb +34 -34
- data/lib/activity_notification/models/concerns/swagger/subscription_schema.rb +17 -17
- data/lib/activity_notification/models/concerns/target.rb +5 -9
- data/lib/activity_notification/optional_targets/action_cable_api_channel.rb +1 -1
- data/lib/activity_notification/optional_targets/action_cable_channel.rb +1 -1
- data/lib/activity_notification/orm/active_record.rb +1 -1
- data/lib/activity_notification/orm/active_record/notification.rb +3 -3
- data/lib/activity_notification/orm/dynamoid.rb +10 -3
- data/lib/activity_notification/orm/dynamoid/notification.rb +49 -14
- data/lib/activity_notification/orm/dynamoid/subscription.rb +1 -1
- data/lib/activity_notification/orm/mongoid.rb +10 -3
- data/lib/activity_notification/orm/mongoid/notification.rb +8 -6
- data/lib/activity_notification/orm/mongoid/subscription.rb +1 -1
- data/lib/activity_notification/renderable.rb +2 -2
- data/lib/activity_notification/roles/acts_as_notifiable.rb +13 -16
- data/lib/activity_notification/version.rb +1 -1
- data/lib/generators/templates/migrations/migration.rb +1 -1
- data/spec/channels/notification_api_channel_spec.rb +42 -44
- data/spec/channels/notification_api_with_devise_channel_spec.rb +57 -59
- data/spec/channels/notification_channel_spec.rb +41 -43
- data/spec/channels/notification_with_devise_channel_spec.rb +75 -77
- data/spec/concerns/common_spec.rb +25 -3
- data/spec/concerns/models/notifiable_spec.rb +35 -35
- data/spec/concerns/models/target_spec.rb +10 -12
- data/spec/concerns/renderable_spec.rb +5 -5
- data/spec/config_spec.rb +26 -15
- data/spec/controllers/controller_spec_utility.rb +15 -51
- data/spec/generators/migration/migration_generator_spec.rb +2 -10
- data/spec/helpers/view_helpers_spec.rb +1 -1
- data/spec/models/subscription_spec.rb +8 -0
- data/spec/optional_targets/action_cable_api_channel_spec.rb +21 -24
- data/spec/optional_targets/action_cable_channel_spec.rb +26 -29
- data/spec/rails_app/app/controllers/users_controller.rb +5 -0
- data/spec/rails_app/app/javascript/App.vue +8 -72
- data/spec/rails_app/app/javascript/components/DeviseTokenAuth.vue +3 -4
- data/spec/rails_app/app/javascript/components/Top.vue +2 -3
- data/spec/rails_app/app/javascript/packs/spa.js +6 -3
- data/spec/rails_app/app/javascript/router/index.js +73 -0
- data/spec/rails_app/app/javascript/store/{auth.js → index.js} +0 -0
- data/spec/rails_app/app/models/dummy/dummy_group.rb +8 -0
- data/spec/rails_app/app/models/dummy/dummy_notifiable_target.rb +8 -0
- data/spec/rails_app/app/models/user.rb +2 -1
- data/spec/rails_app/config/application.rb +6 -7
- data/spec/rails_app/config/dynamoid.rb +11 -3
- data/spec/rails_app/config/environments/production.rb +3 -0
- data/spec/rails_app/config/environments/test.rb +2 -11
- data/spec/rails_app/config/initializers/activity_notification.rb +3 -3
- data/spec/rails_app/config/initializers/copy_it.aws.rb.template +6 -0
- data/spec/rails_app/config/routes.rb +5 -1
- data/spec/rails_app/db/seeds.rb +9 -2
- data/spec/roles/acts_as_notifiable_spec.rb +5 -5
- data/spec/spec_helper.rb +1 -5
- metadata +14 -12
- data/gemfiles/Gemfile.rails-4.2 +0 -23
- data/spec/support/patch_rails_42_action_controller_test_response.rb +0 -11
@@ -490,20 +490,18 @@ shared_examples_for :target do
|
|
490
490
|
end
|
491
491
|
end
|
492
492
|
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
expect(test_instance.notification_action_cable_channel_class_name).to eq(ActivityNotification::NotificationWithDeviseChannel.name)
|
499
|
-
end
|
493
|
+
describe "#notification_action_cable_channel_class_name" do
|
494
|
+
context "when custom_notification_action_cable_with_devise? returns true" do
|
495
|
+
it "returns ActivityNotification::NotificationWithDeviseChannel" do
|
496
|
+
described_class._notification_action_cable_with_devise = true
|
497
|
+
expect(test_instance.notification_action_cable_channel_class_name).to eq(ActivityNotification::NotificationWithDeviseChannel.name)
|
500
498
|
end
|
499
|
+
end
|
501
500
|
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
end
|
501
|
+
context "when custom_notification_action_cable_with_devise? returns false" do
|
502
|
+
it "returns ActivityNotification::NotificationChannel" do
|
503
|
+
described_class._notification_action_cable_with_devise = false
|
504
|
+
expect(test_instance.notification_action_cable_channel_class_name).to eq(ActivityNotification::NotificationChannel.name)
|
507
505
|
end
|
508
506
|
end
|
509
507
|
end
|
@@ -32,7 +32,7 @@ shared_examples_for :renderable do
|
|
32
32
|
expect(I18n.t("notification.#{target_type_key}.#{params_text_key}.text"))
|
33
33
|
.to eq(params_text_original)
|
34
34
|
expect(I18n.t("notification.#{target_type_key}.#{params_text_key}.text",
|
35
|
-
|
35
|
+
article_title: article_title))
|
36
36
|
.to eq(params_text_embedded)
|
37
37
|
end
|
38
38
|
|
@@ -40,7 +40,7 @@ shared_examples_for :renderable do
|
|
40
40
|
expect(I18n.t("notification.#{target_type_key}.#{group_text_key}.text"))
|
41
41
|
.to eq(group_text_original)
|
42
42
|
expect(I18n.t("notification.#{target_type_key}.#{group_text_key}.text",
|
43
|
-
{notifier_name: notifier_name, group_member_count: group_member_count, group_notification_count: group_notification_count}))
|
43
|
+
**{ notifier_name: notifier_name, group_member_count: group_member_count, group_notification_count: group_notification_count }))
|
44
44
|
.to eq(group_text_embedded)
|
45
45
|
end
|
46
46
|
|
@@ -50,10 +50,10 @@ shared_examples_for :renderable do
|
|
50
50
|
expect(I18n.t("notification.#{target_type_key}.#{plural_text_key}.text")[:other])
|
51
51
|
.to eq(plural_text_original_other)
|
52
52
|
expect(I18n.t("notification.#{target_type_key}.#{plural_text_key}.text",
|
53
|
-
{article_title: article_title, notifier_name: notifier_name, count: 1}))
|
53
|
+
**{ article_title: article_title, notifier_name: notifier_name, count: 1 }))
|
54
54
|
.to eq(plural_text_embedded_one)
|
55
55
|
expect(I18n.t("notification.#{target_type_key}.#{plural_text_key}.text",
|
56
|
-
{article_title: article_title, notifier_name: notifier_name, count: group_notification_count}))
|
56
|
+
**{ article_title: article_title, notifier_name: notifier_name, count: group_notification_count }))
|
57
57
|
.to eq(plural_text_embedded_other)
|
58
58
|
end
|
59
59
|
end
|
@@ -126,4 +126,4 @@ shared_examples_for :renderable do
|
|
126
126
|
# #layout_path
|
127
127
|
|
128
128
|
end
|
129
|
-
end
|
129
|
+
end
|
data/spec/config_spec.rb
CHANGED
@@ -35,38 +35,49 @@ describe ActivityNotification::Config do
|
|
35
35
|
describe "config.store_with_associated_records" do
|
36
36
|
let(:target) { create(:confirmed_user) }
|
37
37
|
|
38
|
-
context "false as default" do
|
39
|
-
before do
|
40
|
-
@notification = create(:notification, target: target)
|
41
|
-
end
|
42
|
-
|
43
|
-
it "stores notification without associated records" do
|
44
|
-
expect(@notification.target).to eq(target)
|
45
|
-
expect { @notification.target_record }.to raise_error(NoMethodError)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
38
|
context "when it is configured as true" do
|
50
39
|
if ActivityNotification.config.orm == :active_record
|
51
40
|
it "raises ActivityNotification::ConfigError when you use active_record ORM" do
|
52
41
|
expect { ActivityNotification.config.store_with_associated_records = true }.to raise_error(ActivityNotification::ConfigError)
|
53
42
|
end
|
54
|
-
|
55
43
|
else
|
56
44
|
before do
|
45
|
+
@original = ActivityNotification.config.store_with_associated_records
|
57
46
|
ActivityNotification.config.store_with_associated_records = true
|
58
47
|
load Rails.root.join("../../lib/activity_notification/orm/#{ActivityNotification.config.orm}/notification.rb").to_s
|
59
48
|
@notification = create(:notification, target: target)
|
60
49
|
end
|
61
50
|
|
62
51
|
after do
|
63
|
-
ActivityNotification.config.store_with_associated_records =
|
52
|
+
ActivityNotification.config.store_with_associated_records = @original
|
64
53
|
load Rails.root.join("../../lib/activity_notification/orm/#{ActivityNotification.config.orm}/notification.rb").to_s
|
65
54
|
end
|
66
55
|
|
67
|
-
it "stores notification
|
56
|
+
it "stores notification with associated records" do
|
68
57
|
expect(@notification.target).to eq(target)
|
69
|
-
expect(@notification.
|
58
|
+
expect(@notification.stored_target["id"].to_s).to eq(target.id.to_s)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context "when it is configured as false" do
|
64
|
+
before do
|
65
|
+
@original = ActivityNotification.config.store_with_associated_records
|
66
|
+
ActivityNotification.config.store_with_associated_records = false
|
67
|
+
load Rails.root.join("../../lib/activity_notification/orm/#{ActivityNotification.config.orm}/notification.rb").to_s
|
68
|
+
@notification = create(:notification, target: target)
|
69
|
+
end
|
70
|
+
|
71
|
+
after do
|
72
|
+
ActivityNotification.config.store_with_associated_records = @original
|
73
|
+
load Rails.root.join("../../lib/activity_notification/orm/#{ActivityNotification.config.orm}/notification.rb").to_s
|
74
|
+
end
|
75
|
+
|
76
|
+
it "does not store notification with associated records" do
|
77
|
+
expect(@notification.target).to eq(target)
|
78
|
+
begin
|
79
|
+
expect(@notification.stored_target).to be_nil
|
80
|
+
rescue NoMethodError
|
70
81
|
end
|
71
82
|
end
|
72
83
|
end
|
@@ -2,43 +2,23 @@ module ActivityNotification
|
|
2
2
|
module ControllerSpec
|
3
3
|
module RequestUtility
|
4
4
|
def get_with_compatibility action, params, session
|
5
|
-
|
6
|
-
get action, params, session
|
7
|
-
else
|
8
|
-
get action, params: params, session: session
|
9
|
-
end
|
5
|
+
get action, params: params, session: session
|
10
6
|
end
|
11
7
|
|
12
8
|
def post_with_compatibility action, params, session
|
13
|
-
|
14
|
-
post action, params, session
|
15
|
-
else
|
16
|
-
post action, params: params, session: session
|
17
|
-
end
|
9
|
+
post action, params: params, session: session
|
18
10
|
end
|
19
11
|
|
20
12
|
def put_with_compatibility action, params, session
|
21
|
-
|
22
|
-
put action, params, session
|
23
|
-
else
|
24
|
-
put action, params: params, session: session
|
25
|
-
end
|
13
|
+
put action, params: params, session: session
|
26
14
|
end
|
27
15
|
|
28
16
|
def delete_with_compatibility action, params, session
|
29
|
-
|
30
|
-
delete action, params, session
|
31
|
-
else
|
32
|
-
delete action, params: params, session: session
|
33
|
-
end
|
17
|
+
delete action, params: params, session: session
|
34
18
|
end
|
35
19
|
|
36
20
|
def xhr_with_compatibility method, action, params, session
|
37
|
-
|
38
|
-
xhr method, action, params, session
|
39
|
-
else
|
40
|
-
send method.to_s, action, xhr: true, params: params, session: session
|
41
|
-
end
|
21
|
+
send method.to_s, action, xhr: true, params: params, session: session
|
42
22
|
end
|
43
23
|
end
|
44
24
|
|
@@ -76,53 +56,37 @@ module ActivityNotification
|
|
76
56
|
def api_path
|
77
57
|
"/#{root_path}/#{target_type}/#{test_target.id}"
|
78
58
|
end
|
79
|
-
|
59
|
+
|
80
60
|
def schema_path
|
81
|
-
Rails.root.join('..', 'openapi.json')
|
61
|
+
Rails.root.join('..', 'openapi.json')
|
82
62
|
end
|
83
|
-
|
63
|
+
|
84
64
|
def write_schema_file(schema_json)
|
85
65
|
File.open(schema_path, "w") { |file| file.write(schema_json) }
|
86
66
|
end
|
87
|
-
|
67
|
+
|
88
68
|
def read_schema_file
|
89
69
|
JSON.parse(File.read(schema_path))
|
90
70
|
end
|
91
71
|
|
92
72
|
def committee_options
|
93
|
-
@committee_options ||= { schema: Committee::Drivers::load_from_file(schema_path), prefix: root_path, validate_success_only: true }
|
73
|
+
@committee_options ||= { schema: Committee::Drivers::load_from_file(schema_path), prefix: root_path, validate_success_only: true, parse_response_by_content_type: false }
|
94
74
|
end
|
95
75
|
|
96
76
|
def get_with_compatibility path, options = {}
|
97
|
-
|
98
|
-
get path, options[:params], options[:headers]
|
99
|
-
else
|
100
|
-
get path, options
|
101
|
-
end
|
77
|
+
get path, **options
|
102
78
|
end
|
103
79
|
|
104
80
|
def post_with_compatibility path, options = {}
|
105
|
-
|
106
|
-
post path, options[:params], options[:headers]
|
107
|
-
else
|
108
|
-
post path, options
|
109
|
-
end
|
81
|
+
post path, **options
|
110
82
|
end
|
111
83
|
|
112
84
|
def put_with_compatibility path, options = {}
|
113
|
-
|
114
|
-
put path, options[:params], options[:headers]
|
115
|
-
else
|
116
|
-
put path, options
|
117
|
-
end
|
85
|
+
put path, **options
|
118
86
|
end
|
119
87
|
|
120
88
|
def delete_with_compatibility path, options = {}
|
121
|
-
|
122
|
-
delete path, options[:params], options[:headers]
|
123
|
-
else
|
124
|
-
delete path, options
|
125
|
-
end
|
89
|
+
delete path, **options
|
126
90
|
end
|
127
91
|
|
128
92
|
def assert_all_schema_confirm(response, status)
|
@@ -133,4 +97,4 @@ module ActivityNotification
|
|
133
97
|
end
|
134
98
|
end
|
135
99
|
end
|
136
|
-
end
|
100
|
+
end
|
@@ -31,11 +31,7 @@ describe ActivityNotification::Generators::MigrationGenerator, type: :generator
|
|
31
31
|
describe 'CreateNotifications migration file' do
|
32
32
|
subject { file(Dir["tmp/db/migrate/*_create_activity_notification_tables.rb"].first.gsub!('tmp/', '')) }
|
33
33
|
it { is_expected.to exist }
|
34
|
-
|
35
|
-
it { is_expected.to contain(/class CreateActivityNotificationTables < ActiveRecord::Migration\[\d\.\d\]/) }
|
36
|
-
else
|
37
|
-
it { is_expected.to contain(/class CreateActivityNotificationTables < ActiveRecord::Migration/) }
|
38
|
-
end
|
34
|
+
it { is_expected.to contain(/class CreateActivityNotificationTables < ActiveRecord::Migration\[\d\.\d\]/) }
|
39
35
|
|
40
36
|
if ActivityNotification.config.orm == :active_record
|
41
37
|
it 'can be executed to migrate scheme' do
|
@@ -55,11 +51,7 @@ describe ActivityNotification::Generators::MigrationGenerator, type: :generator
|
|
55
51
|
describe 'CreateCustomNotifications migration file' do
|
56
52
|
subject { file(Dir["tmp/db/migrate/*_create_custom_notifications.rb"].first.gsub!('tmp/', '')) }
|
57
53
|
it { is_expected.to exist }
|
58
|
-
|
59
|
-
it { is_expected.to contain(/class CreateCustomNotifications < ActiveRecord::Migration\[\d\.\d\]/) }
|
60
|
-
else
|
61
|
-
it { is_expected.to contain(/class CreateCustomNotifications < ActiveRecord::Migration/) }
|
62
|
-
end
|
54
|
+
it { is_expected.to contain(/class CreateCustomNotifications < ActiveRecord::Migration\[\d\.\d\]/) }
|
63
55
|
|
64
56
|
if ActivityNotification.config.orm == :active_record
|
65
57
|
it 'can be executed to migrate scheme' do
|
@@ -1,5 +1,5 @@
|
|
1
1
|
describe ActivityNotification::ViewHelpers, type: :helper do
|
2
|
-
let(:view_context) { ActionView::Base.new }
|
2
|
+
let(:view_context) { ActionView::Base.new(ActionView::LookupContext.new(ActionController::Base.view_paths), [], nil) }
|
3
3
|
let(:notification) {
|
4
4
|
create(:notification, target: create(:confirmed_user))
|
5
5
|
}
|
@@ -11,6 +11,14 @@ describe ActivityNotification::Subscription, type: :model do
|
|
11
11
|
subscription = create(:subscription, target: target)
|
12
12
|
expect(subscription.reload.target).to eq(target)
|
13
13
|
end
|
14
|
+
|
15
|
+
it "several targets can subscribe to the same key" do
|
16
|
+
target = create(:confirmed_user)
|
17
|
+
target2 = create(:confirmed_user)
|
18
|
+
subscription_1 = create(:subscription, target: target, key: 'key.1')
|
19
|
+
subscription_2 = create(:subscription, target: target2, key: 'key.1')
|
20
|
+
expect(subscription_2).to be_valid
|
21
|
+
end
|
14
22
|
end
|
15
23
|
|
16
24
|
describe "with validation" do
|
@@ -1,37 +1,34 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
let(:test_instance) { ActivityNotification::OptionalTarget::ActionCableApiChannel.new(skip_initializing_target: true) }
|
1
|
+
require 'activity_notification/optional_targets/action_cable_api_channel'
|
2
|
+
describe ActivityNotification::OptionalTarget::ActionCableApiChannel do
|
3
|
+
let(:test_instance) { ActivityNotification::OptionalTarget::ActionCableApiChannel.new(skip_initializing_target: true) }
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
end
|
5
|
+
describe "as public instance methods" do
|
6
|
+
describe "#to_optional_target_name" do
|
7
|
+
it "is return demodulized symbol class name" do
|
8
|
+
expect(test_instance.to_optional_target_name).to eq(:action_cable_api_channel)
|
11
9
|
end
|
10
|
+
end
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
12
|
+
describe "#initialize_target" do
|
13
|
+
it "does not raise NotImplementedError" do
|
14
|
+
test_instance.initialize_target
|
17
15
|
end
|
16
|
+
end
|
18
17
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
end
|
18
|
+
describe "#notify" do
|
19
|
+
it "does not raise NotImplementedError" do
|
20
|
+
test_instance.notify(create(:notification))
|
23
21
|
end
|
24
22
|
end
|
23
|
+
end
|
25
24
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
end
|
25
|
+
describe "as protected instance methods" do
|
26
|
+
describe "#render_notification_message" do
|
27
|
+
context "as default" do
|
28
|
+
it "renders notification message as formatted JSON" do
|
29
|
+
expect(test_instance.send(:render_notification_message, create(:notification)).with_indifferent_access[:notification].has_key?(:id)).to be_truthy
|
32
30
|
end
|
33
31
|
end
|
34
32
|
end
|
35
|
-
|
36
33
|
end
|
37
34
|
end
|
@@ -1,44 +1,41 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
let(:test_instance) { ActivityNotification::OptionalTarget::ActionCableChannel.new(skip_initializing_target: true) }
|
1
|
+
require 'activity_notification/optional_targets/action_cable_channel'
|
2
|
+
describe ActivityNotification::OptionalTarget::ActionCableChannel do
|
3
|
+
let(:test_instance) { ActivityNotification::OptionalTarget::ActionCableChannel.new(skip_initializing_target: true) }
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
end
|
5
|
+
describe "as public instance methods" do
|
6
|
+
describe "#to_optional_target_name" do
|
7
|
+
it "is return demodulized symbol class name" do
|
8
|
+
expect(test_instance.to_optional_target_name).to eq(:action_cable_channel)
|
11
9
|
end
|
10
|
+
end
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
12
|
+
describe "#initialize_target" do
|
13
|
+
it "does not raise NotImplementedError" do
|
14
|
+
test_instance.initialize_target
|
17
15
|
end
|
16
|
+
end
|
18
17
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
end
|
18
|
+
describe "#notify" do
|
19
|
+
it "does not raise NotImplementedError" do
|
20
|
+
test_instance.notify(create(:notification))
|
23
21
|
end
|
24
22
|
end
|
23
|
+
end
|
25
24
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
end
|
25
|
+
describe "as protected instance methods" do
|
26
|
+
describe "#render_notification_message" do
|
27
|
+
context "as default" do
|
28
|
+
it "renders notification message with default template" do
|
29
|
+
expect(test_instance.send(:render_notification_message, create(:notification))).to be_include("<div class='notification_list")
|
32
30
|
end
|
31
|
+
end
|
33
32
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
end
|
33
|
+
context "with unexisting template as fallback option" do
|
34
|
+
it "raise ActionView::MissingTemplate" do
|
35
|
+
expect { expect(test_instance.send(:render_notification_message, create(:notification), fallback: :hoge)) }
|
36
|
+
.to raise_error(ActionView::MissingTemplate)
|
39
37
|
end
|
40
38
|
end
|
41
39
|
end
|
42
|
-
|
43
40
|
end
|
44
41
|
end
|
@@ -13,6 +13,11 @@ class UsersController < ApplicationController
|
|
13
13
|
render json: @user
|
14
14
|
end
|
15
15
|
|
16
|
+
# GET /users/find
|
17
|
+
def find
|
18
|
+
render json: User.find_by_email!(params[:email])
|
19
|
+
end
|
20
|
+
|
16
21
|
private
|
17
22
|
# Use callbacks to share common setup or constraints between actions.
|
18
23
|
def set_user
|
@@ -6,85 +6,15 @@
|
|
6
6
|
|
7
7
|
<script>
|
8
8
|
import Vue from 'vue'
|
9
|
-
import VueRouter from 'vue-router'
|
10
9
|
import VueMoment from 'vue-moment'
|
11
10
|
import moment from 'moment-timezone'
|
12
11
|
import VuePluralize from 'vue-pluralize'
|
13
12
|
import ActionCableVue from 'actioncable-vue'
|
14
13
|
import axios from 'axios'
|
15
14
|
import env from './config/environment'
|
16
|
-
import authStore from "./store/auth"
|
17
|
-
import Top from './components/Top.vue'
|
18
|
-
import DeviseTokenAuth from './components/DeviseTokenAuth.vue'
|
19
|
-
import NotificationsIndex from './components/notifications/Index.vue'
|
20
|
-
import SubscriptionsIndex from './components/subscriptions/Index.vue'
|
21
15
|
|
22
|
-
|
23
|
-
routes: [
|
24
|
-
{ path: '/', component: Top },
|
25
|
-
{ path: '/login', component: DeviseTokenAuth },
|
26
|
-
{ path: '/logout', component: DeviseTokenAuth, props: { isLogout: true } },
|
27
|
-
// Routes for single page application working with activity_notification REST API backend for users
|
28
|
-
{
|
29
|
-
path: '/notifications',
|
30
|
-
name: 'AuthenticatedUserNotificationsIndex',
|
31
|
-
component: NotificationsIndex,
|
32
|
-
props: () => ({ target_type: 'users', target: authStore.getters.currentUser }),
|
33
|
-
meta: { requiresAuth: true }
|
34
|
-
},
|
35
|
-
{
|
36
|
-
path: '/subscriptions',
|
37
|
-
name: 'AuthenticatedUserSubscriptionsIndex',
|
38
|
-
component: SubscriptionsIndex,
|
39
|
-
props: () => ({ target_type: 'users', target: authStore.getters.currentUser }),
|
40
|
-
meta: { requiresAuth: true }
|
41
|
-
},
|
42
|
-
// Routes for single page application working with activity_notification REST API backend for admins
|
43
|
-
{
|
44
|
-
path: '/admins/notifications',
|
45
|
-
name: 'AuthenticatedAdminNotificationsIndex',
|
46
|
-
component: NotificationsIndex,
|
47
|
-
props: () => ({ target_type: 'admins', targetApiPath: 'admins', target: authStore.getters.currentUser.admin }),
|
48
|
-
meta: { requiresAuth: true }
|
49
|
-
},
|
50
|
-
{
|
51
|
-
path: '/admins/subscriptions',
|
52
|
-
name: 'AuthenticatedAdminSubscriptionsIndex',
|
53
|
-
component: SubscriptionsIndex,
|
54
|
-
props: () => ({ target_type: 'admins', targetApiPath: 'admins', target: authStore.getters.currentUser.admin }),
|
55
|
-
meta: { requiresAuth: true }
|
56
|
-
},
|
57
|
-
// Routes for single page application working with activity_notification REST API backend for unauthenticated targets
|
58
|
-
{
|
59
|
-
path: '/:target_type/:target_id/notifications',
|
60
|
-
name: 'UnauthenticatedTargetNotificationsIndex',
|
61
|
-
component: NotificationsIndex,
|
62
|
-
props : true
|
63
|
-
},
|
64
|
-
{
|
65
|
-
path: '/:target_type/:target_id/subscriptions',
|
66
|
-
name: 'UnauthenticatedTargetSubscriptionsIndex',
|
67
|
-
component: SubscriptionsIndex,
|
68
|
-
props : true
|
69
|
-
}
|
70
|
-
]
|
71
|
-
})
|
72
|
-
|
73
|
-
router.beforeEach((to, from, next) => {
|
74
|
-
if (to.matched.some(record => record.meta.requiresAuth) && !authStore.getters.userSignedIn) {
|
75
|
-
next({ path: '/login', query: { redirect: to.fullPath }});
|
76
|
-
} else {
|
77
|
-
next();
|
78
|
-
}
|
79
|
-
})
|
16
|
+
axios.defaults.baseURL = "/api/v2"
|
80
17
|
|
81
|
-
if (authStore.getters.userSignedIn) {
|
82
|
-
for (var authHeader of Object.keys(authStore.getters.authHeaders)) {
|
83
|
-
axios.defaults.headers.common[authHeader] = authStore.getters.authHeaders[authHeader];
|
84
|
-
}
|
85
|
-
}
|
86
|
-
|
87
|
-
Vue.use(VueRouter)
|
88
18
|
Vue.use(VueMoment, { moment })
|
89
19
|
Vue.use(VuePluralize)
|
90
20
|
Vue.use(ActionCableVue, {
|
@@ -96,7 +26,13 @@ Vue.use(ActionCableVue, {
|
|
96
26
|
|
97
27
|
export default {
|
98
28
|
name: 'App',
|
99
|
-
|
29
|
+
mounted () {
|
30
|
+
if (this.$store.getters.userSignedIn) {
|
31
|
+
for (var authHeader of Object.keys(this.$store.getters.authHeaders)) {
|
32
|
+
axios.defaults.headers.common[authHeader] = this.$store.getters.authHeaders[authHeader];
|
33
|
+
}
|
34
|
+
}
|
35
|
+
}
|
100
36
|
}
|
101
37
|
</script>
|
102
38
|
|