Test Setup Failed
Pull Request — develop (#1)
by Andreas
04:24
created

Product   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 96
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 6
Bugs 0 Features 2
Metric Value
wmc 7
c 6
b 0
f 2
lcom 1
cbo 1
dl 0
loc 96
rs 10

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 11 2
A getSku() 0 4 1
A getSlug() 0 4 1
A getTitle() 0 4 1
A getSummaryText() 0 4 1
A getProductDescription() 0 4 1
1
<?php
2
3
namespace Wambo\Catalog\Model;
4
5
/**
6
 * Class Product represents a single catalog item or product.
7
 *
8
 * @package Wambo\Catalog
9
 */
10
class Product
11
{
12
    /**
13
     * @var SKU
14
     */
15
    private $sku;
16
    /**
17
     * @var Slug
18
     */
19
    private $slug;
20
    /**
21
     * @var string
22
     */
23
    private $title;
24
    /**
25
     * @var Content
26
     */
27
    private $content;
28
29
    /**
30
     * Creates a new Product basic class instance.
31
     *
32
     * @param SKU     $sku     A unique identifier for the product (e.g. "fancy-short-1")
33
     * @param Slug    $slug    A human-readable, descriptive URL fragment for the product (e.g.
34
     *                         "fancy-t-shirt-1-with-ice-cream-pooping-unicorn")
35
     * @param string  $title   The title of the product (e.g. "Fancy T-Shirt No. 1")
36
     * @param Content $content A product content model
37
     *
38
     * @throws \InvalidArgumentException If the given $sku is null or empty.
39
     * @throws \InvalidArgumentException If the given $slug is null or empty.
40
     * @throws \InvalidArgumentException If the given $title is null or empty.
41
     */
42
    public function __construct(SKU $sku, Slug $slug, string $title, Content $content)
43
    {
44
        if (strlen($title) == 0) {
45
            throw new \InvalidArgumentException("The title cannot be empty");
46
        }
47
48
        $this->sku = $sku;
49
        $this->slug = $slug;
50
        $this->title = $title;
51
        $this->content = $content;
52
    }
53
54
    /**
55
     * Get the unique identifier for the product (e.g. "fancy-short-1")
56
     *
57
     * @return SKU
58
     */
59
    public function getSku()
60
    {
61
        return $this->sku;
62
    }
63
64
    /**
65
     * Get the human-readable, descriptive URL fragment for the product (e.g.
66
     *                        "fancy-t-shirt-1-with-ice-cream-pooping-unicorn")
67
     *
68
     * @return Slug
69
     */
70
    public function getSlug()
71
    {
72
        return $this->slug;
73
    }
74
75
    /**
76
     * Get the title of the product (e.g. "Fancy T-Shirt No. 1")
77
     *
78
     * @return string
79
     */
80
    public function getTitle()
81
    {
82
        return $this->title;
83
    }
84
85
    /**
86
     * Get a short description text of the product (e.g. "The first edition of our fancy T-Shirt with a unicorn pooping
87
     * ice cream on the front")
88
     *
89
     * @return string
90
     */
91
    public function getSummaryText()
92
    {
93
        return $this->content->getSummaryText();
94
    }
95
96
    /**
97
     * Get a full product description text
98
     *
99
     * @return string
100
     */
101
    public function getProductDescription()
102
    {
103
        return $this->content->getProductDescription();
104
    }
105
}