public function fill(array $input)
    {
        $this->assertIsFillable();

        ArrayMap::of($input)
            ->only($this->getFillable())
            ->each(function ($value, $key) {
                $setter = vsprintf('set%s', [Str::studly($key)]);

                if (method_exists($this, $setter)) {
                    $this->$setter($value);

                    return;
                }

                $camel = Str::camel($key);
                $this->$camel = $value;
            });

        return $this;
    }