effective_messaging 0.8.0 → 0.8.1

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: 6d5586319e69df10977387b8dde4f21c28b6c091ba2d013c0aa92356c5d64612
4
- data.tar.gz: 30780a50e3482bf8f66492f9b965f3dba832c2ccfd237753517214536484bc6c
3
+ metadata.gz: 8d1af8fb6d222cf7dc1f2ad5c9baaf139607cef5f724879fd3bc037107d56b4d
4
+ data.tar.gz: f6315751785d8760aee7adb5593826f6b4ed80639ec1d0f54d1ee95f85462828
5
5
  SHA512:
6
- metadata.gz: 984b176a01cb8fb1e6935975f20fba184e0c4af16783faef38c6372dc76b85a9735b0b8d87723564026a22add1426c1a78b2c0d14c25f906d4b76470119a612e
7
- data.tar.gz: 159df93437962685676e463ad350f91326de8d87efd440027b1da1e8f1b6061552a8d1bf307cdc8ba9fedc9faaf87574754421a2d3794a63410f7caf5518a27d
6
+ metadata.gz: 657cc27116ca125f8102c2bc4ee1331d9359e673e7b9dc4647509541c217f4ad79c2a11e4dd4014ec0aff7f0b8fab9be45de9a104a8738f2a87d3d16d73dcf64
7
+ data.tar.gz: 5c0de10cdbbf454298c7033f39ed5ca08cfffb51c1f54cd6ee65f5d23872b08fd93267e1f5281eecbc6205493d99e48d04b9c3f47109c4cf178c6d1d6e75723d
@@ -9,7 +9,7 @@ module Admin
9
9
  col :notification
10
10
  col :report, visible: !attributes[:inline]
11
11
  col :resource, search: :string
12
- col :user, search: :string
12
+ col :user, label: 'Source', search: :string
13
13
  col :email
14
14
  col :skipped
15
15
 
@@ -134,7 +134,7 @@ module Effective
134
134
  validates :report, presence: true
135
135
 
136
136
  validate(if: -> { report.present? }) do
137
- errors.add(:report, 'must include an email or user column') unless report.email_report_column || report.user_report_column
137
+ errors.add(:report, 'must include an email, user, organization or owner column') unless report.email_report_column || report.emailable_report_column
138
138
  end
139
139
 
140
140
  validate(if: -> { report.present? && subject.present? }) do
@@ -347,7 +347,7 @@ module Effective
347
347
  end
348
348
 
349
349
  def already_notified_today?(resource)
350
- email = resource_email(resource) || resource_user(resource).try(:email)
350
+ email = resource_emails_to_s(resource)
351
351
  raise("expected an email for #{report} #{report&.id} and #{resource} #{resource&.id}") unless email.present?
352
352
 
353
353
  logs = notification_logs.select { |log| log.email == email }
@@ -362,7 +362,7 @@ module Effective
362
362
  def notifiable_immediate?(resource:, date: nil)
363
363
  raise('expected an immediate? notification') unless immediate?
364
364
 
365
- email = resource_email(resource) || resource_user(resource).try(:email)
365
+ email = resource_emails_to_s(resource)
366
366
  raise("expected an email for #{report} #{report&.id} and #{resource} #{resource&.id}") unless email.present?
367
367
 
368
368
  logs = notification_logs.select { |log| log.email == email }
@@ -394,12 +394,7 @@ module Effective
394
394
  def render_email(resource = nil)
395
395
  raise('expected an acts_as_reportable resource') if resource.present? && !resource.class.try(:acts_as_reportable?)
396
396
 
397
- to = if audience == 'emails'
398
- audience_emails.presence
399
- elsif audience == 'report'
400
- resource_email(resource) || resource_user(resource).try(:email)
401
- end
402
-
397
+ to = (audience == 'emails' ? audience_emails.presence : resource_emails_to_s(resource))
403
398
  raise('expected a to email address') unless to.present?
404
399
 
405
400
  assigns = assigns_for(resource)
@@ -437,12 +432,12 @@ module Effective
437
432
  end
438
433
 
439
434
  def build_notification_log(resource: nil, skipped: false)
440
- user = resource_user(resource)
435
+ emailable = resource_emailable(resource)
441
436
 
442
- email = resource_email(resource) || user.try(:email)
437
+ email = resource_emails_to_s(resource)
443
438
  email ||= audience_emails_to_s if scheduled_email?
444
439
 
445
- notification_logs.build(email: email, report: report, resource: resource, user: user, skipped: skipped)
440
+ notification_logs.build(email: email, report: report, resource: resource, user: emailable, skipped: skipped)
446
441
  end
447
442
 
448
443
  private
@@ -456,18 +451,31 @@ module Effective
456
451
  end
457
452
 
458
453
  def audience_emails_to_s
459
- audience_emails.presence&.join(',')
454
+ audience_emails.presence&.join(', ')
455
+ end
456
+
457
+ # All emails for this emailable resource
458
+ def resource_emails_to_s(resource)
459
+ emails = Array(resource_email(resource)).map(&:presence).compact
460
+
461
+ if emails.blank? && (emailable = resource_emailable(resource)).present?
462
+ emails = Array(emailable.try(:reportable_emails) || emailable.try(:email)).map(&:presence).compact
463
+ end
464
+
465
+ emails.presence&.join(', ')
460
466
  end
461
467
 
462
- def resource_user(resource)
468
+ # A user, owner, or organization column
469
+ def resource_emailable(resource)
463
470
  return unless resource.present?
464
471
 
465
- column = report&.user_report_column
472
+ column = report&.emailable_report_column
466
473
  return unless column.present?
467
474
 
468
475
  resource.public_send(column.name) || (resource if resource.respond_to?(:email))
469
476
  end
470
477
 
478
+ # An email column
471
479
  def resource_email(resource)
472
480
  return unless resource.present?
473
481
 
@@ -20,7 +20,7 @@ module Effective
20
20
  scope :sorted, -> { order(:id) }
21
21
  scope :deep, -> { includes(:notification, :report, :resource, :user) }
22
22
 
23
- validates :email, presence: true, email: true
23
+ validates :email, presence: true
24
24
 
25
25
  def to_s
26
26
  model_name.human
@@ -1,3 +1,3 @@
1
1
  module EffectiveMessaging
2
- VERSION = '0.8.0'.freeze
2
+ VERSION = '0.8.1'.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.8.0
4
+ version: 0.8.1
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: 2024-05-16 00:00:00.000000000 Z
11
+ date: 2024-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails