18F/hhs-acf-uc-dashboard

View on GitHub
app/models/admin/create_capacity_log.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Admin
  class CreateCapacityLog
    attr_reader :capacity, :current_user, :log

    def initialize(capacity, current_user)
      @capacity = capacity
      @current_user = current_user
    end

    def call
      @log ||= capacity.logs.create(attributes)
    end

    private

    def attributes
      {
        user_id: current_user.id,
        message: message
      }
    end

    def message
      "#{current_user.email} #{actions.join(' and ')} intake values"
    end

    def actions
      action_set = []
      action_set << 'updated'       if values_updated?
      action_set << capacity.status if status_changed?
      action_set
    end

    def values_updated?
      !(previous_changes.keys & Attributes::CapacityData.value_fields.map(&:to_s)).empty?
    end

    def status_changed?
      previous_changes.keys.include?('status') && capacity.created_at != capacity.updated_at
    end

    delegate :previous_changes, to: :capacity
  end
end