AbstractExporter::close()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
c 0
b 0
f 0
ccs 3
cts 3
cp 1
rs 10
cc 1
nc 1
nop 0
crap 1
1
<?php namespace Arcanedev\LaravelExcel\Exporters;
2
3
use Arcanedev\LaravelExcel\Contracts\Exporter as ExporterContract;
4
use Arcanedev\LaravelExcel\Contracts\Serializer as SerializerContract;
5
use Arcanedev\LaravelExcel\Traits\WithOptions;
6
use Box\Spout\Writer\WriterFactory;
7
use Illuminate\Support\Collection;
8
9
/**
10
 * Class     AbstractExporter
11
 *
12
 * @package  Arcanedev\LaravelExcel\Exporter
13
 * @author   ARCANEDEV <[email protected]>
14
 */
15
abstract class AbstractExporter implements ExporterContract
16
{
17
    /* -----------------------------------------------------------------
18
     |  Traits
19
     | -----------------------------------------------------------------
20
     */
21
22
    use WithOptions;
23
24
    /* -----------------------------------------------------------------
25
     |  Properties
26
     | -----------------------------------------------------------------
27
     */
28
29
    /** @var array */
30
    protected $data = [];
31
32
    /** @var string */
33
    protected $type;
34
35
    /** @var \Arcanedev\LaravelExcel\Contracts\Serializer */
36
    protected $serializer;
37
38
    /** @var \Box\Spout\Writer\WriterInterface */
39
    protected $writer;
40
41
    /* -----------------------------------------------------------------
42
     |  Constructor
43
     | -----------------------------------------------------------------
44
     */
45
46
    /**
47
     * AbstractExporter constructor.
48
     *
49
     * @param  array  $options
50
     */
51 45
    public function __construct(array $options = [])
52
    {
53 45
        $this->setSerializer(new DefaultSerializer);
54 45
        $this->setOptions($options);
55 45
    }
56
57
    /* -----------------------------------------------------------------
58
     |  Getters & Setters
59
     | -----------------------------------------------------------------
60
     */
61
62
    /**
63
     * Set the serializer.
64
     *
65
     * @param  \Arcanedev\LaravelExcel\Contracts\Serializer  $serializer
66
     *
67
     * @return self
68
     */
69 45
    public function setSerializer(SerializerContract $serializer)
70
    {
71 45
        $this->serializer = $serializer;
72
73 45
        return $this;
74
    }
75
76
    /**
77
     * Get the file type.
78
     *
79
     * @return string
80
     */
81 18
    public function getType()
82
    {
83 18
        return $this->type;
84
    }
85
86
    /* -----------------------------------------------------------------
87
     |  Main Methods
88
     | -----------------------------------------------------------------
89
     */
90
91
    /**
92
     * Load the data.
93
     *
94
     * @param  \Illuminate\Support\Collection  $data
95
     *
96
     * @return self
97
     */
98 9
    public function load(Collection $data)
99
    {
100 9
        $this->data = $data;
0 ignored issues
show
Documentation Bug introduced by
It seems like $data of type object<Illuminate\Support\Collection> is incompatible with the declared type array of property $data.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
101
102 9
        return $this;
103
    }
104
105
    /**
106
     * Save the data to a file.
107
     *
108
     * @param  string  $filename
109
     */
110 9
    public function save($filename)
111
    {
112 9
        $this->create();
113 9
        $this->writer->openToFile($filename);
114 9
        $this->makeRows();
115 9
        $this->close();
116 9
    }
117
118
    /* -----------------------------------------------------------------
119
     |  Other Methods
120
     | -----------------------------------------------------------------
121
     */
122
123
    /**
124
     * Create the writer.
125
     */
126 9
    protected function create()
127
    {
128 9
        $this->writer = WriterFactory::create($this->type);
129 9
        $this->loadOptions();
130 9
    }
131
132
    /**
133
     * Load the writer options.
134
     */
135
    abstract protected function loadOptions();
136
137
    /**
138
     * Close the writer.
139
     */
140 9
    protected function close()
141
    {
142 9
        $this->writer->close();
143 9
    }
144
145
    /**
146
     * Make rows.
147
     */
148 9
    protected function makeRows()
149
    {
150 9
        if ( ! empty($headerRow = $this->serializer->getHeader()))
151
            $this->writer->addRow($headerRow);
152
153 9
        foreach ($this->data as $record) {
154 6
            $this->writer->addRow(
155 6
                $this->serializer->getData($record)
156
            );
157
        }
158 9
    }
159
}
160