Skip to content

Commit

Permalink
stan
Browse files Browse the repository at this point in the history
  • Loading branch information
tiagof committed Aug 18, 2023
1 parent 90e18ea commit c10a07a
Show file tree
Hide file tree
Showing 11 changed files with 54 additions and 62 deletions.
14 changes: 6 additions & 8 deletions database/factories/ActionFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,31 @@
use Squarebit\Volition\Contracts\IsAction;
use Squarebit\Volition\Models\Action;

/**
* @extends Factory<Action>
*/
class ActionFactory extends Factory
{
protected $model = Action::class;

/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'rule_id' => fn () => RuleFactory::new()->create()->id,
'rule_id' => fn() => RuleFactory::new()->create()->id,
'active' => true,
];
}

public function inactive(): ActionFactory
{
return $this->state(fn (array $attributes) => [
return $this->state(fn(array $attributes) => [
'active' => false,
]);
}

public function using(IsAction $action): ActionFactory
{
return $this->state(fn (array $attributes) => [
return $this->state(fn(array $attributes) => [
'payload' => $action,
]);
}
Expand Down
11 changes: 3 additions & 8 deletions database/factories/ConditionFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,29 +13,24 @@ class ConditionFactory extends Factory
{
protected $model = Condition::class;

/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'rule_id' => fn () => RuleFactory::new()->create()->id,
'rule_id' => fn() => RuleFactory::new()->create()->id,
'active' => true,
];
}

public function inactive(): ConditionFactory
{
return $this->state(fn (array $attributes) => [
return $this->state(fn(array $attributes) => [
'active' => false,
]);
}

public function using(IsCondition $condition): ConditionFactory
{
return $this->state(fn (array $attributes) => [
return $this->state(fn(array $attributes) => [
'payload' => $condition,
]);
}
Expand Down
19 changes: 0 additions & 19 deletions database/factories/ModelFactory.php

This file was deleted.

10 changes: 4 additions & 6 deletions database/factories/RuleFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,17 @@

namespace Squarebit\Volition\Database\Factories;

use Domains\Volition\Tests\Support\TestObject;
use Illuminate\Database\Eloquent\Factories\Factory;
use Squarebit\Volition\Models\Rule;
use Squarebit\Volition\Tests\Support\TestObject;

/**
* @extends Factory<Rule>
*/
class RuleFactory extends Factory
{
protected $model = Rule::class;

/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
Expand Down
3 changes: 1 addition & 2 deletions phpstan.neon.dist
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ includes:
- phpstan-baseline.neon

parameters:
level: 4
level: 6
paths:
- src
- config
Expand All @@ -11,4 +11,3 @@ parameters:
checkOctaneCompatibility: true
checkModelProperties: true
checkMissingIterableValueType: false

14 changes: 8 additions & 6 deletions src/Casts/Serialize.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,25 @@

use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use Illuminate\Database\Eloquent\Model;
use Squarebit\Volition\Contracts\IsAction;
use Squarebit\Volition\Contracts\IsCondition;
use Squarebit\Volition\Models\Element;

/**
* @implements CastsAttributes<IsCondition|IsAction, IsCondition|IsAction>
*/
class Serialize implements CastsAttributes
{
/**
* Cast the given value.
*
* @param array<string, mixed> $attributes
* @return IsCondition|IsAction
*/
public function get(Model $model, string $key, mixed $value, array $attributes): mixed
{
return unserialize($value);
}

/**
* Prepare the given value for storage.
*
* @param array<string, mixed> $attributes
* @return string
*/
public function set(Model $model, string $key, mixed $value, array $attributes): mixed
{
Expand Down
3 changes: 3 additions & 0 deletions src/Models/Action.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Squarebit\Volition\Contracts\IsAction;
use Squarebit\Volition\Contracts\Volitional;
use Squarebit\Volition\Traits\BelongToRule;

/**
* @property string $class
Expand All @@ -16,6 +17,8 @@
class Action extends Element
{
use HasFactory;
/** @use BelongToRule<Action> */
use BelongToRule;

protected $table = 'volition_actions';

Expand Down
5 changes: 4 additions & 1 deletion src/Models/Condition.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,17 @@
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Squarebit\Volition\Contracts\IsCondition;
use Squarebit\Volition\Contracts\Volitional;
use Squarebit\Volition\Traits\BelongToRule;

/**
* @property string $class
* @property \Squarebit\Volition\Contracts\IsCondition $payload
* @property IsCondition $payload
*/
class Condition extends Element
{
use HasFactory;
/** @use BelongToRule<Condition> */
use BelongToRule;

protected $table = 'volition_conditions';

Expand Down
8 changes: 6 additions & 2 deletions src/Models/Element.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,18 @@

namespace Squarebit\Volition\Models;

use classObj;
use Illuminate\Database\Eloquent\Model;
use Squarebit\Volition\Casts\Serialize;
use Squarebit\Volition\Traits\BelongToRule;

/**
* @property int $id
* @property class-string $class
* @property classObj $payload
*/
abstract class Element extends Model
{
use BelongToRule;

protected $guarded = ['id'];

protected $casts = [
Expand Down
19 changes: 11 additions & 8 deletions src/Models/Rule.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,11 @@
use Squarebit\Volition\Contracts\Volitional;

/**
* @property Collection<Condition> $conditions
* @property Collection<Action> $actions
* @property int $id
* @property string $name
* @property class-string $applies_to
* @property Collection<int, Condition> $conditions
* @property Collection<int, Action> $actions
*
* @method static Builder<static> forClass(string $className)
* @method static Builder<static> withName(string $name)
Expand Down Expand Up @@ -47,7 +50,7 @@ public function actions(): HasMany
}

/**
* @param Builder<static> $query
* @param Builder<static> $query
* @return Builder<static>
*/
public function scopeWithName(Builder $query, string $name): Builder
Expand All @@ -56,8 +59,8 @@ public function scopeWithName(Builder $query, string $name): Builder
}

/**
* @param Builder<static> $query
* @param class-string $className
* @param Builder<static> $query
* @param class-string $className
* @return Builder<static>
*/
public function scopeForClass(Builder $query, string $className): Builder
Expand All @@ -68,17 +71,17 @@ public function scopeForClass(Builder $query, string $className): Builder
public function passes(Volitional $object): bool
{
return $this->conditions
->reduce(fn (bool $carry, Condition $condition): bool => $carry && $condition->passes($object), true);
->reduce(fn(bool $carry, Condition $condition): bool => $carry && $condition->passes($object), true);
}

public function addCondition(IsCondition $condition)
public function addCondition(IsCondition $condition): static
{
$this->conditions()->save((new Condition())->condition($condition));

return $this;
}

public function addAction(IsAction $action)
public function addAction(IsAction $action): static
{
$this->actions()->save((new Action())->action($action));

Expand Down
10 changes: 8 additions & 2 deletions src/Traits/BelongToRule.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,20 @@
namespace Squarebit\Volition\Traits;

use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Squarebit\Volition\Models\Element;
use Squarebit\Volition\Models\Rule;

/**
* @property \Squarebit\Volition\Models\Rule $rule
* @property string rule_id
* @template TModel
*
* @property Rule $rule
* @property string $rule_id
*/
trait BelongToRule
{
/**
* @return BelongsTo<Rule, TModel>
*/
public function rule(): BelongsTo
{
return $this->belongsTo(Rule::class);
Expand Down

0 comments on commit c10a07a

Please sign in to comment.