activity_notification 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +23 -11
- data/Gemfile.lock +52 -40
- data/README.md +177 -14
- data/activity_notification.gemspec +3 -1
- data/app/controllers/activity_notification/subscriptions_controller.rb +48 -2
- data/app/views/activity_notification/optional_targets/default/base/_default.text.erb +10 -0
- data/app/views/activity_notification/optional_targets/default/slack/_default.text.erb +6 -0
- data/app/views/activity_notification/subscriptions/default/_notification_keys.html.erb +19 -0
- data/app/views/activity_notification/subscriptions/default/_subscription.html.erb +32 -3
- data/app/views/activity_notification/subscriptions/default/index.html.erb +4 -0
- data/app/views/activity_notification/subscriptions/default/show.html.erb +5 -0
- data/app/views/activity_notification/subscriptions/default/subscribe_to_optional_target.js.erb +6 -0
- data/app/views/activity_notification/subscriptions/default/unsubscribe_to_optional_target.js.erb +6 -0
- data/gemfiles/Gemfile.rails-4.2.lock +15 -3
- data/gemfiles/Gemfile.rails-5.0.lock +47 -35
- data/lib/activity_notification.rb +1 -0
- data/lib/activity_notification/apis/notification_api.rb +83 -26
- data/lib/activity_notification/apis/subscription_api.rb +93 -8
- data/lib/activity_notification/common.rb +6 -2
- data/lib/activity_notification/helpers/view_helpers.rb +43 -0
- data/lib/activity_notification/models/concerns/notifiable.rb +73 -28
- data/lib/activity_notification/models/concerns/subscriber.rb +34 -7
- data/lib/activity_notification/models/concerns/target.rb +25 -13
- data/lib/activity_notification/models/subscription.rb +13 -2
- data/lib/activity_notification/optional_targets/amazon_sns.rb +42 -0
- data/lib/activity_notification/optional_targets/base.rb +79 -0
- data/lib/activity_notification/optional_targets/slack.rb +33 -0
- data/lib/activity_notification/rails/routes.rb +30 -20
- data/lib/activity_notification/roles/acts_as_notifiable.rb +70 -11
- data/lib/activity_notification/version.rb +1 -1
- data/lib/generators/activity_notification/views_generator.rb +2 -2
- data/lib/generators/templates/migrations/migration.rb +2 -2
- data/spec/concerns/apis/notification_api_spec.rb +97 -0
- data/spec/concerns/apis/subscription_api_spec.rb +206 -41
- data/spec/concerns/common_spec.rb +7 -2
- data/spec/concerns/models/notifiable_spec.rb +88 -2
- data/spec/concerns/models/subscriber_spec.rb +114 -13
- data/spec/concerns/models/target_spec.rb +17 -0
- data/spec/controllers/subscriptions_controller_shared_examples.rb +251 -28
- data/spec/helpers/view_helpers_spec.rb +56 -0
- data/spec/optional_targets/amazon_sns_spec.rb +46 -0
- data/spec/optional_targets/base_spec.rb +43 -0
- data/spec/optional_targets/slack_spec.rb +46 -0
- data/spec/rails_app/app/controllers/comments_controller.rb +1 -0
- data/spec/rails_app/app/models/admin.rb +1 -2
- data/spec/rails_app/app/models/article.rb +2 -3
- data/spec/rails_app/app/models/comment.rb +19 -7
- data/spec/rails_app/app/views/activity_notification/optional_targets/admins/amazon_sns/comment/_default.text.erb +8 -0
- data/spec/rails_app/db/migrate/20160715050420_create_activity_notification_tables.rb +1 -1
- data/spec/rails_app/db/migrate/20160715050433_create_test_tables.rb +2 -0
- data/spec/rails_app/db/schema.rb +3 -1
- data/spec/rails_app/db/seeds.rb +1 -1
- data/spec/rails_app/lib/custom_optional_targets/console_output.rb +13 -0
- data/spec/rails_app/lib/custom_optional_targets/wrong_target.rb +10 -0
- data/spec/roles/acts_as_notifiable_spec.rb +124 -2
- metadata +49 -4
- data/spec/rails_app/app/models/notification.rb +0 -6
@@ -31,5 +31,7 @@ Gem::Specification.new do |s|
|
|
31
31
|
s.add_development_dependency 'simplecov', '~> 0.12.0'
|
32
32
|
s.add_development_dependency 'yard', '~> 0.9.5'
|
33
33
|
s.add_development_dependency 'yard-activesupport-concern', '~> 0.0.1'
|
34
|
-
s.add_development_dependency
|
34
|
+
s.add_development_dependency 'devise', '~> 4.2.0'
|
35
|
+
s.add_development_dependency 'aws-sdk', '~> 2'
|
36
|
+
s.add_development_dependency 'slack-notifier', '~> 1.5.1'
|
35
37
|
end
|
@@ -4,6 +4,7 @@ module ActivityNotification
|
|
4
4
|
# Include CommonController to select target and define common methods
|
5
5
|
include CommonController
|
6
6
|
before_action :set_subscription, except: [:index, :create]
|
7
|
+
before_action :validate_optional_target_param, only: [:subscribe_to_optional_target, :unsubscribe_to_optional_target]
|
7
8
|
|
8
9
|
# Shows subscription index of the target.
|
9
10
|
#
|
@@ -75,13 +76,15 @@ module ActivityNotification
|
|
75
76
|
# @overload open(params)
|
76
77
|
# @param [Hash] params Request parameters
|
77
78
|
# @option params [String] :with_email_subscription ('true') If the subscriber also subscribes notification email
|
79
|
+
# @option params [String] :with_optional_targets ('true') If the subscriber also subscribes optional targets
|
78
80
|
# @option params [String] :filter (nil) Filter option to load subscription index (Nothing as all, 'configured' or 'unconfigured')
|
79
81
|
# @option params [String] :limit (nil) Limit to query for subscriptions
|
80
82
|
# @option params [String] :reverse ('false') If subscription index and unconfigured notification keys will be ordered as earliest first
|
81
83
|
# @option params [String] :filtered_by_key (nil) Key of the subscription for filter
|
82
84
|
# @return [Responce] JavaScript view for ajax request or redirects to back as default
|
83
85
|
def subscribe
|
84
|
-
@subscription.subscribe(with_email_subscription: params[:with_email_subscription].to_s.to_boolean(true)
|
86
|
+
@subscription.subscribe(with_email_subscription: params[:with_email_subscription].to_s.to_boolean(true),
|
87
|
+
with_optional_targets: params[:with_optional_targets].to_s.to_boolean(true))
|
85
88
|
return_back_or_ajax
|
86
89
|
end
|
87
90
|
|
@@ -130,6 +133,38 @@ module ActivityNotification
|
|
130
133
|
return_back_or_ajax
|
131
134
|
end
|
132
135
|
|
136
|
+
# Subscribes to the specified optional target.
|
137
|
+
#
|
138
|
+
# POST /:target_type/:target_id/subscriptions/:id/subscribe_to_optional_target
|
139
|
+
# @overload open(params)
|
140
|
+
# @param [Hash] params Request parameters
|
141
|
+
# @option params [required, String] :optional_target_name (nil) Class name of the optional target implementation (e.g. 'amazon_sns', 'slack')
|
142
|
+
# @option params [String] :filter (nil) Filter option to load subscription index (Nothing as all, 'configured' or 'unconfigured')
|
143
|
+
# @option params [String] :limit (nil) Limit to query for subscriptions
|
144
|
+
# @option params [String] :reverse ('false') If subscription index and unconfigured notification keys will be ordered as earliest first
|
145
|
+
# @option params [String] :filtered_by_key (nil) Key of the subscription for filter
|
146
|
+
# @return [Responce] JavaScript view for ajax request or redirects to back as default
|
147
|
+
def subscribe_to_optional_target
|
148
|
+
@subscription.subscribe_to_optional_target(params[:optional_target_name])
|
149
|
+
return_back_or_ajax
|
150
|
+
end
|
151
|
+
|
152
|
+
# Unsubscribes to the specified optional target.
|
153
|
+
#
|
154
|
+
# POST /:target_type/:target_id/subscriptions/:id/unsubscribe_to_optional_target
|
155
|
+
# @overload open(params)
|
156
|
+
# @param [Hash] params Request parameters
|
157
|
+
# @option params [required, String] :optional_target_name (nil) Class name of the optional target implementation (e.g. 'amazon_sns', 'slack')
|
158
|
+
# @option params [String] :filter (nil) Filter option to load subscription index (Nothing as all, 'configured' or 'unconfigured')
|
159
|
+
# @option params [String] :limit (nil) Limit to query for subscriptions
|
160
|
+
# @option params [String] :reverse ('false') If subscription index and unconfigured notification keys will be ordered as earliest first
|
161
|
+
# @option params [String] :filtered_by_key (nil) Key of the subscription for filter
|
162
|
+
# @return [Responce] JavaScript view for ajax request or redirects to back as default
|
163
|
+
def unsubscribe_to_optional_target
|
164
|
+
@subscription.unsubscribe_to_optional_target(params[:optional_target_name])
|
165
|
+
return_back_or_ajax
|
166
|
+
end
|
167
|
+
|
133
168
|
protected
|
134
169
|
|
135
170
|
# Sets @subscription instance variable from request parameters.
|
@@ -141,7 +176,11 @@ module ActivityNotification
|
|
141
176
|
|
142
177
|
# Only allow a trusted parameter "white list" through.
|
143
178
|
def subscription_params
|
144
|
-
params
|
179
|
+
optional_targets = (params[:subscription][:optional_targets] || {}).keys.select { |key| key.to_s.start_with?("subscribing_to_") }
|
180
|
+
optional_targets.each do |optional_target_key|
|
181
|
+
params[:subscription][:optional_targets][optional_target_key] = params[:subscription][:optional_targets][optional_target_key].to_boolean
|
182
|
+
end
|
183
|
+
params.require(:subscription).permit(:key, :subscribing, :subscribing_to_email, optional_targets: optional_targets)
|
145
184
|
end
|
146
185
|
|
147
186
|
# Sets options to load subscription index from request parameters.
|
@@ -180,5 +219,12 @@ module ActivityNotification
|
|
180
219
|
"activity_notification/subscriptions"
|
181
220
|
end
|
182
221
|
|
222
|
+
# Validate optional_target_name param and return HTTP 400 unless it presents.
|
223
|
+
def validate_optional_target_param
|
224
|
+
if params[:optional_target_name].blank?
|
225
|
+
render plain: "400 Bad Request: Missing parameter", status: 400
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
183
229
|
end
|
184
230
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
Dear <%= @target.printable_target_name %>
|
2
|
+
|
3
|
+
<%= @notification.notifier.present? ? @notification.notifier.printable_notifier_name : 'Someone' %> notified you of <%= @notification.notifiable.printable_notifiable_name(@notification.target) %><%= " in #{@notification.group.printable_group_name}" if @notification.group.present? %>.
|
4
|
+
|
5
|
+
<%= "Move to notified #{@notification.notifiable.printable_type.downcase}:" %>
|
6
|
+
<%= move_notification_url_for(@notification, open: true) %>
|
7
|
+
|
8
|
+
Thank you!
|
9
|
+
|
10
|
+
<%= @notification.created_at.strftime("%b %d %H:%M") %>
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<%= @slack_name.present? ? "Hi <@#{@slack_name}>," : "<!channel>," %>
|
2
|
+
|
3
|
+
<%= @notification.notifier.present? ? @notification.notifier.printable_notifier_name : 'Someone' %> notified you of <%= @notification.notifiable.printable_notifiable_name(@notification.target) %><%= " in #{@notification.group.printable_group_name}" if @notification.group.present? %>.
|
4
|
+
|
5
|
+
<%= "Move to notified #{@notification.notifiable.printable_type.downcase}:" %>
|
6
|
+
<%= move_notification_url_for(@notification, open: true) %>
|
@@ -45,6 +45,25 @@
|
|
45
45
|
</div>
|
46
46
|
</div>
|
47
47
|
|
48
|
+
<div class="field_wrapper subscribing_to_optional_targets <%= 'hidden' unless ActivityNotification.config.subscribe_as_default %>">
|
49
|
+
<% target.notifications.filtered_by_key(key).latest.optional_target_names.each do |optional_target_name| %>
|
50
|
+
<div class="field_label">
|
51
|
+
<label>
|
52
|
+
Optional tagret (<%= optional_target_name %>)
|
53
|
+
</label>
|
54
|
+
</div>
|
55
|
+
<div class="field">
|
56
|
+
<div class="ui checkbox">
|
57
|
+
<label>
|
58
|
+
<%= hidden_field_tag "subscription[optional_targets][#{ActivityNotification::Subscription.to_optional_target_key(optional_target_name)}]", 'false' %>
|
59
|
+
<%= check_box_tag "subscription[optional_targets][#{ActivityNotification::Subscription.to_optional_target_key(optional_target_name)}]", 'true', ActivityNotification.config.subscribe_as_default %>
|
60
|
+
<div class="slider"></div>
|
61
|
+
</label>
|
62
|
+
</div>
|
63
|
+
</div>
|
64
|
+
<% end %>
|
65
|
+
</div>
|
66
|
+
|
48
67
|
<div class="ui button">
|
49
68
|
<button type="submit">Configure subscription</button>
|
50
69
|
</div>
|
@@ -18,18 +18,18 @@
|
|
18
18
|
<div class="field">
|
19
19
|
<div class="ui checkbox">
|
20
20
|
<% if subscription.subscribing? %>
|
21
|
-
<%= link_to unsubscribe_path_for(subscription, option_params), onclick: '$(this).find("input").prop("checked", false);$(this).parent().parent().parent().next().slideUp();', method: :post, remote: true do %>
|
21
|
+
<%= link_to unsubscribe_path_for(subscription, option_params), onclick: '$(this).find("input").prop("checked", false);$(this).parent().parent().parent().next().slideUp();;$(this).parent().parent().parent().next().next().slideUp();', method: :post, remote: true do %>
|
22
22
|
<%= check_box :subscribing, "", { checked: true }, 'true', 'false' %>
|
23
23
|
<div class="slider"></div>
|
24
24
|
<% end %>
|
25
25
|
<% else %>
|
26
26
|
<% if ActivityNotification.config.subscribe_as_default %>
|
27
|
-
<%= link_to subscribe_path_for(subscription, option_params), onclick: '$(this).find("input").prop("checked", true);$(this).parent().parent().parent().next().slideDown();$(this).parent().parent().parent().next().find("input").prop("checked", true);', method: :post, remote: true do %>
|
27
|
+
<%= link_to subscribe_path_for(subscription, option_params), onclick: '$(this).find("input").prop("checked", true);$(this).parent().parent().parent().next().slideDown();$(this).parent().parent().parent().next().find("input").prop("checked", true);$(this).parent().parent().parent().next().next().slideDown();$(this).parent().parent().parent().next().next().find("input").prop("checked", true);', method: :post, remote: true do %>
|
28
28
|
<%= check_box :subscribing, "", { checked: false }, 'true', 'false' %>
|
29
29
|
<div class="slider"></div>
|
30
30
|
<% end %>
|
31
31
|
<% else %>
|
32
|
-
<%= link_to subscribe_path_for(subscription, option_params.merge(with_email_subscription: false)), onclick: '$(this).find("input").prop("checked", true);$(this).parent().parent().parent().next().slideDown();', method: :post, remote: true do %>
|
32
|
+
<%= link_to subscribe_path_for(subscription, option_params.merge(with_email_subscription: false)), onclick: '$(this).find("input").prop("checked", true);$(this).parent().parent().parent().next().slideDown();$(this).parent().parent().parent().next().next().slideDown();', method: :post, remote: true do %>
|
33
33
|
<%= check_box :subscribing, "", { checked: false }, 'true', 'false' %>
|
34
34
|
<div class="slider"></div>
|
35
35
|
<% end %>
|
@@ -66,6 +66,35 @@
|
|
66
66
|
</div>
|
67
67
|
</div>
|
68
68
|
|
69
|
+
<div class="field_wrapper subscribing_to_optional_targets <%= 'hidden' unless subscription.subscribing? %>">
|
70
|
+
<% subscription.optional_target_names.each do |optional_target_name| %>
|
71
|
+
<div class="field_label">
|
72
|
+
<label>
|
73
|
+
Optional tagret (<%= optional_target_name %>)
|
74
|
+
</label>
|
75
|
+
</div>
|
76
|
+
<div class="field">
|
77
|
+
<div class="ui checkbox">
|
78
|
+
<% if subscription.subscribing_to_optional_target?(optional_target_name) %>
|
79
|
+
<%= link_to unsubscribe_to_optional_target_url_for(subscription, option_params.merge(optional_target_name: optional_target_name)), onclick: '$(this).find("input").prop("checked", false)', method: :post, remote: true do %>
|
80
|
+
<label>
|
81
|
+
<%= check_box optional_target_name, "", { checked: true }, 'true', 'false' %>
|
82
|
+
<div class="slider"></div>
|
83
|
+
</label>
|
84
|
+
<% end %>
|
85
|
+
<% else %>
|
86
|
+
<%= link_to subscribe_to_optional_target_url_for(subscription, option_params.merge(optional_target_name: optional_target_name)), onclick: '$(this).find("input").prop("checked", true)', method: :post, remote: true do %>
|
87
|
+
<label>
|
88
|
+
<%= check_box optional_target_name, "", { checked: false }, 'true', 'false' %>
|
89
|
+
<div class="slider"></div>
|
90
|
+
</label>
|
91
|
+
<% end %>
|
92
|
+
<% end %>
|
93
|
+
</div>
|
94
|
+
</div>
|
95
|
+
<% end %>
|
96
|
+
</div>
|
97
|
+
|
69
98
|
<div class="ui button">
|
70
99
|
<%#= link_to "Show", subscription_path_for(subscription, option_params), class: "button" %>
|
71
100
|
<%= link_to "Destroy", subscription_path_for(subscription, option_params), method: :delete, remote: true, data: { confirm: 'Are you sure?' }, class: "button" %>
|
@@ -186,10 +186,14 @@
|
|
186
186
|
if ($(this).prop('checked')) {
|
187
187
|
$thisFieldWrapper.next().slideDown();
|
188
188
|
$thisFieldWrapper.next().find("input[type='checkbox']").prop("checked", <%= ActivityNotification.config.subscribe_as_default %>);
|
189
|
+
$thisFieldWrapper.next().next().slideDown();
|
190
|
+
$thisFieldWrapper.next().next().find("input[type='checkbox']").prop("checked", <%= ActivityNotification.config.subscribe_as_default %>);
|
189
191
|
} else {
|
190
192
|
$thisFieldWrapper.next().slideUp();
|
193
|
+
$thisFieldWrapper.next().next().slideUp();
|
191
194
|
setTimeout(function () {
|
192
195
|
$thisFieldWrapper.next().find("input[type='checkbox']").prop("checked", false);
|
196
|
+
$thisFieldWrapper.next().next().find("input[type='checkbox']").prop("checked", false);
|
193
197
|
}, 400);
|
194
198
|
}
|
195
199
|
})
|
@@ -165,10 +165,15 @@
|
|
165
165
|
$thisFieldWrapper = $(this).parent().parent().parent().parent();
|
166
166
|
if ($(this).prop('checked')) {
|
167
167
|
$thisFieldWrapper.next().slideDown();
|
168
|
+
$thisFieldWrapper.next().find("input[type='checkbox']").prop("checked", <%= ActivityNotification.config.subscribe_as_default %>);
|
169
|
+
$thisFieldWrapper.next().next().slideDown();
|
170
|
+
$thisFieldWrapper.next().next().find("input[type='checkbox']").prop("checked", <%= ActivityNotification.config.subscribe_as_default %>);
|
168
171
|
} else {
|
169
172
|
$thisFieldWrapper.next().slideUp();
|
173
|
+
$thisFieldWrapper.next().next().slideUp();
|
170
174
|
setTimeout(function () {
|
171
175
|
$thisFieldWrapper.next().find("input[type='checkbox']").prop("checked", false);
|
176
|
+
$thisFieldWrapper.next().next().find("input[type='checkbox']").prop("checked", false);
|
172
177
|
}, 400);
|
173
178
|
}
|
174
179
|
})
|
data/app/views/activity_notification/subscriptions/default/subscribe_to_optional_target.js.erb
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
$("#subscriptions").html("<%= escape_javascript( render 'subscriptions', subscriptions: @subscriptions, option_params: @index_options ) %>");
|
2
|
+
$("#subscription").html("<%= escape_javascript( render 'subscription', subscription: @subscription, option_params: {} ) %>");
|
3
|
+
$("#notification_keys").html("<%= escape_javascript( render 'notification_keys', target: @target, notification_keys: @notification_keys, option_params: @index_options ) %>");
|
4
|
+
$("#subscription_form").html("<%= escape_javascript( render 'form', target: @target, option_params: @index_options ) %>");
|
5
|
+
|
6
|
+
loadSubscription();
|
data/app/views/activity_notification/subscriptions/default/unsubscribe_to_optional_target.js.erb
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
$("#subscriptions").html("<%= escape_javascript( render 'subscriptions', subscriptions: @subscriptions, option_params: @index_options ) %>");
|
2
|
+
$("#subscription").html("<%= escape_javascript( render 'subscription', subscription: @subscription, option_params: {} ) %>");
|
3
|
+
$("#notification_keys").html("<%= escape_javascript( render 'notification_keys', target: @target, notification_keys: @notification_keys, option_params: @index_options ) %>");
|
4
|
+
$("#subscription_form").html("<%= escape_javascript( render 'form', target: @target, option_params: @index_options ) %>");
|
5
|
+
|
6
|
+
loadSubscription();
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../
|
3
3
|
specs:
|
4
|
-
activity_notification (1.
|
4
|
+
activity_notification (1.2.0)
|
5
5
|
activerecord (>= 4.2.0)
|
6
6
|
i18n (>= 0.5.0)
|
7
7
|
jquery-rails (>= 3.1.1)
|
@@ -50,6 +50,14 @@ GEM
|
|
50
50
|
railties (>= 3.0)
|
51
51
|
rspec-rails (>= 2.2)
|
52
52
|
arel (6.0.3)
|
53
|
+
aws-sdk (2.6.43)
|
54
|
+
aws-sdk-resources (= 2.6.43)
|
55
|
+
aws-sdk-core (2.6.43)
|
56
|
+
aws-sigv4 (~> 1.0)
|
57
|
+
jmespath (~> 1.0)
|
58
|
+
aws-sdk-resources (2.6.43)
|
59
|
+
aws-sdk-core (= 2.6.43)
|
60
|
+
aws-sigv4 (1.0.0)
|
53
61
|
bcrypt (3.1.11)
|
54
62
|
builder (3.2.2)
|
55
63
|
concurrent-ruby (1.0.3)
|
@@ -76,7 +84,8 @@ GEM
|
|
76
84
|
globalid (0.3.7)
|
77
85
|
activesupport (>= 4.1.0)
|
78
86
|
i18n (0.7.0)
|
79
|
-
|
87
|
+
jmespath (1.3.1)
|
88
|
+
jquery-rails (4.2.2)
|
80
89
|
rails-dom-testing (>= 1, < 3)
|
81
90
|
railties (>= 4.2.0)
|
82
91
|
thor (>= 0.14, < 2.0)
|
@@ -145,7 +154,8 @@ GEM
|
|
145
154
|
json (>= 1.8, < 3)
|
146
155
|
simplecov-html (~> 0.10.0)
|
147
156
|
simplecov-html (0.10.0)
|
148
|
-
|
157
|
+
slack-notifier (1.5.1)
|
158
|
+
sprockets (3.7.1)
|
149
159
|
concurrent-ruby (~> 1.0)
|
150
160
|
rack (> 1, < 3)
|
151
161
|
sprockets-rails (3.2.0)
|
@@ -173,12 +183,14 @@ PLATFORMS
|
|
173
183
|
DEPENDENCIES
|
174
184
|
activity_notification!
|
175
185
|
ammeter
|
186
|
+
aws-sdk (~> 2)
|
176
187
|
coveralls
|
177
188
|
devise (~> 4.2.0)
|
178
189
|
factory_girl_rails (~> 4.8.0)
|
179
190
|
rails (~> 4.2.0)
|
180
191
|
rspec-rails (~> 3.5.1)
|
181
192
|
simplecov (~> 0.12.0)
|
193
|
+
slack-notifier (~> 1.5.1)
|
182
194
|
sqlite3 (~> 1.3.12)
|
183
195
|
timecop
|
184
196
|
yard (~> 0.9.5)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../
|
3
3
|
specs:
|
4
|
-
activity_notification (1.
|
4
|
+
activity_notification (1.2.0)
|
5
5
|
activerecord (>= 4.2.0)
|
6
6
|
i18n (>= 0.5.0)
|
7
7
|
jquery-rails (>= 3.1.1)
|
@@ -10,39 +10,39 @@ PATH
|
|
10
10
|
GEM
|
11
11
|
remote: https://rubygems.org/
|
12
12
|
specs:
|
13
|
-
actioncable (5.0.
|
14
|
-
actionpack (= 5.0.
|
13
|
+
actioncable (5.0.1)
|
14
|
+
actionpack (= 5.0.1)
|
15
15
|
nio4r (~> 1.2)
|
16
16
|
websocket-driver (~> 0.6.1)
|
17
|
-
actionmailer (5.0.
|
18
|
-
actionpack (= 5.0.
|
19
|
-
actionview (= 5.0.
|
20
|
-
activejob (= 5.0.
|
17
|
+
actionmailer (5.0.1)
|
18
|
+
actionpack (= 5.0.1)
|
19
|
+
actionview (= 5.0.1)
|
20
|
+
activejob (= 5.0.1)
|
21
21
|
mail (~> 2.5, >= 2.5.4)
|
22
22
|
rails-dom-testing (~> 2.0)
|
23
|
-
actionpack (5.0.
|
24
|
-
actionview (= 5.0.
|
25
|
-
activesupport (= 5.0.
|
23
|
+
actionpack (5.0.1)
|
24
|
+
actionview (= 5.0.1)
|
25
|
+
activesupport (= 5.0.1)
|
26
26
|
rack (~> 2.0)
|
27
27
|
rack-test (~> 0.6.3)
|
28
28
|
rails-dom-testing (~> 2.0)
|
29
29
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
30
|
-
actionview (5.0.
|
31
|
-
activesupport (= 5.0.
|
30
|
+
actionview (5.0.1)
|
31
|
+
activesupport (= 5.0.1)
|
32
32
|
builder (~> 3.1)
|
33
33
|
erubis (~> 2.7.0)
|
34
34
|
rails-dom-testing (~> 2.0)
|
35
35
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
36
|
-
activejob (5.0.
|
37
|
-
activesupport (= 5.0.
|
36
|
+
activejob (5.0.1)
|
37
|
+
activesupport (= 5.0.1)
|
38
38
|
globalid (>= 0.3.6)
|
39
|
-
activemodel (5.0.
|
40
|
-
activesupport (= 5.0.
|
41
|
-
activerecord (5.0.
|
42
|
-
activemodel (= 5.0.
|
43
|
-
activesupport (= 5.0.
|
39
|
+
activemodel (5.0.1)
|
40
|
+
activesupport (= 5.0.1)
|
41
|
+
activerecord (5.0.1)
|
42
|
+
activemodel (= 5.0.1)
|
43
|
+
activesupport (= 5.0.1)
|
44
44
|
arel (~> 7.0)
|
45
|
-
activesupport (5.0.
|
45
|
+
activesupport (5.0.1)
|
46
46
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
47
47
|
i18n (~> 0.7)
|
48
48
|
minitest (~> 5.1)
|
@@ -52,6 +52,14 @@ GEM
|
|
52
52
|
railties (>= 3.0)
|
53
53
|
rspec-rails (>= 2.2)
|
54
54
|
arel (7.1.4)
|
55
|
+
aws-sdk (2.6.43)
|
56
|
+
aws-sdk-resources (= 2.6.43)
|
57
|
+
aws-sdk-core (2.6.43)
|
58
|
+
aws-sigv4 (~> 1.0)
|
59
|
+
jmespath (~> 1.0)
|
60
|
+
aws-sdk-resources (2.6.43)
|
61
|
+
aws-sdk-core (= 2.6.43)
|
62
|
+
aws-sigv4 (1.0.0)
|
55
63
|
bcrypt (3.1.11)
|
56
64
|
builder (3.2.2)
|
57
65
|
concurrent-ruby (1.0.3)
|
@@ -78,7 +86,8 @@ GEM
|
|
78
86
|
globalid (0.3.7)
|
79
87
|
activesupport (>= 4.1.0)
|
80
88
|
i18n (0.7.0)
|
81
|
-
|
89
|
+
jmespath (1.3.1)
|
90
|
+
jquery-rails (4.2.2)
|
82
91
|
rails-dom-testing (>= 1, < 3)
|
83
92
|
railties (>= 4.2.0)
|
84
93
|
thor (>= 0.14, < 2.0)
|
@@ -100,17 +109,17 @@ GEM
|
|
100
109
|
rack (2.0.1)
|
101
110
|
rack-test (0.6.3)
|
102
111
|
rack (>= 1.0)
|
103
|
-
rails (5.0.
|
104
|
-
actioncable (= 5.0.
|
105
|
-
actionmailer (= 5.0.
|
106
|
-
actionpack (= 5.0.
|
107
|
-
actionview (= 5.0.
|
108
|
-
activejob (= 5.0.
|
109
|
-
activemodel (= 5.0.
|
110
|
-
activerecord (= 5.0.
|
111
|
-
activesupport (= 5.0.
|
112
|
+
rails (5.0.1)
|
113
|
+
actioncable (= 5.0.1)
|
114
|
+
actionmailer (= 5.0.1)
|
115
|
+
actionpack (= 5.0.1)
|
116
|
+
actionview (= 5.0.1)
|
117
|
+
activejob (= 5.0.1)
|
118
|
+
activemodel (= 5.0.1)
|
119
|
+
activerecord (= 5.0.1)
|
120
|
+
activesupport (= 5.0.1)
|
112
121
|
bundler (>= 1.3.0, < 2.0)
|
113
|
-
railties (= 5.0.
|
122
|
+
railties (= 5.0.1)
|
114
123
|
sprockets-rails (>= 2.0.0)
|
115
124
|
rails-controller-testing (1.0.1)
|
116
125
|
actionpack (~> 5.x)
|
@@ -121,9 +130,9 @@ GEM
|
|
121
130
|
nokogiri (~> 1.6.0)
|
122
131
|
rails-html-sanitizer (1.0.3)
|
123
132
|
loofah (~> 2.0)
|
124
|
-
railties (5.0.
|
125
|
-
actionpack (= 5.0.
|
126
|
-
activesupport (= 5.0.
|
133
|
+
railties (5.0.1)
|
134
|
+
actionpack (= 5.0.1)
|
135
|
+
activesupport (= 5.0.1)
|
127
136
|
method_source
|
128
137
|
rake (>= 0.8.7)
|
129
138
|
thor (>= 0.18.1, < 2.0)
|
@@ -152,7 +161,8 @@ GEM
|
|
152
161
|
json (>= 1.8, < 3)
|
153
162
|
simplecov-html (~> 0.10.0)
|
154
163
|
simplecov-html (0.10.0)
|
155
|
-
|
164
|
+
slack-notifier (1.5.1)
|
165
|
+
sprockets (3.7.1)
|
156
166
|
concurrent-ruby (~> 1.0)
|
157
167
|
rack (> 1, < 3)
|
158
168
|
sprockets-rails (3.2.0)
|
@@ -183,6 +193,7 @@ PLATFORMS
|
|
183
193
|
DEPENDENCIES
|
184
194
|
activity_notification!
|
185
195
|
ammeter
|
196
|
+
aws-sdk (~> 2)
|
186
197
|
coveralls
|
187
198
|
devise (~> 4.2.0)
|
188
199
|
factory_girl_rails (~> 4.8.0)
|
@@ -190,6 +201,7 @@ DEPENDENCIES
|
|
190
201
|
rails-controller-testing
|
191
202
|
rspec-rails (~> 3.5.1)
|
192
203
|
simplecov (~> 0.12.0)
|
204
|
+
slack-notifier (~> 1.5.1)
|
193
205
|
sqlite3 (~> 1.3.12)
|
194
206
|
timecop
|
195
207
|
yard (~> 0.9.5)
|