# General Spec

Simply use `general spec` command or create a YAML file named `general.yml` at the root of your repository. It is not required by General, but adds useful context for Stencil templates, configs for Xcode projects and default outputs for templates. 

## General Spec File Format

The configuration file is a YAML file structured like this (example):

```yaml
project: Project.xcodeproj
target: App
testTarget: Tests
company: Rosberry
outputs:
  - templateName: rsb_mvp_vm_module
    path: Classes/Presentation/Modules
    testPath: Tests/Presentation/Modules
  - templateName: rsb_mvp_vm_list_module
    path: Classes/Presentation/Modules
```

Here's a quick description of all the possible _root_ keys. All of them are optional.

| Key          | Description                                                  | Intended usage                                               |
| ------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| `project`    | If present, General will try to add generated files to Xcode project with this name. | This is useful if you want to add generated files to Xcode project. |
| `target`     | If present, generated files will be added to `project` target with this name. | If missing, General will try to add generated files to first app target in `project` if it presents. |
| `testTarget` | If present, generated files will be added to `project` target with this name. | If missing, General will try to add generated files to first test target in `project` if it presents. |
| `company`    | Describe the name of the company. Commonly used fo header templates. | If you use `general spec` command, it will try to use `ORGANIZATIONNAME` from `project` if it presents. |
| `outputs`    | Describe default paths for templates.                        | See below for a detail of all the subkeys.                   |

Here's a description of subkeys for `outputs`.

| Subkey         | Type   | Description                                   |
| -------------- | ------ | --------------------------------------------- |
| `templateName` | String | The name of the template.                     |
| `path`         | String | The relative path for generated source files. |
| `testPath`     | String | The relative path for generated test files.   |