module InfinumId
  module Resources
    class Updater
      def initialize(params, resource)
        @params = params.deep_symbolize_keys
        @resource = resource
      end

      def self.call(params, resource)
        new(params, resource).call
      end

      def call
        update_resource
        InfinumId::AfterResourceUpsert.call(
          resource,
          @params,
          InfinumId::AfterResourceIntent::UPDATE
        )
      end

      private

      attr_reader :resource_params, :resource

      def update_resource
        resource.update(resource_params)
      end

      def resource_params
        @params.slice(*InfinumId.resource_attributes)
      end
    end
  end
end