activity_notification 1.1.0 → 1.2.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.
- 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)
|