Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Генерамба и прочие аспекты кодогенерации в VIPER

Egor Tolstoy
December 22, 2015

Генерамба и прочие аспекты кодогенерации в VIPER

Выступление на Rambler.iOS #5:
Видео: http://www.youtube.com/watch?v=NXNiN9FaUnY
Генерамба: https://github.com/rambler-ios/Generamba

Egor Tolstoy

December 22, 2015
Tweet

More Decks by Egor Tolstoy

Other Decks in Technology

Transcript

  1. Генерамба
    и прочие аспекты
    кодогенерации в VIPER

    View full-size slide

  2. Автор
    Егор Толстой
    Ведущий iOS разработчик
    Rambler&Co
    Twitter: @igrekde
    www.github.com/igrekde

    View full-size slide

  3. •Использование шаблонов Xcode
    •Что такое Генерамба
    •Устройство Генерамбы

    View full-size slide

  4. Классы:
    Assembly.h
    Assembly.m
    ViewController.h
    ViewController.m
    Presenter.h
    Presenter.m
    Interactor.h
    Interactor.m
    Router.h
    Router.m
    Протоколы:
    ViewInput.h
    ViewOutput.h
    InteractorInput.h
    InteractorOutput.h
    RouterInput.h
    ModuleInput.h
    Тесты:
    AssemblyTests.m
    ViewControllerTests.m
    PresenterTests.m
    InteractorTests.m
    RouterTests.m

    View full-size slide

  5. 21 файл * 30 секунд
    =
    10 минут

    View full-size slide

  6. #import "___VARIABLE_viperModuleName:identifier___Interactor.h"
    #import "___VARIABLE_viperModuleName:identifier___InteractorOutput.h"
    @implementation ___VARIABLE_viperModuleName:identifier___Interactor
    #pragma mark - ___VARIABLE_viperModuleName:identifier___InteractorInput
    @end

    View full-size slide

  7. gem install generamba

    View full-size slide

  8. generamba setup
    generamba template install
    generamba gen MyModule template_name

    View full-size slide

  9. #import "{{ prefix }}{{ module_info.name }}Presenter.h"
    @implementation {{ prefix }}{{ module_info.name }}Presenter
    #pragma mark - Методы {{ prefix }}{{ module_info.name }}ViewOutput
    - (void)didTriggerViewReadyEvent {
    [self.view setupInitialState];
    }
    @end

    View full-size slide

  10. • Project/Rambafile
    • Project/Templates/
    • ~/.generamba/
    user-
    preferences.yml
    • Локальные шаблоны
    • Удаленные шаблоны
    • Шаблоны каталога
    Проект Пользователь Внешние ресурсы

    View full-size slide

  11. {{ module_name }}
    {{ prefix }}
    {{ module_info.description }}
    liquid

    View full-size slide

  12. {% if user.name == 'tobi' %}
    Hello tobi
    {% elsif user.name == 'bob' %}
    Hello bob
    {% endif %}
    if/else
    liquid

    View full-size slide

  13. {% for item in array %}
    {{ item }}
    {% endfor %}
    for loop
    liquid

    View full-size slide

  14. • {{ "a~b" | split:"~" }} #=> ['a','b']
    • {{ 'barbar' | remove_first:'bar' }} #=> 'bar'
    • {{ 3 | pluralize: 'item', 'items' }} #=> 'items'
    работа со строками
    liquid

    View full-size slide

  15. XCODEPROJ_HELPER
    GEN_COMMAND
    MODULE_GENERATOR
    CONTENT_GENERATOR
    CODE_MODULE
    MODULE_TEMPLATE
    Filesystem Project.xcodeproj
    Command Line Interface
    Code Generation
    Output
    TILT

    View full-size slide

  16. SETUP_COMMAND
    RAMBAFILE_
    GENERATOR
    Rambafile
    Command Line Interface
    Output
    TILT
    Code Generation

    View full-size slide

  17. LOCAL_INSTALLER
    TEMPLATE_
    INSTALL_
    COMMAND
    TEMPLATE_PROCESSOR REMOTE_INSTALLER
    TEMPLATE_DECLARATION
    Filesystem
    Command Line Interface
    Installation Logic
    Output
    CATALOG_INSTALLER

    View full-size slide

  18. •Полное покрытие тестами,
    •Автоматическая установка зависимостей,
    •Автогенерация тестов по интерфейсам,
    •Список всех сгенерированных модулей,
    •GUI
    Планы

    View full-size slide

  19. •Ruby - отличный выбор для подобных
    утилит,
    •Автоматизация любых процессов - ценное
    вложение труда и времени,
    •rails-way для iOS приложений.
    Выводы

    View full-size slide

  20. https://github.com/rambler-ios/Generamba
    &

    View full-size slide