Class: Assistant::AudienceUpdater

Inherits:
Object
  • Object
show all
Defined in:
app/services/assistant/audience_updater.rb

Overview

Applies validated, size-gated changes to one email audience.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attributes, actor_id) ⇒ AudienceUpdater

Returns a new instance of AudienceUpdater.

Parameters:

  • attributes (Hash)

    keyword arguments received by the assistant tool

  • actor_id (Integer, nil)

    employee id used for audit attribution



18
19
20
21
# File 'app/services/assistant/audience_updater.rb', line 18

def initialize(attributes, actor_id)
  @changes = AudienceUpdateChanges.new(attributes)
  @actor_id = actor_id
end

Class Method Details

.call(attributes, actor_id:) ⇒ String

Runs an audience update and returns the JSON tool response.

Parameters:

  • attributes (Hash)

    keyword arguments received by the assistant tool

  • actor_id (Integer, nil)

    employee id used for audit attribution

Returns:

  • (String)


12
13
14
# File 'app/services/assistant/audience_updater.rb', line 12

def self.call(attributes, actor_id:)
  new(attributes, actor_id).call
end

Instance Method Details

#callString

Applies the update after validation and recipient-size confirmation.

Returns:

  • (String)

    JSON tool response



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'app/services/assistant/audience_updater.rb', line 26

def call
  audience, error = AudienceToolBuilder.find_audience_or_error(changes.attributes[:audience_id])
  return error if error

  error = validation_error(audience)
  return error if error

  estimate, error = update_estimate(audience)
  return error if error

  assign_attributes(audience)
  return save_error(audience) unless audience.save

  success_payload(audience, estimate).to_json
rescue StandardError => e
  { error: e.message }.to_json
end