Productivity: Create createRootCoordinator.sh

This commit is contained in:
manuroe
2019-04-04 22:11:52 +02:00
parent bad2f2ca8a
commit f907fdac0a
2 changed files with 74 additions and 5 deletions

View File

@@ -1,9 +1,9 @@
The `buildable` contains templates with source files that build.
The `buildable` folder contains templates with source files that build.
The goal is to turn these templates as Xcode templates. They are part of the Riot project in order to ensure they build
# ScreenTemplate
This is the boilerplate to create a screen that follows the MVVM-C pattern within the Riot app.
This is the boilerplate to create a screen that follows the MVVM-C pattern used within the Riot app.
To use it (before it becomes an Xcode template):
@@ -18,7 +18,39 @@ The boilerplate to create a root coordinator and its presenter bridge that can b
To use it (before it becomes an Xcode template):
- `./createFlowCoordinator.sh MyFlowCoordinator [subFolder]`
- Import the created folder in the Xcode project
- `./createRootCoordinator.sh Folder MyRootCoordinatorName [DefaultScreenName]`
- Import created files in the Xcode project
`subFolder` is an option subfolder under `Riot/Modules/`
# Usage example
Following commands:
```
./createScreen.sh MyFlowDir/MyFirstScreenDir MyFirstScreen
./createRootCoordinator.sh MyFlowDir MyFlow MyFirstScreen
```
generate in `Riot/Modules`:
```
Riot/Modules/MyFlowDir
├── MyFirstScreenDir
│   ├── MyFirstScreenCoordinator.swift
│   ├── MyFirstScreenCoordinatorType.swift
│   ├── MyFirstScreenViewAction.swift
│   ├── MyFirstScreenViewController.storyboard
│   ├── MyFirstScreenViewController.swift
│   ├── MyFirstScreenViewModel.swift
│   ├── MyFirstScreenViewModelType.swift
│   └── MyFirstScreenViewState.swift
├── MyFlowCoordinator.swift
├── MyFlowCoordinatorBridgePresenter.swift
└── MyFlowCoordinatorType.swift
```
It is then ready to use:
```
MyFlowCoordinatorBridgePresenter *presenter = [[MyFlowCoordinatorBridgePresenter alloc] initWithSession:session];
[presenter presentFrom:self animated:YES];
```

View File

@@ -0,0 +1,37 @@
#!/bin/bash
if [ ! $# -eq 2 ] && [ ! $# -eq 3 ] ; then
echo "Usage: ./createRootCoordinator.sh Folder MyRootCoordinatorName [DefaultScreenName]"
exit 1
fi
OUTPUT_DIR="../../Riot/Modules"/$1
COORDINATOR_NAME=$2
COORDINATOR_VAR_NAME=`echo $COORDINATOR_NAME | awk '{ print tolower(substr($0, 1, 1)) substr($0, 2) }'`
SCREEN_NAME=$3
SCREEN_VAR_NAME=`echo $SCREEN_NAME | awk '{ print tolower(substr($0, 1, 1)) substr($0, 2) }'`
MODULE_DIR="../../Riot/Modules"
echo "Create folder ${OUTPUT_DIR}"
mkdir -p $OUTPUT_DIR
cp -R buildable/FlowCoordinatorTemplate/ $OUTPUT_DIR/
cd $OUTPUT_DIR
for file in FlowTemplate*
do
if [ -f "$file" ]; then
echo "Building ${file/FlowTemplate/$COORDINATOR_NAME}..."
perl -p -i -e "s/FlowTemplate/"$COORDINATOR_NAME"/g" $file
perl -p -i -e "s/flowTemplate/"$COORDINATOR_VAR_NAME"/g" $file
if [ -n "$SCREEN_NAME" ]; then
perl -p -i -e "s/TemplateScreen/"$SCREEN_NAME"/g" $file
perl -p -i -e "s/templateScreen/"$SCREEN_VAR_NAME"/g" $file
fi
mv ${file} ${file/FlowTemplate/$COORDINATOR_NAME}
fi
done