• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

mpyw / laravel-cached-database-stickiness / 13644536682

04 Mar 2025 01:54AM UTC coverage: 100.0%. Remained the same
13644536682

push

github

web-flow
Update phpunit.xml

148 of 148 relevant lines covered (100.0%)

93.62 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

100.0
/src/ApplyingJobInitialization.php
1
<?php
2

3
namespace Mpyw\LaravelCachedDatabaseStickiness;
4

5
use Illuminate\Database\ConnectionInterface;
6
use Illuminate\Database\DatabaseManager;
7
use Illuminate\Queue\Events\JobProcessing;
8
use Mpyw\LaravelCachedDatabaseStickiness\Events\ConnectionCreated;
9
use Mpyw\LaravelCachedDatabaseStickiness\JobInitializers\JobInitializerInterface;
10

11
class ApplyingJobInitialization
12
{
13
    /**
14
     * @var \Mpyw\LaravelCachedDatabaseStickiness\StickinessManager
15
     */
16
    protected $stickiness;
17

18
    /**
19
     * @var \Illuminate\Database\DatabaseManager
20
     */
21
    protected $db;
22

23
    /**
24
     * @var \Mpyw\LaravelCachedDatabaseStickiness\JobInitializers\JobInitializerInterface
25
     */
26
    protected $job;
27

28
    /**
29
     * @var bool[]
30
     */
31
    protected $recordsModifiedStates = [];
32

33
    /**
34
     * ApplyingJobInitialization constructor.
35
     *
36
     * @param \Mpyw\LaravelCachedDatabaseStickiness\StickinessManager                       $stickiness
37
     * @param \Illuminate\Database\DatabaseManager                                          $db
38
     * @param \Mpyw\LaravelCachedDatabaseStickiness\JobInitializers\JobInitializerInterface $initializer
39
     */
40
    public function __construct(StickinessManager $stickiness, DatabaseManager $db, JobInitializerInterface $initializer)
41
    {
42
        $this->stickiness = $stickiness;
80✔
43
        $this->db = $db;
80✔
44
        $this->job = $initializer;
80✔
45
    }
46

47
    /**
48
     * Initialize database stickiness state on already resolved connections before processing each job.
49
     *
50
     * @param  \Illuminate\Queue\Events\JobProcessing $event
51
     * @return $this
52
     */
53
    public function initializeOnResolvedConnections(JobProcessing $event)
54
    {
55
        foreach ($this->db->getConnections() as $connection) {
56✔
56
            /* @var \Illuminate\Database\Connection|\Illuminate\Database\ConnectionInterface $connection */
57
            $this->recordsModifiedStates[$connection->getName()] = $connection->hasModifiedRecords();
40✔
58
        }
59

60
        $this->job->initializeOnResolvedConnections($event);
56✔
61

62
        return $this;
56✔
63
    }
64

65
    /**
66
     * Initialize database stickiness state on newly created connection before processing each job.
67
     *
68
     * @param  \Illuminate\Queue\Events\JobProcessing                         $jobProcessingEvent
69
     * @param  \Mpyw\LaravelCachedDatabaseStickiness\Events\ConnectionCreated $connectionCreatedEvent
70
     * @return $this
71
     */
72
    public function initializeOnNewConnection(JobProcessing $jobProcessingEvent, ConnectionCreated $connectionCreatedEvent)
73
    {
74
        $connection = $connectionCreatedEvent->connection;
24✔
75

76
        $this->recordsModifiedStates[$connection->getName()] = $connection->hasModifiedRecords();
24✔
77

78
        $this->job->initializeOnNewConnection($jobProcessingEvent, $connectionCreatedEvent);
24✔
79

80
        return $this;
24✔
81
    }
82

83
    /**
84
     * Avoid revoking stickiness state initialization when DB::recordsHaveBeenModified() called on the Job execution.
85
     *
86
     * @param  \Illuminate\Database\Connection|\Illuminate\Database\ConnectionInterface $connection
87
     * @return $this
88
     */
89
    public function dontRevokeEffectsOn(ConnectionInterface $connection)
90
    {
91
        unset($this->recordsModifiedStates[$connection->getName()]);
16✔
92

93
        return $this;
16✔
94
    }
95

96
    /**
97
     * Revoke database stickiness state initialization after processing each job.
98
     */
99
    public function __destruct()
100
    {
101
        foreach ($this->db->getConnections() as $connection) {
56✔
102
            /* @var \Illuminate\Database\Connection|\Illuminate\Database\ConnectionInterface $connection */
103
            if (null !== $state = $this->recordsModifiedStates[$connection->getName()] ?? null) {
56✔
104
                $connection->setRecordModificationState($state);
48✔
105
            }
106
        }
107
    }
108
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc