Class: PartyResearch::FindingApplier

Inherits:
Object
  • Object
show all
Defined in:
app/services/party_research/finding_applier.rb

Defined Under Namespace

Classes: Result

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(finding, accepted_by) ⇒ FindingApplier

Returns a new instance of FindingApplier.



32
33
34
35
36
# File 'app/services/party_research/finding_applier.rb', line 32

def initialize(finding, accepted_by)
  @finding = finding
  @accepted_by = accepted_by
  @party = finding.party_research_run.party
end

Class Method Details

.accept(finding:, accepted_by:) ⇒ Object



20
21
22
# File 'app/services/party_research/finding_applier.rb', line 20

def accept(finding:, accepted_by:)
  new(finding, accepted_by).accept
end

.reject(finding:, rejected_by:) ⇒ Object



24
25
26
27
28
29
# File 'app/services/party_research/finding_applier.rb', line 24

def reject(finding:, rejected_by:)
  return Result.new(success: false, error: "already #{finding.state}") unless finding.state == 'pending'

  finding.update!(state: 'rejected', reviewed_by: rejected_by, reviewed_at: Time.current)
  Result.new(success: true, error: nil)
end

Instance Method Details

#acceptObject



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'app/services/party_research/finding_applier.rb', line 38

def accept
  return Result.new(success: false, error: "already #{@finding.state}") unless @finding.state == 'pending'

  ActiveRecord::Base.transaction do
    apply_by_category
    @finding.update!(
      state: 'accepted',
      reviewed_by: @accepted_by,
      reviewed_at: Time.current,
      applied_at: Time.current
    )
  end

  Result.new(success: true, error: nil)
rescue ActiveRecord::RecordInvalid => e
  Result.new(success: false, error: e.record.errors.full_messages.to_sentence)
rescue StandardError => e
  Result.new(success: false, error: e.message)
end