effective_messaging 0.7.2 → 0.7.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c36f8cc8cf0b957ff2cd66b902bb3e99cf13673d70da3a086bf837e7b424a6dd
4
- data.tar.gz: 83a47842b7805daa82768dd1457c516b2bdcebd14adbac0000c09f3f4c3af9c7
3
+ metadata.gz: 78e95fc092d81efe4f4ff0db0c4d571ec86b7938400dcc7f378963f9e288aeb4
4
+ data.tar.gz: b206a600a6fc26b75fdba1a26c86754e1ceb66d4be50f0d80b07aa158afec313
5
5
  SHA512:
6
- metadata.gz: 0465d662b13537968d2b36fb6634c308321853290be44ad4763ee5c350fc633a9c45eca56f8f201fb160dcea44b32662ee0d5019dedf7e4511d3c76d82615612
7
- data.tar.gz: de0aee24647a2068e4d8e37f6c72d9e8f90697eb7616d808b174ada792b5e1a12e32bcf7bec2eab52e177187168b86822d752a5554fb6b04f8f0186876ede8dd
6
+ metadata.gz: 85de886b3e80411543f91188ebaa4de3f750a020f61513e81c82f8ef26e5ea8a792cbabd512ef821e13f34374fd30639a1e97d11f1ec00583d952339e8a336b3
7
+ data.tar.gz: 37f925c590a863999c61bd24008d96423d73a0aa9e2b10d3a914329e07c84589ece96b3aaba013557886d308895fbe544926c9941b951106018384de0197f17c
@@ -15,7 +15,13 @@ class EffectiveChatsDatatable < Effective::Datatable
15
15
  end
16
16
 
17
17
  collection do
18
- Effective::Chat.deep.where(id: current_user.chats)
18
+ chats = Effective::Chat.deep.where(id: current_user.chats)
19
+
20
+ if attributes[:year].present?
21
+ chats = chats.where('created_at >= ?', Time.zone.local(attributes[:year]))
22
+ end
23
+
24
+ chats
19
25
  end
20
26
 
21
27
  end
@@ -278,16 +278,28 @@ module Effective
278
278
 
279
279
  report.collection().find_each do |resource|
280
280
  next unless notifiable?(resource) || force
281
+
282
+ # Send Now functionality. Don't duplicate if it's same day.
283
+ next if force && already_notified_today?(resource)
284
+
281
285
  print('.')
282
286
 
283
- # For logging
284
- assign_attributes(current_resource: resource)
287
+ begin
288
+ # For logging
289
+ assign_attributes(current_resource: resource)
285
290
 
286
- # Send the resource email
287
- build_notification_log(resource: resource).save!
288
- Effective::NotificationsMailer.notify_resource(self, resource).deliver_now
291
+ # Send the resource email
292
+ Effective::NotificationsMailer.notify_resource(self, resource).deliver_now
289
293
 
290
- notified += 1
294
+ # Log that it was sent
295
+ build_notification_log(resource: resource).save!
296
+
297
+ # Count how many we actually sent
298
+ notified += 1
299
+ rescue => e
300
+ EffectiveLogger.error(e.message, associated: self) if defined?(EffectiveLogger)
301
+ ExceptionNotifier.notify_exception(e, data: { notification_id: id, resource_id: resource.id, resource_type: resource.class.name }) if defined?(ExceptionNotifier)
302
+ end
291
303
 
292
304
  GC.start if (notified % 250) == 0
293
305
  end
@@ -299,9 +311,19 @@ module Effective
299
311
  notified = 0
300
312
 
301
313
  if notifiable_scheduled? || force
302
- build_notification_log(resource: nil).save!
303
- Effective::NotificationsMailer.notify(self).deliver_now
304
- notified += 1
314
+ begin
315
+ Effective::NotificationsMailer.notify(self).deliver_now
316
+
317
+ # Log that it was sent
318
+ build_notification_log(resource: nil).save!
319
+
320
+ # Count how many we actually sent
321
+ notified += 1
322
+ rescue => e
323
+ EffectiveLogger.error(e.message, associated: self) if defined?(EffectiveLogger)
324
+ ExceptionNotifier.notify_exception(e, data: { notification_id: id }) if defined?(ExceptionNotifier)
325
+ end
326
+
305
327
  end
306
328
 
307
329
  notified > 0 ? update!(last_notified_at: Time.zone.now, last_notified_count: notified) : touch
@@ -324,6 +346,17 @@ module Effective
324
346
  notifiable?(resource, date: date)
325
347
  end
326
348
 
349
+ def already_notified_today?(resource)
350
+ email = resource_email(resource) || resource_user(resource).try(:email)
351
+ raise("expected an email for #{report} #{report&.id} and #{resource} #{resource&.id}") unless email.present?
352
+
353
+ logs = notification_logs.select { |log| log.email == email }
354
+ return false if logs.count == 0
355
+
356
+ # If we already notified today
357
+ logs.any? { |log| log.created_at&.beginning_of_day == Time.zone.now.beginning_of_day }
358
+ end
359
+
327
360
  # Consider the notification logs which track how many and how long ago this notification was sent
328
361
  # It's notifiable? when first time or if it's been immediate_days since last notification
329
362
  def notifiable_immediate?(resource:, date: nil)
@@ -1,10 +1,9 @@
1
1
  %h2= t('effective_messaging.dashboard')
2
2
 
3
- - if current_user.chats.present?
4
- %p You are a #{etd(Effective::ChatUser)} of #{pluralize(current_user.chats.length, etd(Effective::Chat))}.
3
+ - datatable = EffectiveResources.best('EffectiveChatsDatatable').new(self, namespace: :effective)
5
4
 
6
- - datatable = EffectiveResources.best('EffectiveChatsDatatable').new(self, namespace: :effective)
5
+ - if datatable.present?
6
+ %p You are a #{etd(Effective::ChatUser)} of #{pluralize(datatable.collection.length, etd(Effective::Chat))}.
7
7
  = render_datatable(datatable, simple: true)
8
-
9
8
  - else
10
9
  %p You haven't received any #{etsd(Effective::ChatMessage)}. When you do, we'll show it here.
@@ -1,3 +1,3 @@
1
1
  module EffectiveMessaging
2
- VERSION = '0.7.2'.freeze
2
+ VERSION = '0.7.4'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_messaging
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.7.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-28 00:00:00.000000000 Z
11
+ date: 2024-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails