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

The Little Engines That Could

The Little Engines That Could

Rails Engines. It’s more than just a cute name made up of two words both related to trains.

Are they plug-ins? Are they gems? When do we use them? How do we implement them? Why aren’t they used more often?

Those are the questions I wish were answered for me when I first learned about Rails Engines. Inspired by Wired’s Explain In 5 Levels series, we will explore Rails Engines and address these quandaries using a variety of techniques, breaking down what engines are and how and when to use them.

Mina Slater

May 24, 2022
Tweet

Other Decks in Programming

Transcript

  1. The Little Engines That Could
    RailsConf 2022
    🚂

    View Slide

  2. 👋 👋 👋
    She/her


    Rails Developer


    : @minar528
    Hi! I’m Mina!

    View Slide

  3. The Little Engines That Could
    RailsConf 2022
    Three ways to understanding
    🚂

    View Slide

  4. @minar528
    RailsConf 2022 @minar528
    💭

    View Slide

  5. @minar528
    RailsConf 2022
    🤨

    View Slide

  6. @minar528
    RailsConf 2022
    🚂 👀

    View Slide

  7. @minar528
    RailsConf 2022
    🎉
    🚂

    View Slide

  8. @minar528
    RailsConf 2022
    🎙

    View Slide

  9. @minar528
    RailsConf 2022
    🔎

    View Slide

  10. RailsConf 2022 @minar528

    View Slide

  11. RailsConf 2022 @minar528
    🤹

    View Slide

  12. RailsConf 2022 @minar528
    🤹

    View Slide

  13. RailsConf 2022 @minar528
    🤹

    View Slide

  14. 🤹
    RailsConf 2022 @minar528
    What is an engine?


    What are its bene
    f
    its?

    View Slide

  15. 🤹
    RailsConf 2022 @minar528
    What is an engine?


    What are its bene
    f
    its?
    What makes it unique?


    Types of engines?

    View Slide

  16. 🤹
    RailsConf 2022 @minar528
    How to implement?


    How to test?


    What is an engine?


    What are its bene
    f
    its?
    What makes it unique?


    Types of engines?

    View Slide

  17. @minar528
    RailsConf 2022 @minar528
    @minar528
    Level One
    Non-Technical

    View Slide

  18. RailsConf 2022 @minar528
    🕵

    View Slide

  19. RailsConf 2022 @minar528
    🚂
    🕵

    View Slide

  20. RailsConf 2022 @minar528
    🕵 🚂

    View Slide

  21. @minar528
    RailsConf 2022

    View Slide

  22. RailsConf 2022 @minar528

    View Slide

  23. RailsConf 2022 @minar528

    View Slide

  24. @minar528
    RailsConf 2022
    Cannot operate alone
    Both need hosts

    View Slide

  25. @minar528
    RailsConf 2022
    Provides "superpowers"
    Both enhance their hosts

    View Slide

  26. @minar528
    RailsConf 2022
    Multiple Hosts
    Both can integrate with and adapt to di
    ff
    erent hosts

    View Slide

  27. RailsConf 2022 @minar528
    Groot Rocket Drax

    View Slide

  28. RailsConf 2022 @minar528
    🕵

    View Slide

  29. @minar528
    RailsConf 2022
    Reusable
    Client wants to share the engine

    View Slide

  30. @minar528
    RailsConf 2022
    Reduce scope
    Client wants to split up the system

    View Slide

  31. @minar528
    RailsConf 2022
    Shorten test time
    Client wants to cut their test execution time

    View Slide

  32. 🤹
    RailsConf 2022 @minar528
    How to implement?


    How to test?


    What is an engine?


    What are its bene
    f
    its?
    What makes it unique?


    Types of engines?

    View Slide

  33. 🤹
    RailsConf 2022 @minar528
    How to implement?


    How to test?


    What is an engine? ✅


    What are its bene
    f
    its?
    What makes it unique?


    Types of engines?

    View Slide

  34. 🤹
    RailsConf 2022 @minar528
    How to implement?


    How to test?


    What is an engine? ✅


    What are its bene
    f
    its? ✅
    What makes it unique?


    Types of engines?

    View Slide

  35. @minar528
    RailsConf 2022 @minar528
    @minar528
    Level Two
    Early-Career Devs

    View Slide

  36. RailsConf 2022 @minar528

    View Slide

  37. RailsConf 2022 @minar528

    View Slide

  38. RailsConf 2022 @minar528
    🚂 🚄
    vs.

    View Slide

  39. RailsConf 2022 @minar528
    Rails::Application


    Rails::Engine
    🚂 🚄
    vs.
    🚂 🚄
    vs.

    View Slide

  40. RailsConf 2022 @minar528
    Rails::Application < Rails::Engine
    Rails::Engine


    🚂 🚄
    vs.
    🚂 🚄
    vs.

    View Slide

  41. RailsConf 2022 @minar528
    Rails::Application < Rails::Engine


    Also MVC


    Rails::Engine


    MVC


    🚂 🚄
    vs.
    🚂 🚄
    vs.

    View Slide

  42. RailsConf 2022 @minar528
    Rails::Application < Rails::Engine


    Also MVC


    Runs independently


    Rails::Engine


    MVC


    🚂 🚄
    vs.
    🚂 🚄
    vs.

    View Slide

  43. RailsConf 2022 @minar528
    Rails::Application < Rails::Engine


    Also MVC


    Runs independently


    Rails::Engine


    MVC


    Nope.


    🚂 🚄
    vs.
    🚂 🚄
    vs.

    View Slide

  44. RailsConf 2022 @minar528
    Rails::Application < Rails::Engine


    Also MVC


    Runs independently


    Gem
    f
    ile
    Rails::Engine


    MVC


    Nope.


    gemspec
    🚂 🚄
    vs.
    🚂 🚄
    vs.

    View Slide

  45. RailsConf 2022 @minar528
    🚂 💎
    vs.

    View Slide

  46. RailsConf 2022 @minar528
    💎
    Packaged and published


    🚂 vs.
    🚂 vs.

    View Slide

  47. RailsConf 2022 @minar528
    💎
    Packaged and published


    CAN be packaged and published


    🚂 vs.
    🚂 vs.

    View Slide

  48. RailsConf 2022 @minar528
    💎
    Packaged and published


    CAN be packaged and published


    Rails only
    🚂 vs.
    🚂 vs.

    View Slide

  49. RailsConf 2022 @minar528
    💎
    Packaged and published


    Any Ruby project


    CAN be packaged and published


    Rails only
    🚂 vs.
    🚂 vs.

    View Slide

  50. RailsConf 2022 @minar528
    🚂 🔌
    vs.

    View Slide

  51. RailsConf 2022 @minar528
    🔌
    Subset of 🔌
    🚂 vs.
    Includes 🚂

    View Slide

  52. RailsConf 2022 @minar528
    🔌
    Subset of 🔌


    Use with Rails
    🚂 vs.
    Includes 🚂


    Use with Rails

    View Slide

  53. RailsConf 2022 @minar528
    Rails Guides
    “An engine CAN be a plugin,


    and a plugin CAN be an engine.”

    View Slide

  54. @minar528
    RailsConf 2022

    View Slide

  55. RailsConf 2022 @minar528
    My PR to Rails documentation
    “All engines are plugins,


    but not all plugins are engines.”

    View Slide

  56. RailsConf 2022 @minar528
    🔌
    Subset of 🔌


    Use with Rails


    MVC
    🚂 vs.
    Includes 🚂


    Use with Rails


    View Slide

  57. RailsConf 2022 @minar528
    🔌
    Subset of 🔌


    Use with Rails


    MVC
    🚂 vs.
    Includes 🚂


    Use with Rails


    Model-level modi
    f
    ications


    View Slide

  58. RailsConf 2022 @minar528
    🔌
    Subset of 🔌


    Use with Rails


    MVC


    🚂 vs.
    Includes 🚂


    Use with Rails


    Model-level modi
    f
    ications


    View Slide

  59. RailsConf 2022 @minar528

    View Slide

  60. RailsConf 2022 @minar528

    View Slide

  61. 🤹
    RailsConf 2022 @minar528
    How to implement?


    How to test?


    What makes it unique?


    Types of engines?
    What is an engine? ✅


    What are its bene
    f
    its? ✅

    View Slide

  62. 🤹
    RailsConf 2022 @minar528
    How to implement?


    How to test?


    What makes it unique? ✅


    Types of engines?
    What is an engine? ✅


    What are its bene
    f
    its? ✅

    View Slide

  63. 🤹
    RailsConf 2022 @minar528
    How to implement?


    How to test?


    What makes it unique? ✅


    Types of engines? ✅
    What is an engine? ✅


    What are its bene
    f
    its? ✅

    View Slide

  64. @minar528
    RailsConf 2022 @minar528
    @minar528
    Level Three
    Rails Devs New To Engines

    View Slide

  65. RailsConf 2022 @minar528

    View Slide

  66. RailsConf 2022 @minar528

    View Slide

  67. RailsConf 2022 @minar528

    View Slide

  68. RailsConf 2022 @minar528

    View Slide

  69. RailsConf 2022 @minar528

    View Slide

  70. RailsConf 2022 @minar528

    View Slide

  71. RailsConf 2022 @minar528

    View Slide

  72. RailsConf 2022 @minar528

    View Slide

  73. RailsConf 2022 @minar528

    View Slide

  74. RailsConf 2022 @minar528

    View Slide

  75. RailsConf 2022 @minar528

    View Slide

  76. RailsConf 2022 @minar528

    View Slide

  77. RailsConf 2022 @minar528

    View Slide

  78. RailsConf 2022 @minar528

    View Slide

  79. RailsConf 2022 @minar528

    View Slide

  80. RailsConf 2022 @minar528

    View Slide

  81. RailsConf 2022 @minar528

    View Slide

  82. RailsConf 2022 @minar528

    View Slide

  83. @minar528
    RailsConf 2022
    🎉

    View Slide

  84. RailsConf 2022 @minar528

    View Slide

  85. RailsConf 2022 @minar528

    View Slide

  86. 🤹
    RailsConf 2022 @minar528
    How to implement?


    How to test & mount?


    What makes it unique? ✅


    Types of engines? ✅
    What is an engine? ✅


    What are its bene
    f
    its? ✅

    View Slide

  87. 🤹
    RailsConf 2022 @minar528
    How to implement? ✅


    How to test & mount?


    What makes it unique? ✅


    Types of engines? ✅
    What is an engine? ✅


    What are its bene
    f
    its? ✅

    View Slide

  88. 🤹
    RailsConf 2022 @minar528
    What makes it unique? ✅


    Types of engines? ✅
    What is an engine? ✅


    What are its bene
    f
    its? ✅
    How to implement? ✅


    How to test & mount? ✅


    View Slide

  89. @minar528
    RailsConf 2022
    🚂 💕

    View Slide

  90. @minar528
    RailsConf 2022
    RailsConf 2023?

    View Slide

  91. RailsConf 2022 @minar528
    🚂 🧰
    🛤

    View Slide

  92. RailsConf 2022 @minar528
    🚂
    🧰
    🛤

    View Slide

  93. RailsConf 2022 @minar528
    THANK YOU! 🥰
    🖋 http://minaslater.blog


    🎙 “Your TDD Treasure Map” - Aji Slater


    🎙 “Come On In! Making Yourself At Home In A New Codebase” -
    Mercedes Bernard

    View Slide