/**
  * Get replacement array that will be used for replace in string
  *
  * @param Module $module
  * @param array $definedReplacements
  *
  * @return Collection
  */
 private function getReplacements(Module $module, array $definedReplacements)
 {
     $replacements = collect();
     collect(['module' => $module->name(), 'class' => $module->name(), 'moduleNamespace' => $module->name(), 'namespace' => rtrim($this->configClass()->modulesNamespace(), '\\'), 'plural|lower' => mb_strtolower(str_plural($module->name()))])->merge($definedReplacements)->each(function ($value, $key) use($replacements) {
         $replacements->put($this->configClass()->startSeparator() . $key . $this->configClass()->endSeparator(), $value);
     });
     return $replacements;
 }
 /**
  * Add module to configuration file
  *
  * @param $module
  */
 protected function addModuleToConfigurationFile(Module $module)
 {
     $configFile = $this->laravel['modular.config']->configPath();
     if (!$this->laravel['modular.config']->autoAdd()) {
         $this->info("[Module {$module->name()}] - auto-adding to config file turned off\n" . "Please add this module manually into {$configFile} file if you want to use it");
         return;
     }
     // getting modified content of config file
     $result = preg_replace_callback($this->laravel['modular.config']->autoAddPattern(), function ($matches) use($module, $configFile) {
         return $matches[1] . $matches[2] . $this->replace($this->laravel['modular.config']->autoAddTemplate(), $module) . $matches[3];
     }, $this->laravel['files']->get($configFile), -1, $count);
     if ($count) {
         // found place where new module should be added into config file
         $this->laravel['files']->put($configFile, $result);
         $this->comment("[Module {$module->name()}] Added into config file {$configFile}");
     } else {
         // cannot add module to config file automatically
         $this->warn("[Module {$module->name()}] It was impossible to add module into {$configFile}" . " file.\n Please make sure you haven't changed structure of this file. " . "At the moment add <info>{$module->name()}</info> to this file manually");
     }
 }
 /**
  * Create files inside given module
  *
  * @param Module $module
  * @param string $stubGroup
  * @param string $subModule
  *
  * @return bool
  */
 protected function createModuleFiles(Module $module, $stubGroup, $subModule = null)
 {
     $files = collect($this->laravel['modular.config']->stubGroupFiles($stubGroup));
     if ($files->isEmpty()) {
         $this->warn("[Module {$module->name()}] No files created");
         return false;
     }
     $replacements = $subModule ? ['class' => $subModule] : [];
     $files->each(function ($stubFile, $moduleFile) use($module, $stubGroup, $replacements) {
         $this->copyStubFileIntoModule($module, $stubFile, $stubGroup, $moduleFile, $replacements);
     });
     return true;
 }
 /** @test */
 public function it_returns_valid_module_name()
 {
     $this->createModuleMock();
     $this->assertSame($this->name, $this->module->name());
 }