* @ingroup FileJournal
*/
+use Wikimedia\ObjectFactory;
use Wikimedia\Timestamp\ConvertibleTimestamp;
/**
abstract class FileJournal {
/** @var string */
protected $backend;
- /** @var int */
+ /** @var int|false */
protected $ttlDays;
/**
- * Construct a new instance from configuration.
+ * Construct a new instance from configuration. Do not call this directly, use factory().
*
* @param array $config Includes:
* 'ttlDays' : days to keep log entries around (false means "forever")
*/
- protected function __construct( array $config ) {
+ public function __construct( array $config ) {
$this->ttlDays = $config['ttlDays'] ?? false;
}
* @return FileJournal
*/
final public static function factory( array $config, $backend ) {
- $class = $config['class'];
- $jrn = new $class( $config );
- if ( !$jrn instanceof self ) {
- throw new InvalidArgumentException( "$class is not an instance of " . __CLASS__ );
- }
+ $jrn = ObjectFactory::getObjectFromSpec(
+ $config,
+ [ 'specIsArg' => true, 'assertClass' => __CLASS__ ]
+ );
$jrn->backend = $backend;
return $jrn;
* A starting change ID and/or limit can be specified.
*
* @param int|null $start Starting change ID or null
- * @param int $limit Maximum number of items to return
+ * @param int $limit Maximum number of items to return (0 = unlimited)
* @param string|null &$next Updated to the ID of the next entry.
* @return array List of associative arrays, each having:
* id : unique, monotonic, ID for this change